Несколько осторожных слов наперед: Защита от DDoS-атак сложна и обычно требует помощи вашего провайдера. Iptables сами по себе не защитят вас и даже могут навредить. Я не думаю, что вы действительно хотите сделать то, о чем просите.
С этим разобрались:
Записывайте каждый отдельный IP-адрес в syslog (не более 1 записи на IP и час):
iptables -I INPUT 1 \! -i lo \
-m hashlimit --hashlimit-name "IP_SOURCES" \
--hashlimit-mode srcip \
--hashlimit-burst 1 \
--hashlimit-upto 1/hour \
-j LOG
Замените iptables
на ip6tables
, чтобы сделать то же самое для пакетов IPv6.
Блокирование IP будет работать аналогично, просто добавьте модуль conntrack
в вышеуказанное правило, сопоставьте NEW
соединения и установите цель перехода на DROP
. Но опять же, я думаю, что вы окажете себе плохую услугу, если действительно сделаете это.
iptables -I INPUT 1 \! -i lo \
-m conntrack --ctstate NEW \
-m hashlimit --hashlimit-name "RATE_LIMIT" \
--hashlimit-mode srcip \
--hashlimit-burst 20 \
--hashlimit-above 1/min \
-j DROP
Это позволит 20 попыток соединения в минуту, отбрасывая все остальные попытки соединения. Пакеты установленных соединений все еще могут проходить невредимыми.
Как отмечалось в комментариях, fail2ban
может быть хорошим решением для блокирования нежелательного трафика. Это не поможет вам, если злоумышленники генерируют SYN-flood, или используют IPv6, но будет полезно, например, если злоумышленники пытаются пробиться к вашему ssh или smtp серверу с помощью "нормального" IPv4 соединения.