Мы — долго запрягаем, быстро ездим, и сильно тормозим.
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


    res, 2007-06-13 в 14:04:38

    По поводу параметров security.bsd.see_other_uids=0 и security.bsd.see_other_gids=0:  
    В FreeBSD версии 5 вместо этих параметров был такой:
    kern.ps_showallprocs=0
    В шестой версии такого параметра уже нет. На четвертой не проверял.

    kmb, 2007-09-07 в 9:06:36

    Желтый цвет очень трудно читается и напрягает глаза...

    lissyara, 2007-09-07 в 9:12:34

    поменял на зелёный.
    и он был не жёлтый. Оранжевый...

    kmb, 2007-09-07 в 11:12:06

    Агу, оранжевый) но смысл понятен)
    Теперь лучше...

    VackuM, 2007-10-19 в 12:37:16

    >net.inet.tcp.msl=15000 - Есть такая феня, как максимальное время жизни сегмента (Maximum Segment Life - MSL) - >максимальное время ожидания ASK в ответ на SYN-ACK или
    Мелочь, замените ASK на ACK

    NarkomanLove, 2008-01-05 в 17:09:36

    еще одна полезная переменая
    sysctl hw.syscons.bell=0
    чтобы выключить встроеный спикер.
    а то писк сильно раздражает.

    lтакойд, 2008-01-05 в 17:21:44

    >По поводу параметров security.bsd.see_other_uids=0 и security.bsd.see_other_gids=0:  
    >В FreeBSD версии 5 вместо этих параметров был такой:
    >kern.ps_showallprocs=0
    >В шестой версии такого параметра уже нет. На четвертой не проверял.
    на четврке тоже такой - kern.ps_showallprocs=0

    shutdown now, 2008-01-08 в 14:21:01

    net.inet.tcp.sack.enable=0 - тюнинг сетевой подсистемы - при большой нагрузке на запрсы отвечатеся селективно.

    <- это ты прогнал
    если 1, то включается TCP Selective Acknowledgements (SACK, RFC 2018) позволяющий увеличить производительность системы в ситуации большой потери пакетов, тут подробно http://info.iet.unipi.it/~luigi/sack.html

    Григорй Ситнин, 2008-04-14 в 10:48:54

    В 7.0-RELEASE вот эти переменные уже стоят так, как рекомендовано:

    net.inet.tcp.recvspace
    net.link.ether.inet.max_age
    net.inet.ip.sourceroute
    net.inet.ip.accept_sourceroute
    net.inet.icmp.bmcastecho
    net.inet.icmp.maskrepl
    security.bsd.hardlink_check_uid
    security.bsd.hardlink_check_gid
    vfs.usermount
    net.inet.tcp.log_in_vain
    net.inet.udp.log_in_vain

    Just in case you want to know =)

    Savage, 2009-10-31 в 22:54:55

    ARP entry lifetime устанавливайте не более 200:
    net.link.ether.inet.max_age=200
    Иначе, в те редкие случаи, когда ваш провайдер проводит замену своего маршрутизатора (вашего шлюза в интернет), в кэше bsd arp-запись с маком старого шлюза может висеть 1200 секунд (20 минут)

    TyLLIKAH, 2010-09-04 в 15:09:16

    net.inet.tcp.nolocaltimewait Не висеть в состоянии timewait для локальных соединений.

    .ignore, 2010-10-06 в 4:09:08

    а где ссылка на форум?
    я б туда кинул линки

    мне показался интиресным сайт есть аналоги команд для помойки и домохозяек
    http://www.foureleven.org/pub/rosetta/

    расписано тут но по чуд чуть и все
    FreeBSD kernel parameters description  
    http://www.lslnet.com/linux/edosc/03/linux-03122438.htm

    китайский рулит но гуугл его переводит так что смысл можно понять
    http://yiikoo.spaces.live.com/
    http://www.chinaunix.net/jh/5/1029881.html

    раздер UNIX (в основном FreeBSD) -> Тюнинг
    http://subnets.ru/wrapper.php?p=32

    Oleg, 2011-04-06 в 9:06:41

    net.inet.tcp.blackhole=2
    при установленном параметре, вход по ssh минут 15, запуск top минут 15, доступ на сервер по smb не возможен и т.д. Ставишь net.inet.tcp.blackhole=0 все работает.

    adre, 2012-05-17 в 18:33:06

    Oleg, а что не устраивает? это описано кое где =)

    Vasya, 2013-12-04 в 7:29:57

    Афтар снова олень

    net.inet.tcp.blackhole=2
    НЕт , не было и не будет
    Есть только net.inet.tcp.blackhole=1

    И вообще пора мозги включать, и прочитать про TCP.

    "При установке в "2", вообще все (а не только SYN) пакеты на закрытый порт отбрасываются без каких-либо действий." - ОНи и так отбрасываюся, Сами СОБОЙ!!!!111111

    alex, 2014-02-08 в 12:08:41

    Vasya, man blackhole "согласен" с автором про значение net.inet.tcp.blackhole=2.

    nap, 2014-04-13 в 11:02:52

    мучают мысли про net.link.ether.inet.max_age=1200.
    Свичи по дефолту запоминают ARP entry до 300 секунд.
    После истечения этого времени свич не будет знать где находится хост и будет слать трафик на этот хост во все порты.
    А этот трафик фря слать будет 100% , т.к. у нее время хранения ARP 1200 секунд (Применительно к реальным IP, серые могут истекать раньше в зависимости от настроек NAT).
    Таким образом получаем шторм из входящего трафика во все порты начиная с корневого свича.
    Уменьшение этого параметра на фре также под вопросом, т.к. часто встречается хост, с которым ведется периодический обмен, но при этом arp показывает меньше 900сек остаток времени хранения arp.

    Alex Keda, 2014-04-13 в 19:32:37

    ARP не этого хоста
    других
    --
    всё нормально будет =)

    Дмитрий, 2016-06-02 в 16:07:57

    Обновление по поводу эффекта переменной "net.inet.tcp.recvspace". Только что решал проблему, связанную с попыткой её использования для ограничения потребляемой для сетевых коннектов памяти. Оказалось, что в системах новее FreeBSD 8 (проверял в 9 и 10) её уменьшение от дефолта убивает пропускную способность локального интерфейса lo0.
    http://forum.lissyara.su/viewtopic.php?f=3&t=44107&p=379337
    https://forums.freebsd.org/threads/56466/



  •  

      Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
      Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.0464 секунд
    Из них PHP: 28%; SQL: 72%; Число SQL-запросов: 77 шт.
    Исходный размер: 41834; Сжатая: 11446