DDoS-атаки (Distributed Denial of Service) перегружают сервер огромным количеством запросов, делая его недоступным. Эффективная защита строится на нескольких уровнях: сетевой (Cloudflare/CDN), системный (sysctl) и уровень приложения (Nginx).
Уровень 1: Cloudflare DDoS Protection (рекомендуется)
Cloudflare поглощает DDoS-трафик до достижения вашего сервера:
- Включить Proxy (оранжевое облако) для DNS-записей A и CNAME
- Security → DDoS → включить HTTP DDoS Attack Protection
- Security → WAF → включить Managed Rules
- Security Level: High при атаке, Medium в обычном режиме
Уровень 2: Nginx — ограничения соединений
http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=50r/s;
server {
limit_conn conn_limit 20; # Макс 20 соединений с одного IP
limit_req zone=req_limit burst=100 nodelay;
limit_req_status 429;
# Таймауты для защиты от Slowloris
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5;
send_timeout 10;
}
}
Уровень 3: Системная оптимизация (sysctl)
# /etc/sysctl.d/99-ddos-protect.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 300
net.ipv4.conf.all.rp_filter = 1
sysctl --system
Реагирование на атаку
netstat -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
ss -s
# Быстро заблокировать атакующий IP
iptables -I INPUT -s ATTACK_IP -j DROP
# Включить режим "Under Attack" в Cloudflare
# Security → Settings → Security Level: I'm Under Attack
IP-скрытие за Cloudflare: Убедитесь, что реальный IP сервера не раскрывается через DNS-историю, email-заголовки или другие каналы. Cloudflare эффективен только пока атакующий не знает реальный IP.