|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> Security
—> sysctl
Некоторые опции 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 - тюнинг сетевой подсистемы - при большой нагрузке на запрсы отвечатеся селективно.
======================
Статья недописана, но по просьбам трудящихся опубликована. Убедительная просьба, до применения чего-либо описанного прочитать примечание к переменной, подумать над дефолтовым значением, и уже после этого что-то менять. Примерно так:
sysctl -a kern.maxprocperuid
kern.maxprocperuid: 3680
sysctl -d kern.maxprocperuid
kern.maxprocperuid: Maximum processes allowed per userid
sysctl kern.maxprocperuid=10000
kern.maxprocperuid: 3680 -> 10000
|
размещено: 2006-02-21,
последнее обновление: 2007-09-07,
автор: lissyara
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
|
Статистика сайта
|
Сейчас на сайте находится: 38 чел.
|
За последние 30 мин было: 220 человек
|
За сегодня было 2962 показов, 741 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [19 шт.]