Анализ DDoS можно производить конечно своими скриптами, парсить логи. Но лучше предоставить это апачевскому mod_evasive.
Ставим mod_evasive, в конфигурации пишем
DOSHashTableSize 3097 DOSPageCount 15 DOSSiteCount 15 DOSPageInterval 3 DOSSiteInterval 3 DOSBlockingPeriod 300 DOSSystemCommand "/usr/bin/sudo /usr/bin/fwban %s"
- DOSPageInterval – интервал для хитов определенной страницы
- DOSSiteInterval – интервал для хитов определенного vhost
- DOSPageCount – после этого количества хитов по определенному URI в течении интервала DOSPageInterval, айпи будет забанен
- DOSSiteCount – после этого количества хитов по определенному vhost в течении интервала DOSSiteInterval, айпи будет забанен
Нам понадобиться скрипт для бана на уровне файрвола «/usr/bin/fwban» (вариант для Linux):
#!/bin/bash if [ "x$1" = "x" ] ; then echo "USAGE: $0 IPADDR" exit fi /sbin/iptables -A BAN -s $1 -j DROP
Ему надо поставить права 755.
Так же нам понадобиться утилита sudo. Она стоит практически везде. В «visudo» закомментируем опцию:
#Defaults requiretty
И добавим строку
apache ALL = NOPASSWD: /usr/bin/fwban
где apache – юзер от которого работает апач.
Так же нам понадобиться цепочка BAN в iptables:
iptables -N BAN iptables -I INPUT -j BAN
Сохраним правила файрвола
/etc/init.d/iptables save
Рестартанем апач. Теперь попробуйте уложить ваш сайт (только не со своего айпи!!!):
ab -n 1000 -c 20 http://yoursite.info/
В логах «жертвы» можно увидеть:
May 6 15:18:25 Server1 mod_evasive[26514]: Blacklisting address 1.2.3.4: possible DoS attack.
А в файрволе:
# iptables-save ---многа букав--- -A BAN -s 1.2.3.4 -j DROP ---многа букав---
Ура! No pasaran.
Да. И конечно, апач лучше бы прикрыть извне nginx’ом.
Да. И данный метод банит айпишнеги перманентно, пока не рестартанет сервер, или не будет сброшена цепочка BAN. Вот такой брутальный метод )