SYN flood и защита: SYN cookies, backlog tuning

5 минут чтения
Средний рейтинг статьи — 4.7

SYN flood — один из классических видов DDoS-атак на уровне TCP. Его цель — перегрузить сервер, вынудив его тратить ресурсы на несуществующие соединения.

Как работает TCP handshake

TCP-соединение начинается с трёхстороннего рукопожатия (three-way handshake):

  1. Клиент отправляет SYN (synchronize)
  2. Сервер отвечает SYN-ACK (synchronize-acknowledge)
  3. Клиент подтверждает 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 — максимальная длина очереди SYN
  • somaxconn — максимальное число ожидающих соединений для 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

В реальных системах чаще всего комбинируют:

  1. Включение SYN cookies:
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
  1. Увеличение очередей:
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
  1. Настройка listen backlog в приложении (например, Nginx или Apache):
listen 80 backlog=1024;
  1. Firewall ограничения для подозрительных IP.

Итог

SYN flood — атака на уровень TCP handshake. Она проста, но эффективна против незащищённых серверов.

Защита строится на трёх китах:

  • SYN cookies — сервер не тратит память на полузавершённые соединения
  • Backlog tuning — очереди для новых соединений больше стандартных, чтобы выдерживать пиковые нагрузки
  • Firewall / Rate limiting — ограничение частоты и фильтрация подозрительного трафика

Комбинируя эти методы, можно сделать TCP-сервер устойчивым к SYN flood без серьёзного ущерба для легитимных пользователей.

5 минут чтения
Средний рейтинг статьи — 4.7

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний