Инструменты пользователя

Инструменты сайта


freebsd:security

Настройки безопасности FreeBSD

Некоторые опции sysctl Автор: lissyara.

  Озадачился собрать и попробовать всякие 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 (Кто-то им пользуется? :)) Пара пунктов отвечающих за работу TCP. Общий смысл такой: ОСь не отвечет на каждый пакет, что он получен или неполучен сразу, а ждёт, пока придёт (или подготовится к отправке) некоторое количество инфы, а потом разом всё это отправляет. Тем самым удаётся разгрузить сеть, т.к. уменьшается общее число пересланных байт (меньше накладных расходов). Очень полезно при интенсивной нагрузке на сеть в одну сторону (HTTP, FTP, & etc). Эти два параметра позволяют установить размер окна приёма и передачи соостветственно. Ограничение по RFC (RFC1323, RFC2018) составляет 64k, но реально можно поставить и больше - тока надо быть уверенным, что и с клиентской стороны подддерживается такое большое окно. Если поставить больше то могут возикнуть проблемы: клиент данные шлёт, а подтверждения не получает, по достижении 64k он думает, что, по неизветстным причинам пропали все пакеты и начинает слать их заново… А Ваш всё ждёт… :))) Дефолтовые значения современных FreeBSD - sendspace=32768 и recvspace=57344. (Насколько я понимаю, у старых было меньше 32k). Пробовал увеличить до 65536 - вроде косяков не заметил… net.inet.tcp.sendspace=65536 - размер `окна` отправки net.inet.tcp.recvspace=65536 - размер `окна` приёма net.link.ether.inet.max_age=1200 - время устаревания записей ARP, в секундах. По истечении этого времени запись удаляется. Тоже помогает против соответствующего типа атаки - когда в таблице ARP создаётся много неверных записей. По дефолту оно 1200 и есть, но возможно, имеет смысл, уменьшить это значение. net.inet.ip.sourceroute=0 и net.inet.ip.accept_sourceroute=0 - При помощи маршрутизации отправителя (это когда в пакете, ещё и маршрут нарисован, по которому его надо дальше передавать) возможно прощупать вашу внутреннюю сеть снаружи (даже если это частная сеть!). Значения по-умолчанию (0) запрещают такое делать. Так что менять не надо. net.inet.icmp.bmcastecho=0 - Установка в этого пункта в `0` (а по-умолчанию он так и стоит) зарубает ICMP-сообщения типов 0 и 8 (эхо-запрос и эхо-ответ) на широковещательном адресе. net.inet.icmp.maskrepl=0 - Также, с помощью icmp можно запросить маску Вашей сети, и узнать её размер (не то, чтобы прям такая ценная инфа, но облегчать работу противника не надо ни в чём.). По умолчанию этот параметр в `0` - что запрещает такие запросы. Не надо его ставить в `1` :) net.inet.tcp.msl=15000 - Есть такая феня, как максимальное время жизни сегмента (Maximum Segment Life - MSL) - максимальное время ожидания ASK в ответ на SYN-ACK или FIN-ACK (миллисекунд). По RFC 753 оно 120 секунд. Но это писалось в 1979 году и многое поменялось. В современных FreeBSD оно равно 30 секунд. Имеет смысл поставить его меньше. net.inet.icmp.icmplim=100 - Для уменьшения урона от атак, при который генерится много ответных пакетов, можно поставить ограничение на количество ICMP тип 3 (адресат недостижим) и TCP RST (перезагрузка соединения). По дефолту оно стоит 200. Мона поставить меньше. security.bsd.see_other_uids=0 и security.bsd.see_other_gids=0 - Для увеличения безопасности машин, на которые есть шелл у других пользователей, можно сделать так, чтобы каждому пользователю показывались только его процессы, а чужие он невидел. На 4.11 такого пункта нет, в 6.0 есть. Пятую ветку надо проверять. По дефолту значение `1` - все всё видят. Если поставить `0` - то только свои процессы. security.bsd.conservative_signals=0 - Запрет посылать сигналы, от непривелигированных процессов, процессам которые сменили свой uid/gid. security.bsd.unprivileged_proc_debug=0 - Непривелигированные процесы могут использовать средства отладки процессов. security.bsd.unprivileged_read_msgbuf=0 - непривелигированные процессы могут читать буфер сообщений ядра (dmesg). security.bsd.hardlink_check_uid=0 - непривелигированные процессы не могут делать жёсткие ссылки на файлы других пользователей. security.bsd.hardlink_check_gid=0 - непривелигированные процессы не могут делать жёсткие ссылки на файлы других групп. vfs.usermount=0 - возможность непривелигированным пользователям монтировать и отмонтировать устройства (при условии соответсвующих прав на устройство и точку монтирования). net.inet.tcp.log_in_vain=0 и net.inet.udp.log_in_vain=0 - Логгирование всех попыток подключения к портам которые никто не слушает (в M$-сетях, чревато большим потоком логов… Да и в инете тоже..) net.inet.tcp.sack.enable=0 - тюнинг сетевой подсистемы - при большой нагрузке на запрсы отвечатеся селективно.

Ссылки:
https://www.lissyara.su/articles/freebsd/security/sysctl
https://mikanoshi.name/nastrojki-bezopasnosti-freebsd-chast-1
https://alexnettm.com/freebsd/nastrojka-bezopasnosti-v-freebsd.html
https://ruhighload.com/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+freebsd

freebsd/security.txt · Последние изменения: 2020/11/12 19:02 — alex