SYN flood и защита: SYN cookies, backlog tuning
SYN flood — один из классических видов DDoS-атак на уровне TCP. Его цель — перегрузить сервер, вынудив его тратить ресурсы на несуществующие соединения.
Как работает TCP handshake
TCP-соединение начинается с трёхстороннего рукопожатия (three-way handshake):
- Клиент отправляет SYN (synchronize)
- Сервер отвечает SYN-ACK (synchronize-acknowledge)
- Клиент подтверждает ACK — соединение установлено
При SYN flood атаке клиент (или ботнет) отправляет много SYN-пакетов, но не завершает handshake. Сервер выделяет ресурсы на каждое полузавершённое соединение, что быстро перегружает память и таблицы TCP.
Симптомы SYN flood
- высокий процент соединений в состоянии SYN_RECV
- медленные ответы от сервера
- превышение max connections
- иногда crash или OOM (Out of Memory)
Методы защиты
1. SYN cookies
SYN cookies — это механизм, при котором сервер не выделяет память сразу, а вычисляет специальное значение для SYN-ACK, основанное на исходных параметрах запроса. Если клиент ответит правильным ACK, соединение создаётся полностью.
Как работает:
- сервер получает SYN
- вычисляет cookie (хэш из IP, порта, ISN и секретного ключа)
- отправляет SYN-ACK с cookie в ISN
- клиент отвечает ACK с этим ISN
- сервер проверяет cookie и создаёт соединение
Плюсы:
- память сервера не расходуется на полузавершённые соединения
- защищает от массовых SYN
Минусы:
- немного сложнее отслеживать state
- не все TCP опции доступны при использовании cookies
2. Backlog tuning
Backlog — это очередь полузавершённых соединений, которые сервер может держать одновременно.
Параметры Linux:
tcp_max_syn_backlog— максимальная длина очереди SYNsomaxconn— максимальное число ожидающих соединений для listen()
Рекомендации:
- увеличить
tcp_max_syn_backlogдля серверов с высоким трафиком - использовать
net.ipv4.tcp_syncookies = 1как дополнительную защиту - настроить баланс между памятью и количеством соединений
3. Firewall / Rate limiting
Дополнительно можно использовать:
- iptables с ограничением SYN-пакетов (
-m limit) или recent module - внешние firewall или cloud WAF (Cloudflare, AWS Shield)
- SYN proxy на балансировщиках
Пример iptables:
iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
Это ограничит количество новых соединений в секунду, предотвращая массовую атаку.
4. Современные методы
- использование TCP Fast Open и новых алгоритмов handshake, которые минимизируют ресурсные затраты на полузавершённые соединения
- IDS/IPS, которые детектируют аномальные SYN потоки
- использование Anycast и распределение нагрузки, чтобы атака приходилась на несколько дата-центров
Практика на Linux
В реальных системах чаще всего комбинируют:
- Включение SYN cookies:
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
- Увеличение очередей:
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
- Настройка listen backlog в приложении (например, Nginx или Apache):
listen 80 backlog=1024;
- Firewall ограничения для подозрительных IP.
Итог
SYN flood — атака на уровень TCP handshake. Она проста, но эффективна против незащищённых серверов.
Защита строится на трёх китах:
- SYN cookies — сервер не тратит память на полузавершённые соединения
- Backlog tuning — очереди для новых соединений больше стандартных, чтобы выдерживать пиковые нагрузки
- Firewall / Rate limiting — ограничение частоты и фильтрация подозрительного трафика
Комбинируя эти методы, можно сделать TCP-сервер устойчивым к SYN flood без серьёзного ущерба для легитимных пользователей.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний