Как вариант, можно использовать DDoS Deflate.
Что бы обнаружить ddos и флуд, скрипт использует команду «netstat».
После обнаружения атаки блокирует ip адреса, откуда идет атака, делая это с помощью фаервола iptables или apf.
Скрипт устанавливается в дерикторию /usr/local/ddos, в которой будут следующие файлы:
ddos.conf — конфиг скрипта.
ddos.sh — сам скрипт
ignore.ip.list — белый список
LICENSE — лицензия.
Пример конфига:
##### Paths of the script and other files PROGDIR="/usr/local/ddos"
PROG="/usr/local/ddos/ddos.sh"
IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"
CRON="/etc/cron.d/ddos.cron"
APF="/etc/apf/apf" IPT="/sbin/iptables"
##### frequency in minutes for running the script
##### Caution: Every time this setting is changed, run the script with --cron
##### option so that the new frequency takes effect
FREQ=1
##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=64
##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=0
##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1
##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO="[Ссылки могут видеть только зарегистрированные пользователи. ]"
##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600000
Чтобы скрипт сработал при атаке, когда система уже начала загибатся, в crontab изменяем: