Тема
Режим
Язык
Тема
Режим
Язык
Регистрация
FREE Бесплатный аудит сайта за 15 мин Заказать →

SYN Flood: анатомия самой распространённой DDoS-атаки

SYN Flood эксплуатирует механизм TCP handshake, заполняя таблицу соединений сервера полуоткрытыми сессиями. Защита: SYN cookies, rate limiting, фильтрация на уровне L4.

Executive Summary для руководителя
💰

Финансовый риск

От 50 000 до 300 000 рублей в час из-за недоступности сайта для клиентов при атаке на прикладном уровне (L7), перерасхода ресурсов CPU/RAM хостинга.

📈

Влияние на KPI

Снижение конверсии заказов. Медленный отклик сайта (TTFB) ухудшает поведенческие факторы и пессимизирует поисковый трафик из Google и Яндекса.

⚠️

Уровень критичности

Высокий

👤

Кому поручить

DevOps-инженер / Бэкенд-разработчик

TL;DR: SYN Flood эксплуатирует механизм TCP handshake, заполняя таблицу соединений сервера полуоткрытыми сессиями. Защита: SYN cookies, rate limiting, фильтрация на уровне L4.

Время чтения: 12 мин | Уровень: Средний


01

Что такое SYN Flood

SYN Flood — это атака на транспортный уровень (L4), которая злоупотребляет процессом установки TCP-соединения. Атакующий отправляет тысячи SYN-пакетов с поддельными IP-адресами, но никогда не завершает handshake.

Почему это работает

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

┌─────────┐                    ┌─────────┐
│  Client │                    │  Server │
└────┬────┘                    └────┬────┘
     │                              │
     │  ──── SYN ──────────────▶   │  1. Клиент инициирует
     │                              │
     │  ◀──── SYN-ACK ─────────    │  2. Сервер выделяет ресурсы
     │                              │     и ждёт ACK
     │  ──── ACK ──────────────▶   │  3. Соединение установлено
     │                              │

Проблема: на шаге 2 сервер выделяет память под соединение и начинает ждать ACK. Если ACK не приходит (а он не придёт, потому что IP поддельный), сервер держит это «полуоткрытое» соединение 75 секунд по умолчанию.

Математика атаки

Сравнение решений

Параметр Популярный Cloudflare DDoS-Guard StormWall Qrator
Размер SYN-пакета ~60 байт
Backlog queue (Linux default) 128 соединений
Таймаут полуоткрытого соединения 75 сек
Пакетов для заполнения очереди 128
Скорость атаки 2 пакета/сек достаточно

* Бесплатный план — базовая поддержка. Полная 24/7 поддержка на Pro+ тарифах.

Вывод: даже атака на 1 Мбит/с может положить незащищённый сервер.


02

Анатомия пакета

┌────────────────────────────────────────────────────────┐
│                    IP Header (20 bytes)                │
├────────────────────────────────────────────────────────┤
│ Source IP: 192.168.x.x (spoofed)                       │
│ Dest IP: victim_server                                 │
│ Protocol: TCP (6)                                      │
├────────────────────────────────────────────────────────┤
│                   TCP Header (20 bytes)                │
├────────────────────────────────────────────────────────┤
│ Source Port: random (1024-65535)                       │
│ Dest Port: 80/443/etc                                  │
│ Sequence: random                                       │
│ Flags: SYN=1, ACK=0, FIN=0, RST=0                      │
│ Window: 65535                                          │
└────────────────────────────────────────────────────────┘

Признаки SYN Flood в логах

# Проверка полуоткрытых соединений
netstat -an | grep SYN_RECV | wc -l

# Если > 100 — подозрительно
# Если > 1000 — точно атака
# tcpdump: ищем SYN без ACK
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0' -c 100

# Много пакетов с разных IP на один порт = атака

03

Уровни защиты

Уровень 1: Настройка ядра Linux

# /etc/sysctl.conf

# Включить SYN cookies (ОБЯЗАТЕЛЬНО)
net.ipv4.tcp_syncookies = 1

# Уменьшить таймаут полуоткрытых соединений
net.ipv4.tcp_synack_retries = 2

# Увеличить backlog queue
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# Включить TCP timestamps (нужно для SYN cookies)
net.ipv4.tcp_timestamps = 1
# Применить
sysctl -p

SYN Cookies — как это работает:

┌─────────────────────────────────────────────────────────┐
│                  Без SYN Cookies                        │
├─────────────────────────────────────────────────────────┤
│  SYN → Сервер создаёт запись в таблице → ждёт ACK      │
│  Память расходуется на каждый SYN                       │
├─────────────────────────────────────────────────────────┤
│                  С SYN Cookies                          │
├─────────────────────────────────────────────────────────┤
│  SYN → Сервер вычисляет криптографический cookie       │
│      → Отправляет SYN-ACK с cookie в sequence number   │
│      → НЕ сохраняет состояние                          │
│  ACK → Сервер проверяет cookie → создаёт соединение    │
│  Память расходуется только на валидные соединения!     │
└─────────────────────────────────────────────────────────┘

Уровень 2: iptables / nftables

# Rate limit новых соединений
iptables -A INPUT -p tcp --syn -m limit --limit 100/s --limit-burst 200 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

# Защита от спуфинга (только если знаете свои сети)
iptables -A INPUT -s 10.0.0.0/8 -j DROP      # RFC 1918
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 192.168.0.0/16 -j DROP

# SYNPROXY (ядро 3.12+)
iptables -t raw -A PREROUTING -p tcp --dport 80 --syn -j CT --notrack
iptables -A INPUT -p tcp --dport 80 -m state --state INVALID,UNTRACKED \
    -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
iptables -A INPUT -p tcp --dport 80 -m state --state INVALID -j DROP

Уровень 3: nginx / HAProxy

nginx.conf:

http {
    # Лимит соединений с одного IP
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    limit_conn conn_limit 100;
    
    # Лимит запросов
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    
    server {
        limit_req zone=req_limit burst=20 nodelay;
        
        # Таймауты для защиты от Slowloris
        client_body_timeout 10s;
        client_header_timeout 10s;
        keepalive_timeout 15s;
        send_timeout 10s;
    }
}

Уровень 4: Облачная защита

Когда локальной защиты недостаточно:

Сравнение решений

Решение Ёмкость Стоимость
Cloudflare Free 10 Гбит/с $0
Cloudflare Pro Unmetered $20/мес
AWS Shield Standard 10 Гбит/с Бесплатно
AWS Shield Advanced 100+ Гбит/с $3000/мес
Dedicated Scrubbing 1+ Тбит/с $5000+/мес

* Бесплатный план — базовая поддержка. Полная 24/7 поддержка на Pro+ тарифах.


04

Схема многоуровневой защиты

                           ┌──────────────────┐
                           │   Атакующий      │
                           │   (Ботнет)       │
                           └────────┬─────────┘
                                    │
                                    │ SYN Flood
                                    │ 10 Гбит/с
                                    ▼
┌─────────────────────────────────────────────────────────────┐
│  УРОВЕНЬ 1: Облачный провайдер (Cloudflare/AWS Shield)      │
│  ├── Anycast: распределение по 300+ точкам                  │
│  ├── Автоматическое распознавание паттернов                 │
│  └── Фильтрация 95% мусора                                  │
└────────────────────────────┬────────────────────────────────┘
                             │ 500 Мбит/с
                             │ (осталось 5%)
                             ▼
┌─────────────────────────────────────────────────────────────┐
│  УРОВЕНЬ 2: Edge / Load Balancer                            │
│  ├── SYNPROXY на HAProxy                                    │
│  ├── Rate limiting по IP                                    │
│  └── Географическая фильтрация                              │
└────────────────────────────┬────────────────────────────────┘
                             │ 50 Мбит/с
                             │ (легитимный + остаток атаки)
                             ▼
┌─────────────────────────────────────────────────────────────┐
│  УРОВЕНЬ 3: Сервер приложений                               │
│  ├── SYN cookies (sysctl)                                   │
│  ├── iptables rate limiting                                 │
│  └── nginx limit_conn                                       │
└────────────────────────────┬────────────────────────────────┘
                             │
                             │ Чистый трафик
                             ▼
┌─────────────────────────────────────────────────────────────┐
│  Приложение работает нормально                              │
└─────────────────────────────────────────────────────────────┘

05

Мониторинг и алерты

Prometheus + Alertmanager

# prometheus/rules/ddos.yml
groups:
  - name: ddos_alerts
    rules:
      - alert: HighSynRecvConnections
        expr: node_netstat_Tcp_CurrEstab > 10000
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "Возможная SYN Flood атака"
          description: "Более 10000 соединений в состоянии ожидания"
      
      - alert: SynFloodAttack
        expr: rate(node_netstat_Tcp_InSegs[1m]) > 100000
        for: 30s
        labels:
          severity: critical
        annotations:
          summary: "SYN Flood атака в процессе"
          description: "Входящий трафик TCP превышает 100k пакетов/сек"

Grafana Dashboard

Ключевые метрики для дашборда:

  • node_netstat_Tcp_CurrEstab — текущие соединения
  • node_netstat_TcpExt_SyncookiesSent — отправленные SYN cookies
  • node_netstat_TcpExt_SyncookiesRecv — полученные ответы на cookies
  • node_netstat_TcpExt_SyncookiesFailed — неудачные проверки (атака)


06

Чек-лист защиты от SYN Flood

Чек-лист готовности

0 / 7

07

Что дальше?

Если вы защитились от SYN Flood, следующий шаг — защита от L7-атак:

Нужна помощь с настройкой? Бесплатный аудит защиты →


  • Последнее обновление: февраль 2026*
08

Практическая экспертиза AntiDDoS.su

📝
Заметка

Практическая экспертиза AntiDDoS.su Этот материал подготовлен инженерами безопасности AntiDDoS.su. Мы специализируемся на отражении распределенных атак любой сложности, аудите безопасности инфраструктуры и настройке отказоустойчивых систем. 🛡️ Важная информация: Если ваш ресурс находится под атакой или нуждается в профессиональном аудите защиты — обратитесь к экспертам AntiDDoS.su для оперативной помощи.


Чек-лист проверки для владельца бизнеса

Скопируйте эти вопросы и отправьте вашему техническому директору (CTO) или руководителю разработки:

  • Настроена ли WAF-фильтрация для отсечения ботов с помощью JS-челленджей без показа капчи реальным пользователям?
  • Защищен ли веб-сервер от атак типа Slowloris путем оптимизации HTTP Keep-Alive таймаутов?
  • Проверено ли наше приложение на защиту от атак типа HTTP Request Smuggling и отравления кэша?

Словарь по теме

Cloudflare Pro

Тарифный план Cloudflare для малого и среднего бизнеса. Включает базовый WAF, защиту от DDoS уровня 3-4, оптимизацию изображений и мобильную оптимизацию.

Load Balancer

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

Rate Limiting

Ограничение количества запросов с одного IP-адреса за определённый период времени. Первая линия защиты от ботов, брутфорса и простых DDoS-атак.

Alertmanager

Компонент Prometheus для обработки алертов — группировка, дедупликация, маршрутизация уведомлений.

Prometheus

Система мониторинга и сбора метрик. Собирает данные с серверов, хранит временные ряды, поддерживает алерты.

Cloudflare

Популярный сервис CDN и защиты от DDoS. Бесплатный план включает базовую защиту, SSL, и ускорение загрузки через глобальную сеть из 300+ дата-центров.

SYN Flood

Атака на сетевом уровне (L4), при которой атакующий отправляет множество SYN-пакетов, не завершая TCP-рукопожатие. Исчерпывает таблицу соединений сервера.

L7 атака

Атака на прикладном уровне (HTTP). Атакующий отправляет валидные HTTP-запросы, которые выглядят как обычные пользователи, но нагружают тяжёлые endpoint'ы.

Получите план защиты под ваш сайт

Оставьте контакт и адрес сайта — пришлём план защиты и список приоритетных шагов.

  • Приоритетные шаги на 7 дней
  • Быстрая обратная связь
  • План в удобном формате
Без спама. Можно указать Telegram (@username) или email.
Написать в Telegram