Приведу пример простого скрипта против DDOS атак для NAT серверов.
Скрипт выполняется когда общее число «conntrack» соединений больше 500000, сохраняет в текстовый файл IP-адреcа у которых больше всего «conntrack» соединений, у кого больше 10000 — добавляет в ipset список.
Содержимое скрипта:
#!/bin/bash
count=`cat /proc/sys/net/netfilter/nf_conntrack_count`
if (($count > 500000));
then
/usr/sbin/conntrack -L | awk '{if ($5 ~ /src/) print $5; else if ($4 ~ /src/) print $4}' | sed "s/src=/ /g" | sort | uniq -c | sort -n | tail -n10 > /var/log/ddos.log
tracks=($(awk '{print $1}' /var/log/ddos.log))
ips=($(awk '{print $2}' /var/log/ddos.log))
for i in seq 0 9;
do
if ((${tracks[$i]} > 10000));
then
/sbin/ipset -A ddos ${ips[$i]}
fi
done
fi
exit 0
Соответственно должен быть создан ipset список, например с таймаутом 10 минут по истечении которых IP адрес автоматически удалится из списка.
/sbin/ipset -N ddos iphash timeout 600
Ну и запретим FORWARD всем кто в ipset списке:
/sbin/iptables -A FORWARD -m set --match-set ddos src -j DROP
Смотрите также мою статью:
Как обнаружить DDOS атаки
