Некоторые опции sysctl

Озадачился собрать и попробовать всякие sysctl опции ядра, повышающие безопасность машины, и облегчающие её работу при попытках всяких атак и сканировании портов. А может, даже, просто те пункты, которые показались интересными и нужными — причём даже только начав, заметил одну вещщь — почти всё касается работы стека TCP/IP, что и неудивительно, ибо основное применение FreeBSD — это серверы. Порывшись в инете понял — 90% данных это скопированный друг у друга перевод какой-то буржуйской статьи. Собстно поэтому и начал ковыряться — остальные 10% — это далеко немало… Причина крайне проста — это самая недокументированная часть FreeBSD…

Следующие два пункта касаются поведения ОС при попытке подключиться на порты, которые не слушаются приложениями. При штатных настройках, в таком случае, система посылает пакет с флагом RST, и закрывет подключение. Удалённый хост получает примерно следующее (если пробовать telnet`ом подключиться): Connection reset by peer.
net.inet.tcp.blackhole=2 — данный пункт указывает, что происходит при получении TCP-пакета на закрытый порт (не слушаемый никакими приложениями)Если стоит «1″, то SYN пакеты (пакет, устанавливающий соединение) на закрытый порт будут отклоняться без отсылки отправителю RST пакета (перезагрузка (соединения, не машины :) )). При установке в «2″, вообще все (а не только SYN) пакеты на закрытый порт отбрасываются без каких-либо действий. Данный пункт позволяет разгрузить ЦП, т.к. обработка пакетов не производится, и интернет-канал сервера — т.к. не надо слать ответных пакетов.

net.inet.udp.blackhole=1 — очень похож на предыдущий пункт, по результату, но для протокола UDP. Ввиду того, что протокол UDP работает без установки соединения, есть только два, а не три варианта установки, когда эта переменная установлена в 1, то отбрасываются все UDP пакеты, адресованые закрытым портам.

kern.ipc.somaxconn=1024 — увеличивает размер очереди для сокетов, чем помогает предотвратить SYN-атаку, когда очередь сокета переполняется некорректными попытками соединений. Конечно от мощной атаки это не спасёт, но от слабой и средней — должно помочь. Значение по дефолту — 128.

Следующие 4 пункта необходимы для невозможности удалённого изменения таблицы маршрутизации на Вашем хосте. Надо заметить, что установив эти пункты как указано, я столкнулся с проблемами в собственной сети — как оказалось между некоторыми подсетями маршрутизация была криво настроена (причём сам же знал, что криво, сам же криво и делал — быстрей, быстрей! — а потом всё недосуг было заняться) — соответственно клиентские компы начали терять некоторые сети. Пришлось сделать всё по-уму :)

net.inet.icmp.drop_redirect=1 — уничтожать icmp-датаграммы переадресации

net.inet.icmp.log_redirect=1 — записывать в журнал событий icmp-датаграммы с указанием переадресации

net.inet.ip.redirect=0 — может ли эта машина посылать дейтаграммы переадресации другим (вот из-за изменения этого пункта у меня сеть и плющщило, но менять его надо, просто надо сразу сетку корректно настраивать)

net.inet6.ip6.redirect=0 — предыдущий пункт, но для IPv6

Read the rest of this entry »