Полазил по просторам инета и решил свести все в кучу о том какие переменные и за что отвечают, которые можно посмотреть/изменить в sysctl.

Это далеко на полный список и он будет дополняться. Так же, я постараюсь где-то по ключам давать комментарии.

security.bsd.* – управление моделью безопасности

  • security.bsd.see_other_uids, security.bsd.see_other_gids – если 1, то пользователи (группы) могут видеть чужие процессы, сокеты и т.д. через ps, netstat, procfs;
  • security.bsd.conservative_signals – если 1, то некоторые сигналы запрещается посылать setuid/setgid процессам;
  • security.bsd.unprivileged_proc_debug – если 1, то пользовательский процесс можно отлаживать через ptrace, procfs, ktrace и т.д..
  • security.bsd.unprivileged_read_msgbuf – если 1, то пользовательский процесс может читать из системного консольного буфера сообщений;
  • security.bsd.hardlink_check_uid, security.bsd.hardlink_check_gid – если 1, то пользователи могут делать hardlink только на собственные файлы;
  • security.bsd.unprivileged_get_quota – если 1, пользователи могут просматривать информацию по установленным для них квотам.
  • vfs.usermount – если 1, то непривилегированный пользователь может монтировать и размонтировать FS, если для устройства выставлены “rw” права и пользователь является владельцем точки монтирования;

security.jail.* – ограничения для jail

  • security.jail.set_hostname_allowed – если 1, то внутри jail можно поменять имя хоста;
  • security.jail.socket_unixiproute_only – если 1 , то сокет в jail можно создать только для доменов PF_LOCAL, PF_INET или PF_ROUTE, иначе, возвращается ошибка;
  • security.jail.sysvipc_allowed – если 1, то то в jail можно получить доступ к глобальному System V IPC;
  • security.jail.getfsstatroot_only – если 1, то в jail можно получить информацию (df)только о той файловой системе на которой создан jail;
  • security.jail.allow_raw_sockets – если 1, то в jail можно создавать raw sockets;
  • security.jail.chflags_allow – если 1, то процессы в jail могут модифицировать флаги ФС.

IPFW

  • net.link.ether.bridge_ipfw – если 1 и ядро собрано с опциями IPFIREWALL и BRIDGE, то позволяет использовать ipfw для трафика внутри бриджа;
  • net.link.ether.ipfw – если 1, то ipfw2 позволяет фильтровать по MAC адресам;
  • net.inet.ip.fw.autoinc_step – задается число на которое увеличивается счетчик при добавления нового ipfw правила, когда явно не указан его номер;
  • net.inet.ip.fw.debug – если 1, то в логи помещается дополнительная отладочная информация по работе ipfw;
  • net.inet.ip.fw.verbose – если 0, то не отображать работу “log” правил в syslog;
  • net.inet.ip.fw.one_pass – если 1, то просмотр правил ipfw прекращается сразу после подпадание под queue или pipe правило. Если 0, то продолжается обработка далее идущих правил;

ICMP, соединение.

  • net.inet.icmp.icmplim – задается максимальное число ICMP “Unreachable” и TCP RST пакетов, которое может быть отправлено в секунду, net.inet.icmp.icmplim_output=0 позволяет не отражать в логах факты превышения лимита;
  • net.inet.tcp.icmp_may_rst, если 1, то TCP соединения со статусом SYN_SENT, могут быть оборваны посредством сообщения “ICMP unreachable”;
  • net.inet.ip.redirect – если 0, то нет реакции на ICMP REDIRECT пакеты;
  • net.inet.icmp.log_redirect – если 1, то все ICMP REDIRECT пакеты отражаются в логе;
  • net.inet.icmp.drop_redirect – если 1, то ICMP REDIRECT пакеты игнорируются;
  • net.inet.tcp.icmp_may_rst – если 1, то игнорируются ICMP сообщения от блокировки пакета по пути;
  • net.inet.icmp.bmcastecho – для защиты от SMURF атак (ICMP echo request на broadcast адрес) нудно поставить 0;

Тюнинг сетевой подсистемы, борьба с DoS атаками

  • net.inet.tcp.log_in_vain, net.inet.udp.log_in_vain – если 1, отражаем в логе попытки соединения к портам, для которых нет активных сервисов;
  • net.inet.tcp.blackhole – если 1, то SYN пакеты пришедшие на порты для которых нет активных сервисов, остаются без RST ответа, если 2, то на любые пакеты нет ответа (затрудняет сканирования портов);
  • kern.ipc.nmbclusters – если по “netstat -m” mbufs в “peak” приближается к “max”, то число сетевых буферов нужно увеличить (kern.ipc.nmbclusters=N в /boot/locader.conf);
  • net.inet.ip.forwarding – если 1, то машина может форвадить пакеты между интерфейсами;
  • net.inet.tcp.sack.enable – если 1, то включен TCP Selective Acknowledgements (SACK, RFC 2018) позволяющий увеличить производительность системы в ситуации большой потери пакетов;
  • net.link.ether.inet.max_age – время жизни записи в IP route кэше, рекомендуется уменьшить для ослабления эффекта от DoS атак через ARP флуд;

Оборудование и системная информация

  • dev.cpu.0.freq_levels – выдает список поддерживаемых частот, на которые можно переключить CPU, путем указание нужной частоты через dev.cpu.0.freq;
  • hw.snd.maxautovchans, hw.snd.pcm0.vchans – задается число виртуальных звуковых каналов, для каждого из которых может быть отдельный источник звука (на выходе они будут смикшированы);
  • kern.boottime – время последней загрузки системы;
  • kern.disks – список дисков в системе;
  • kern.geom.debugflags, для работы boot0cfg и подобных утилит нужно установить в 16;

Изменение и тюнинг системных ограничений

  • kern.coredump – если 0, то при крахе приложения не будут создаваться core файлы, формат имени и путь для которых задается через kern.corefile (например: /tmp/%U.%N.core). kern.sugid_coredump=0 позволяет запретить генерацию core suid/sgid процессами;
  • kern.maxfiles – максимально допустимое число открытых файлов (файловых дескрипторов), текущее число открытых файлов можно посмотреть через kern.openfiles;
  • kern.maxprocperuid – максимально допустимое число процессов, которое может быть запущено из-под одного пользователя;
  • kern.maxvnodes – максимальное число vnode для кеширования дисковых операций, текущее значение можно посмотреть через vfs.numvnodes или debug.numvnodes/debug.freevnodes;

SMP (FreeBSD 5)

  • kern.smp.maxcpus (machdep.smp_cpus) – максимальное число процессоров, поддерживаемое текущей сборкой ядра;
  • kern.smp.active, kern.smp.disabled – число активных и выключенных CPU;
  • kern.smp.cpus (machdep.smp_active) – сколько CPU в online;
  • kern.smp.forward_signal_enabled – включить возможность мгновенной пересылки сигнала для процессов выполняемых в данный момент времени на разных CPU;
  • kern.smp.forward_roundrobin_enabled

ARP

  • net.link.ether.inet.log_arp_movements – отражать в логе все широковещательные ARP пакеты с хостов MAC адрес которых отсутствует в локальном ARP кэше;
  • net.link.ether.inet.log_arp_wrong_iface – отражать в логе все ARP пакеты пришедшие с неправильного интерфейса;

Информация о ядре (только для чтения):

  • kern.ostype – тип ОС, всегда FreeBSD.
  • kern.osrelease – версия, например 6.1-RELEASE.
  • kern.osreldate – дата выхода данной версии.
  • kern.osrevision – время ревизии ОС.
  • kern.version – тип ОС, ее версия и время последней сборки.
  • kern.posix1version – с какой версией POSIX.1 совместима ОС.
  • kern.ident – идентификатор ядра; строка, указанная в конфиге ядра после директивы ident.
  • kern.boottime – время последней загрузки ядра. Инициализация ядра (могут быть изменены через /boot/loader.conf):
  • kern.bootfile – путь до ядра (директива bootfile).
  • kern.module_path – путь до каталога с модулями (директива module_path).
  • kern.init_path – путь до программы init (директива init_path).

Сетевое имя:

  • kern.hostname – сетевое DNS-имя машины.
  • kern.domainname – домен службы NIS.

Ограничения:

  • kern.maxproc – максимально допустимое число процессов.
  • kern.maxfiles – максимально допустимое число открытых файлов.
  • kern.maxfilesperproc – максимальное число открытых файлов на каждый процесс.
  • kern.maxusers – максимально допустимое число зарегистрированных пользователей в системе.

Другое:

  • kern.disks – список доступных жестких дисков (ro).
  • kern.malloc – список буферов, динамически выделяемых ядром для собственных нужд, и их размер.
  • kern.coredump – включить/выключить создание core-файлов при крахе программы. На домашней машине лучше указать 0.
  • kern.corefile – место, куда складывать core-файлы. По умолчанию core-файлы попадают в текущий каталог. Возможным решением будет строка «/tmp/%U.%N.core».
  • kern.sched.name – используемый планировщик процессов (ro).
  • kern.sched.quantum – квант времени в микросекундах, выделяемый на каждый процесс. Для лучшей отзывчивости программ значение можно поднять до 250000. На серверах рекомендуется оставить значение по умолчанию (100000).
  • kern.sched.preemption – при необходимости позволить ядру вытеснять работающий процесс. Повысит отзывчивость системы.

SMP:

  • kern.smp.maxcpus – максимальное число процессоров, поддерживаемых ядром. Задается при сборке ядра.
  • kern.smp.active – число активных процессоров (найденных ядром и готовых к выполнению задачи).
  • kern.smp.disabled – число отключенных процессоров.
  • kern.smp.cpus – число задействованных в данный момент процессоров.

Увеличение производительности сетевой подсистемы:

  • net.inet.ip.portrange.first=1024
  • net.inet.ip.portrange.last=48000 – увеличиваем диапазон портов, доступных программам. Стоит изменять только на нагруженных серверах, использующих много исходящих подключений, таких как веб-прокси и ftp.
  • kern.polling.enable=1 – включаем device polling. Осуществляется самостоятельный опрос устройств вместо генерирования прерываний устройством, что позволяет значительно увеличить производительность при больших нагрузках на сетевую карту. Ядро должно быть собрано с опциями «options DEVICE_POLLING» и «options HZ=1000».
  • kern.ipc.somaxconn=2048 – увеличиваем очередь входящих подключений со 128 до 2048, что помогает нагруженному серверу принять больше подключений, а также затрудняет SYN-флуд.

Защита от сетевых атак:

  • net.inet.tcp.blackhole=1
  • net.inet.udp.blackhole=1 – превращаем машину в черную дыру. Ядро не будет отправлять RST-пакет в ответ на обращение к незанятым портам. Сканеры портов не любят этого.
  • net.inet.icmp.drop_redirect=1
  • net.inet.ip.redirect=0 – запрещаем ICMP-сообщения, приводящие к изменению таблицы маршрутизации (тип 5: IP Redirect). Удивительно, но FreeBSD даже в 2007 году разрешает такие сообщения по умолчанию.
  • net.inet.ip.forwarding=0 – отключаем перенаправление пакетов с одного сетевого интерфейса на другой.

Производительность samba и squid можно увеличить, изменив значение переменной net.inet.tcp.delayed_ack на 0 и запретив таким образом отправку ответных ACK-сообщений вместе с данными. В случае интерактивных протоколов, таких как POP, IMAP, SMTP, SSH и FTP, это изменение приведет к заполнению сети лишними пакетами, содержащими лишь ACK-сообщения, и снижению производительности.

Управление питанием.
Вопрос: «Как отключить кнопку «power»?»
Ответ: «hw.acpi.power_button_state=NONE»
Вопрос: «Как отключить кнопку «sleep» на клавиатуре?».
Ответ: «hw.acpi.sleep_button_state=NONE» (Также можно не отключать клавишу совсем, а просто изменить ее поведение, назначив ей любое из доступных состояний ACPI, перечисленных в переменной hw.acpi.supported_sleep_state. При этом S1 – самый низкий уровень энергосбережения (сон), а S5 – самый высокий (выключение)).