Файл sysctl (настройка)

Удивительный по возможностям файл...

 

Файл, а вернее утилита 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

 

 

 

Смотрите также:

 

Добавить комментарий


Защитный код
Обновить

Вы здесь: Сайтостроение Сисадмин Файл sysctl (настройка)