Перейти к основному содержимому
Вернуться в категорию

DDoS-атаки Layer 4 и Layer 7: обнаружение и защита

Полное руководство по обнаружению, анализу и защите от TCP/UDP flood, SYN flood, HTTP flood, slowloris и amplification атак.

Время чтения: 16 мин Защита от DDoS и безопасность
ddoslayer4layer7syn-floodhttp-floodslowlorisamplification

Содержание

DDoS-атаки Layer 4 и Layer 7: обнаружение и защита

DDoS-атаки (Distributed Denial of Service) направлены на вывод вашего сервера или сети из строя путём перегрузки чрезмерным трафиком. Эти атаки происходят на разных уровнях модели OSI. В этом руководстве рассматриваются типы атак Layer 4 (Transport) и Layer 7 (Application), методы обнаружения и стратегии защиты.

Инфраструктура REXE обеспечивает защиту на сетевом уровне от атак Layer 3/4 через Path Panel. Для защиты Layer 7 можно использовать Cloudflare WAF или пользовательские конфигурации.

Модель OSI и уровни DDoS

УровеньНазваниеТипы атакЦель
Layer 3СетевойIP flood, ICMP floodПропускная способность сети
Layer 4ТранспортныйSYN flood, UDP flood, TCP floodТаблица соединений
Layer 7ПрикладнойHTTP flood, Slowloris, DNS queryРесурсы приложения

Атаки Layer 4

Атаки Layer 4 нацелены на протоколы TCP и UDP для исчерпания ресурсов соединений сервера.

SYN Flood

Использует процесс трёхстороннего рукопожатия TCP. Атакующий отправляет множество SYN-пакетов, но никогда не отвечает ACK.

Нормальное TCP-соединение:
Клиент → SYN → Сервер
Клиент ← SYN-ACK ← Сервер
Клиент → ACK → Сервер
✓ Соединение установлено

SYN Flood:
Атакующий → SYN → Сервер
Атакующий ← SYN-ACK ← Сервер
Атакующий → (не отправляет ACK)
✗ Полуоткрытые соединения накапливаются

Обнаружение SYN Flood

hljs bash
# Проверка полуоткрытых соединений
ss -s

# Список соединений SYN-RECV
ss -tnp state syn-recv

# Распределение состояний соединений
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn

Защита от SYN Flood

hljs bash
# Включить SYN cookies
sudo sysctl -w net.ipv4.tcp_syncookies=1

# Увеличить SYN backlog
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=65536

# Уменьшить количество повторов SYN-ACK
sudo sysctl -w net.ipv4.tcp_synack_retries=2

# Сделать постоянным
cat >> /etc/sysctl.conf << 'EOF'
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_synack_retries = 2
net.core.somaxconn = 65536
EOF
sudo sysctl -p

UDP Flood

Поскольку UDP является протоколом без установления соединения, можно отправлять большие объёмы UDP-пакетов с поддельными IP-адресами.

hljs bash
# Мониторинг UDP-трафика
sudo tcpdump -i eth0 udp -c 1000 -nn

# Закрыть ненужные UDP-порты
sudo iptables -A INPUT -p udp --dport 19 -j DROP   # chargen
sudo iptables -A INPUT -p udp --dport 69 -j DROP   # TFTP
sudo iptables -A INPUT -p udp --dport 111 -j DROP  # portmap

# Ограничение скорости UDP
sudo iptables -A INPUT -p udp -m limit --limit 100/s --limit-burst 200 -j ACCEPT
sudo iptables -A INPUT -p udp -j DROP

Атаки Amplification

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

ПротоколКоэффициент усиленияПорт
DNS28-54x53
NTP556x123
Memcached51000x11211
hljs bash
# Отключить NTP monlist
echo "disable monitor" >> /etc/ntp.conf
sudo systemctl restart ntpd

# Привязать Memcached только к localhost
echo "-l 127.0.0.1" >> /etc/memcached.conf
sudo systemctl restart memcached

Атаки Layer 7

Атаки Layer 7 нацелены на протокол HTTP/HTTPS для исчерпания ресурсов приложения веб-сервера.

HTTP Flood

Перегружает веб-сервер отправкой множества HTTP GET или POST запросов.

hljs bash
# Мониторинг количества HTTP-запросов (Nginx)
tail -f /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

# Запросы в секунду
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f1-3 | sort | uniq -c | sort -rn | head -10

Защита от HTTP Flood (Nginx)

hljs nginx
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=api:10m rate=5r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    limit_req zone=general burst=20 nodelay;
    limit_conn addr 50;
    
    location /api/ {
        limit_req zone=api burst=10 nodelay;
    }
}

Slowloris

Slowloris исчерпывает пул соединений сервера, удерживая HTTP-соединения открытыми как можно дольше.

Защита от Slowloris (Nginx)

hljs nginx
http {
    client_header_timeout 10s;
    client_body_timeout 10s;
    send_timeout 10s;
    keepalive_timeout 15s;
    
    limit_conn_zone $binary_remote_addr zone=conn:10m;
    limit_conn conn 20;
}

Общие стратегии защиты

Оптимизация параметров ядра

hljs bash
cat >> /etc/sysctl.conf << 'EOF'
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_synack_retries = 2
net.netfilter.nf_conntrack_max = 1000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 65536
net.core.somaxconn = 65536
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
EOF
sudo sysctl -p

Защита от DDoS с помощью iptables

hljs bash
#!/bin/bash
# Отбросить недействительные пакеты
iptables -A INPUT -m state --state INVALID -j DROP

# Проверка SYN для новых соединений
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Отбросить XMAS-пакеты
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# Отбросить NULL-пакеты
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Защита от SYN flood
iptables -A INPUT -p tcp --syn -m limit --limit 100/s --limit-burst 200 -j ACCEPT

# Лимит соединений на IP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 50 -j DROP

Заключение

Атаки DDoS Layer 4 и Layer 7 требуют различных стратегий. Атаки Layer 4 блокируются на сетевом уровне (Path Panel, iptables), а атаки Layer 7 фильтруются на уровне приложения (rate limiting, WAF, Cloudflare). Многоуровневый подход к защите обеспечивает наиболее эффективную оборону.