Skip to content

SYNPROXY

Matvey Gladkikh edited this page Sep 21, 2022 · 11 revisions

Смягчение DDoS атак TCP SYN Flood при помощи iptables и SYNPROXY

   sysctl -w net/ipv4/tcp_syncookies=1
   sysctl -w net/ipv4/tcp_timestamps=1
   sysctl -w net/netfilter/nf_conntrack_tcp_loose=0
   echo 1000000 > /sys/module/nf_conntrack/parameters/hashsize
   sysctl -w net/netfilter/nf_conntrack_max=100000000
   iptables -t raw -I PREROUTING -p tcp -m tcp --syn -j CT --notrack
   iptables -I INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
   iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Если необходимо обеспечить защиту для отдельного IP, правила можно изменить следующим образом (если атака ведётся только на 80 сетевой порт, можно добавить "--dport 80"):

   iptables -t raw -I PREROUTING -p tcp -m tcp -d 192.168.1.10 --syn -j CT --notrack 
   iptables -I INPUT -p tcp -m tcp -d 192.168.1.10 -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
   iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Для просмотра статистики:

   iptables -t raw -vnL
   cat /proc/net/stat/synproxy

Если нужно на низком уровне заблокировать некоторые HTTP-запросы, явно связанные с проведением атаки, можно использовать следующее правило (маску можно выделить из логов или через "tcpdump -nnA dst host 192.168.1.10 and port http"):

   iptables -A INPUT -p tcp --dport 80 -m string --string "маска_блокировки" --algo bm -j DROP
Clone this wiki locally