Для начала проверяем, действительно ли это Syn Flood
ZeroShell
11.04.2024 10:37
176
Для начала проверяем, действительно ли это Syn Flood:
netstat -n | grep SYN_RECV | wc -l Если больше 5 соединений, значит, это syn атака.
1) Вводим для iptables правила:
iptables -N syn_flood iptables -A INPUT -p tcp --syn -j syn_flood iptables -A syn_flood -m limit --limit 30/s --limit-burst 100 -j RETURN iptables -A syn_flood -j DROP *На данный момент не советуем пользоваться этим пунктом, т.к., по какой-то причине, блокирует все подряд
net.netfilter.nf_conntrack_max=400000 net.netfilter.nf_conntrack_tcp_timeout_close = 5 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 5 net.netfilter.nf_conntrack_tcp_timeout_last_ack = 1 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 5 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 1 net.netfilter.nf_conntrack_tcp_timeout_established = 30 net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 1 net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 1 net.netfilter.nf_conntrack_tcp_loose = 0 Все лимиты были досконально проверены, тем не менее, в зависимости от железа, некоторые параметры могут не сработать/помочь.
Принимаем настройки:
sysctl -p 3) Через Iptables ставим ограничение одновременных число коннектов к веб-серверу с одного ip
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 3 --connlimit-mask 24 -j DROP Самое действенное правило!
4) Ставим ipset и настраиваем firewall
yum install -y ipset
ipset -N dos iphash
service iptables save iptables -I INPUT -m set --set dos src -j DROP Далее создаем скрипт со следующим содержимым:
#!/bin/bash serverip=`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | cut -f2 -d ":"` for i in `netstat -ntu | grep SYN_RECV | awk '{print $5}' | cut -f1 -d ":" | sort | uniq | grep -v ${serverip}` do ipset -A dos $i done ipset -S > /etc/sysconfig/ipset Далее, проверить, какие айпи адреса были отброшены, можно командой
ipset -L dos 5) Также можно поставить ddos deflate, НО если у вас Centos, то его необходимо допиливать, иначе он начинает блокировать не то что нужно.
Например надо изменить скрипт проверки на
netstat -ntu | grep ':' | awk '{print $5}' | sed 's/::ffff://' | cut -f1 -d ':' | sort | uniq -c | sort -nr > $BAD_IP_LIST Эти манипуляции позволили отбить ddos на 80-100 мбит/с. Порт, кстати, тоже был 100 Мбит.