EUR
european

EUR

usa

USD

Russian Ru
Ex. VAT Ex. VAT 0%

Усиление безопасности ядра Linux через sysctl.conf. Защита от SYN-flood атак и настройка TCP

Введение

В этом руководстве вы научитесь повышать безопасность ядра Linux с помощью sysctl.conf, защитите сервер от SYN-flood атак и оптимизируете работу TCP-стека. Настройка параметров ядра повышает устойчивость системы к сетевым атакам типа отказа в обслуживании (DoS) и улучшает общую производительность TCP. Вы также выполните симуляцию SYN-flood атаки в контролируемой среде и убедитесь, что механизмы защиты работают корректно.

Предварительные требования

Целевая аудитория: системные администраторы среднего уровня
Оценочное время выполнения: 45–60 минут

Требования к системе

  • Операционная система: Ubuntu 24.04 LTS (протестировано); Совместимо с Debian 12/13 и другими современными Linux-дистрибутивами
  • Версия ядра: 5.x или новее
  • Минимум 1 ГБ RAM
  • Права root или sudo
  • Сетевой доступ между тестовыми машинами

Необходимые инструменты

Установите следующие утилиты:

sudo apt update

sudo apt install -y hping3 net-tools procps iproute2

Проверьте установку: hping3 --version
Ожидаемый результат: вывод версии, подтверждающий успешную установку.

Tip

Выполняйте симуляцию SYN-flood только в лабораторной среде. Никогда не тестируйте системы, которыми вы не владеете или не имеете разрешения на тестирование.

Шаг 1: Создание резервной копии текущей конфигурации sysctl

Перед внесением изменений создайте резервную копию.

sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup

Результат: создан файл резервной копии /etc/sysctl.conf.backup.

Шаг 2: Настройка параметров ядра для защиты от SYN-flood

Откройте конфигурационный файл:

sudo nano /etc/sysctl.conf

Добавьте или измените следующие параметры.

Включение SYN Cookies

net.ipv4.tcp_syncookies = 1

Назначение: включает SYN cookies при переполнении очереди SYN backlog.
Значения:

  • 0 – отключено
  • 1 – включается при переполнении SYN backlog (рекомендуется)
  • 2 – всегда включено (используется редко)

Почему: SYN cookies предотвращают исчерпание памяти, откладывая выделение ресурсов до завершения TCP-рукопожатия.

Tip

В современных дистрибутивах этот параметр обычно включен по умолчанию. Проверить можно командой: sysctl -a | grep net.ipv4.tcp_syncookies

Увеличение очереди SYN Backlog

net.ipv4.tcp_max_syn_backlog = 4096

Назначение: максимальное количество запросов на соединение, ожидающих подтверждения.
Почему: увеличенная очередь позволяет обрабатывать больше полуоткрытых соединений до того, как ядро начнет их отбрасывать.

Уменьшение числа повторных отправок SYN-ACK

net.ipv4.tcp_synack_retries = 3

Назначение: количество повторных отправок SYN-ACK пакетов.
Почему: уменьшение этого значения сокращает время ожидания на вредоносные полуоткрытые соединения.

Повторное использование сокетов TIME-WAIT

net.ipv4.tcp_tw_reuse = 1

Назначение: разрешает повторное использование сокетов в состоянии TIME-WAIT для новых исходящих соединений.
Значения:

  • 0 – отключено
  • 1 – включено

Почему: снижает вероятность исчерпания сокетов при высокой нагрузке.

Уменьшение FIN Timeout

net.ipv4.tcp_fin_timeout = 15

Назначение: время, в течение которого сокет остается в состоянии FIN-WAIT-2.
Почему: уменьшает потребление ресурсов из-за устаревших соединений.

Включение Reverse Path Filtering

net.ipv4.conf.all.rp_filter = 1

Назначение: проверяет соответствие исходного IP-адреса таблице маршрутизации.
Значения:

  • 0 – отключено
  • 1 – строгий режим
  • 2 – мягкий режим

Почему: помогает снизить риск атак с подменой IP-адреса (IP spoofing).

Увеличение максимального количества открытых файлов

fs.file-max = 2097152

Назначение: максимальное количество файловых дескрипторов в системе.
Почему: предотвращает исчерпание файловых дескрипторов при высокой сетевой нагрузке.

Шаг 3: Применение изменений sysctl

Примените изменения без перезагрузки системы:

sudo sysctl -p

Ожидаемый результат: каждый параметр выводится с новым значением.
Проверка конкретного параметра: sysctl net.ipv4.tcp_syncookies
Ожидаемый результат: net.ipv4.tcp_syncookies = 1

Результат: параметры ядра активированы.

Шаг 4: Симуляция SYN-flood атаки

Info

WARNING: выполняйте только в лабораторной среде.

С отдельной тестовой машины выполните:

sudo hping3 -S --flood -V <YOUR_SERVER_IP> -p 80

Объяснение:

  • -S отправляет SYN-пакеты
  • --flood отправляет пакеты максимально быстро
  • -p 80 указывает HTTP-порт как цель

Результат: на сервер отправляется большой поток SYN-пакетов.

Шаг 5: Мониторинг сервера во время атаки

На целевом сервере отслеживайте соединения:

netstat -ant | grep SYN_RECV | wc -l

Результат: отображает количество полуоткрытых соединений.

Проверьте счетчик SYN cookies:

nstat -az | grep Syncookies

Вы должны увидеть увеличение счетчиков, например TcpExtSyncookiesSent. Это подтверждает, что используются SYN cookies.

Шаг 6: Сравнение поведения до и после усиления безопасности

Если тестировать без hardening-настроек:

  • количество SYN_RECV быстро растет
  • сервер может перестать отвечать
  • очередь соединений переполняется

После применения настроек:

  • активируются SYN cookies
  • меньше соединений отбрасывается
  • сервер продолжает стабильно отвечать

Установите веб-сервер на целевой машине:

sudo apt install nginx

Проверка доступности:

curl http://localhost

Результат: сервер отвечает даже во время симулированной атаки.

Шаг 7: Тюнинг производительности TCP (дополнительная оптимизация)

Добавьте дополнительные параметры в конфигурацию sysctl. Запустите nano /etc/sysctl.conf и добавьте:

net.core.somaxconn = 8192

net.core.netdev_max_backlog = 5000

net.ipv4.tcp_max_tw_buckets = 2000000

Объяснение:

  • net.core.somaxconn – максимальная длина очереди listen для приложений.
  • net.core.netdev_max_backlog – максимальное количество пакетов во входящей очереди до обработки стеком сети.
  • net.ipv4.tcp_max_tw_buckets – максимальное количество сокетов TIME-WAIT. Параметр актуален для серверов с высокой нагрузкой и достаточным объемом RAM.

Эти настройки повышают производительность при высокой сетевой нагрузке.

Примените изменения:

sudo sysctl -p

Контрольный список проверки

  • sysctl -p выполняется без ошибок
  • tcp_syncookies равно 1
  • SyncookiesSent счетчик увеличивается во время атаки
  • сервер остается отзывчивым
  • в логах ядра отсутствуют предупреждения: dmesg | grep -i syn

Возврат к исходной конфигурации

Восстановите исходную конфигурацию:

sudo cp /etc/sysctl.conf.backup /etc/sysctl.conf

sudo sysctl -p

Результат: система возвращается к исходным параметрам ядра.

При необходимости удалите тестовые утилиты:

sudo apt remove hping3 -y

Устранение неполадок

Счетчик Syncookies не увеличивается

Проверьте: sysctl net.ipv4.tcp_syncookies
Если значение равно 0, повторно примените конфигурацию.

Сервер по-прежнему теряет соединения

Увеличьте backlog: net.ipv4.tcp_max_syn_backlog = 8192
Затем примените изменения:

sudo sysctl -p

Заключение

Вы усилили безопасность ядра Linux с помощью sysctl.conf, включили механизмы защиты от SYN-flood атак, оптимизировали работу TCP-стека и проверили эффективность настроек через контролируемую симуляцию атаки. Эти изменения повышают устойчивость системы к SYN-flood атакам и увеличивают общую стабильность сетевой работы.

Следующие шаги

  • Добавить ограничение скорости соединений на уровне firewall (iptables или nftables)
  • Настроить лимиты connection tracking
  • Развернуть системы обнаружения вторжений (IDS)
  • Мониторить метрики через Prometheus и Grafana

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA