Файл sysctl (настройка)
- Подробности
- Категория: Сисадмин
- Просмотров: 223
Удивительный по возможностям файл...
Файл, а вернее утилита sysctl (настройка) - если тонко нужно настроить процессы и память в Unix системах, а также маршрутизацию, то это сюда. Это главная настройка всей системы! Поэтому любое неверное движение и система в ауте, но именно тонко настроить без подстроек потом в iptables можно именно тут.
Расположение: /etc/sysctl.conf
Перед манипуляциями рекомендуется сперва копировать файл:
cp /etc/sysctl.conf /etc/sysctl.conf.back
Смотрим все параметры (их много):
sysctl -a
!!! Загрузка файла происходит во время загрузки системы, но, если поменять параметры и их значения и чтобы они сразу вступили в силу, нужно выполнить команду
sysctl -p
Увеличение производительности Apache и улучшение безопасности системы
Умельцы из интернета рекомендуют данные параметры (это только для информации, внизу будет описание, но!!! некоторые параметры в 2023 году я даже не нашел):
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_max_orphans = 65536
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_mem = 50576 64768 98152
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_orphan_retries = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.netfilter.ip_conntrack_max = 16777216
net.netfilter.nf_conntrack_max = 16777216
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_congestion_control = htcp
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.ip_forward = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 1000
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
fs.inotify.max_user_watches = 16777216
Разберем более подробно:
1. Для того, чтобы плохие люди не использовали Icmp перенаправления с целью изменения таблиц маршрутизации, следующие параметры рекомендуют выставить в ноль / у hestia второй параметр 1 , а вот в чистой Ubuntu 22 стоит 0 (1 нужна только для хостов, которые используются в качестве маршрутизации)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
2. Максимальное количество tcp-сокетов. При достижении данного значения, осиротевшие (orphans) соединения сбрасываются с выдачей предупреждения. Не стоит уменьшать, имеет небольшое значение для dos атак.
net.ipv4.tcp_max_orphans = 65536
3. Время сохранения сокета в состоянии FIN-WAIT-2. Клиент может не закрыть соединение никогда, поэтому мы закрываем самостоятельно по этому таймауту, чтобы не подвергать себя риску - расходование памяти на такие полумертвые соединения. FIN-WAIT-2 менее опасны чем FIN-WAIT-1, так как занимают не более 1,5 кбайта но могут жить дольше.
net.ipv4.tcp_fin_timeout = 10
3. Время сохранения сокета в состоянии FIN-WAIT-2. Клиент может не закрыть соединение никогда, поэтому мы закрываем самостоятельно по этому таймауту, чтобы не подвергать себя риску - расходование памяти на такие полумертвые соединения. FIN-WAIT-2 менее опасны чем FIN-WAIT-1, но могут жить дольше.
net.ipv4.tcp_fin_timeout = 10
4. Следующий ряд параметров:
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
- tcp_keepalive_time - время, в течение которого будет проверяться соединение, если оно не используется (имеет смысл только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE)
- tcp_keepalive_intvl определяет интервал передачи проб.
- Произведение tcp_keepalive_probes * tcp_keepalive_intvl показывает время, по истечении которого соединение будет разорвано при отсутствии откликов. По умолчанию установлен интервал 75 секунд
4. Максимальное количество запросов на соединение, на которое клиент не отправил подтверждение / у hestia 1024:
net.ipv4.tcp_max_syn_backlog = 4096
5. Величина потребления памяти (минимум, режим нагрузки, максимум):
net.ipv4.tcp_mem = 50576 64768 98152
На одном сервере я видел такие величины, так что тупо не применяйте
net.ipv4.tcp_mem = 142122 189497 284244
6. Размер приемного буфера сокетов TCP (минимум, режим нагрузки, максимум):
net.ipv4.tcp_rmem = 4096 87380 16777216
На одном сервере я видел такие величины, так что тупо не применяйте
net.ipv4.tcp_rmem = 4096 131072 6291456
7. Минимальное, принятое по умолчанию и максимальное количество памяти, резервируемой для буферов передачи сокета TCP. Векторное значение (минимум, режим нагрузки, максимум):
net.ipv4.tcp_wmem = 4096 65536 16777216
На одном сервере я видел такие величины, так что тупо не применяйте / в данном случае у меня значения 2 и 3 меньше было
net.ipv4.tcp_wmem = 4096 16384 4194304
на самом деле на моем серваке стояло по умолчанию 2 и 3 значение, 3 значение это 4мегабайта.
min: Объем памяти, зарезервированный для буферов отправки для TCP-сокетов.
Каждый TCP-сокет имеет права на его использование в силу факта его рождения.
По умолчанию: 4K
по умолчанию: начальный размер буфера отправки, используемого TCP-сокетами. Это
значение переопределяет net.core.wmem_default, используемый другими протоколами.
Обычно он ниже, чем net.core.wmem_default.
По умолчанию: 16K
max: Максимальный объем памяти, разрешенный для автоматически настроенных
буферов отправки для TCP-сокетов. Это значение не переопределяет
net.core.wmem_max. Вызов setsockopt() с SO_SNDBUF отключает
автоматическая настройка размера буфера отправки этого сокета, в этом случае
это значение игнорируется.
По умолчанию: от 64 КБ до 4 МБ, в зависимости от размера оперативной памяти.
8. Число неудачных попыток, после которого закрывается TCP соединение. По умолчанию в Ubuntu 22 уже стоит 0 и это оптимальное значение, так как таких соединений может быть множество и они могут перегружать систему:
net.ipv4.tcp_orphan_retries = 0
9. tcp_syncookies - INTEGER:
net.ipv4.tcp_syncookies = 0
На одном сервере я видел такие величины, так что тупо не применяйте (и на Ubuntu 22 также по дефолту)
net.ipv4.tcp_syncookies = 1
Допустимо только тогда, когда ядро было скомпилировано с помощью CONFIG_SYN_COOKIES
Отправляйте файлы синхронизации, когда очередь невыполненной работы syn сокета
переполняется. Это делается для предотвращения обычной "атаки SYN flood"
Значение по умолчанию: 1
Обратите внимание, что syncookies является резервным средством.
Он НЕ ДОЛЖЕН использоваться для того, чтобы помочь высоконагруженным серверам
противостоять законной скорости соединения. Если вы видите предупреждения о потоке SYN
в своих журналах, но расследование показывает, что они возникают
из-за перегрузки легальными подключениями, вам следует настроить
другие параметры, пока это предупреждение не исчезнет.
Смотрите: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.
syncookies серьезно нарушают протокол TCP, не позволяют
использовать расширения TCP, могут привести к серьезной деградации
некоторых сервисов (например, ретрансляция SMTP), видимых не вами,
а вашими клиентами и ретрансляторами, связывающимися с вами. Пока ты видишь
Предупреждения о затоплении SYN в журналах на самом деле не затоплены, ваш сервер
серьезно неправильно настроен.
Если вы хотите проверить, какие эффекты syncookies оказывают на ваши
сетевые подключения, вы можете установить этот регулятор в положение 2, чтобы включить
безусловную генерацию syncookies.
10. net.ipv4.netfilter.ip_conntrack_max - Максимальное количество соединений для работы механизма connection tracking. В 2023 году я такой настройки вообще не нашел!!!
net.ipv4.netfilter.ip_conntrack_max = 16777216
11. tcp_timestamps - Разрешает временные метки протокола TCP. При их наличии возможно управлять работой протокола в условиях серьезных нагрузок (см. tcp_congestion_control).
net.ipv4.tcp_timestamps = 1
Включите временные метки, как определено в RFC1323.
0: Отключен.
1: Включите временные метки, как определено в RFC1323, и используйте случайное смещение для
каждого соединения, а не только для текущего времени.
2: Как 1, но без случайных смещений.
Значение по умолчанию: 1
12. net.ipv4.tcp_sack.
net.ipv4.tcp_sack = 1
Разрешить выборочные подтверждения протокола TCP. Может быть необходима для эффективного использования всей доступной пропускной способности некоторых сетей.
13. net.ipv4.tcp_congestion_control - Протокол, используемый для управления перегрузкой в сетях TCP. Протоколы bic и cubic реализации, используемые по умолчанию, считается, что они содержат баги в большинстве версий ядра RedHat и ее клонов. Рекомендуется использовать htcp.
net.ipv4.tcp_congestion_control = htcp
Разрешить выборочные подтверждения протокола TCP. Может быть необходима для эффективного использования всей доступной пропускной способности некоторых сетей.
14. По умолчанию TCP сохраняет различные показатели соединения в кэше маршрутов
при закрытии соединения, так что соединения, установленные в ближайшем будущем, могут использовать их для задания начальных условий. Обычно это повышает общую производительность, но иногда может привести
к снижению производительности. Если задано, TCP не будет кэшировать показатели при закрытии соединений..
net.ipv4.tcp_no_metrics_save = 1
15. Защита от спуфинга.
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
0 - Проверка источника отсутствует.
1 - Строгий режим, как определено в RFC3704 Строгий обратный путь
Каждый входящий пакет проверяется на соответствие FIB, и если интерфейс
это не лучший обратный путь, проверка пакета завершится неудачей.
По умолчанию сбойные пакеты отбрасываются.
2 - Свободный режим, как определено в RFC3704 Свободный обратный путь
Исходный адрес каждого входящего пакета также проверяется на соответствие FIB
и если исходный адрес недоступен через какой-либо интерфейс
проверка пакета завершится неудачей.
Текущая рекомендуемая практика в RFC3704 заключается в включении строгого режима
чтобы предотвратить подмену IP-адресов при DDoS-атаках. Если используется асимметричная маршрутизация
или другая сложная маршрутизация, рекомендуется использовать свободный режим.
Максимальное значение из conf/{all,interface}/rp_filter используется при выполнении проверки источника в {interface}.
Значение по умолчанию равно 0. Обратите внимание, что некоторые дистрибутивы включают это
в сценариях запуска.
По умолчанию в Ubuntu 22 стоит цифра 2 !!!
16. Запрет маршрутизации от источника.
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
17. net.ipv4.ip_local_port_range - диапазон локальных портов, доступных для установки исходящих подключений.
net.ipv4.ip_local_port_range = 1024 65535
Определяет диапазон локальных портов, который используется TCP и UDP для
выбора локального порта. Первое число - это первое,
второе - последний номер локального порта.
Если возможно, лучше, чтобы эти числа имели разную четность
(одно четное и одно нечетное значение).
18. net.ipv4.tcp_tw_reuse - Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным.
net.ipv4.ip_local_port_range = 1024 65535
Включите повторное использование сокетов с TIME-WAIT ожиданием для новых подключений, когда это
безопасно с точки зрения протокола.
0 - отключить
1 - глобальное включение
2 - включить только для циклического трафика
Его не следует изменять без консультации/запроса технических
экспертов.
Значение по умолчанию: 2
19. net.ipv4.tcp_window_scaling - Разрешаем динамическое изменение размера окна TCP стека.
net.ipv4.tcp_window_scaling = 1
Включить масштабирование окна, как определено в RFC1323.
20. net.ipv4.tcp_rfc1337 - Защита от TIME_WAIT атак - а вот это интересная штука
net.ipv4.tcp_rfc1337 = 1
Если задано, стек TCP ведет себя в соответствии с RFC1337. Если значение не задано,
мы не соответствуем RFC, но предотвращаем
прерывание TCP TIME_WAIT.
Значение по умолчанию: 0
.
21. net.ipv4.ip_forward - Запрет переадресации пакетов, так как мы не роутер
net.ipv4.ip_forward = 0
22. net.ipv4.icmp_echo_ignore_broadcasts - Не отвечаем на ICMP ECHO запросы, переданные широковещательными пакетами / так обычно хакеры ищут сервера и компы, а зачем нам участвовать в их схемах
net.ipv4.icmp_echo_ignore_broadcasts = 1
23. net.ipv4.icmp_echo_ignore_all - можно вообще отключить пингование по ICMP
net.ipv4.icmp_echo_ignore_all = 1
23. net.ipv4.icmp_ignore_bogus_error_responses - не отвечаем на ошибочно сформированные сообщения / по-умолчанию в Ubuntu 22 кстати тоже 1, так что многие моменты можно просто сверять и все, а править только единичные параметры
net.ipv4.icmp_ignore_bogus_error_responses = 1
24. net.core.somaxconn - Максимальное число открытых сокетов, ждущих соединения. Рекомендуют в интернете: имеет смысл увеличить значение по умолчанию.
net.core.somaxconn = 65535
Ограничение отставания socket listen(), известного в пользовательском пространстве как SOMAXCONN.
Значение по умолчанию равно 4096. (Было 128 до linux-5.4)
Смотрите также tcp_max_syn_backlog для дополнительной настройки TCP-сокетов.
25. net.core.netdev_max_backlog - Параметр определяет максимальное количество пакетов в очереди на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать.
net.core.netdev_max_backlog = 1000
по-умолчанию тоже 1000 в Ubuntu 22
Смотрите также: