Усиление безопасности ядра 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
Ожидаемый результат: вывод версии, подтверждающий успешную установку.
Выполняйте симуляцию 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-рукопожатия.
В современных дистрибутивах этот параметр обычно включен по умолчанию. Проверить можно командой: 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 атаки
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равно 1SyncookiesSentсчетчик увеличивается во время атаки- сервер остается отзывчивым
- в логах ядра отсутствуют предупреждения:
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