Оказывается,для Апача есть неплохой модуль для защиты от ДДоС атак. Модуль по сути очень не сложный,ставится легко,настраивается еще легче.Суть его заключается в том,что при превышении определенного количества запросов или соединений за отведенное время с одного IP,модуль блокирует доступ с этого адреса,выдвая ему вместо контента страницу с 403. НО! Как понимаете,отдать 403 — это все равно обработать запрос Апачу,хоть и гораздо меньше.И это все равно запись в логи доступа и ошибок.Нам это ни к чему.Потому этим модулем мы не только будем блокировать атакующего,но и с помощью iptables банить его по IP,тем самым не давая дальше вести атаку и сыпать нас запросами. Итак:
1)В Debian модуль ставиться из репозиториев командой
apt-get install libapache2-mod-evasive
2)Мод установлен,запуск прописан в Апач,сам Апач перезагружен автоматически.Остается только настроить в /etc/apache2/httpd.conf:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 4
DOSSiteCount 30
DOSPageInterval 3
DOSSiteInterval 3
DOSBlockingPeriod 300
DOSEmailNotify [email protected]
</IfModule>
Доступные для использования опции:
- DOSHashTableSize: это размер хэш-таблицы которая обрабатывает запросы к WWW-серверу.
- DOSPageCount: число запросов к одной странице от одного и того же IP в течение указаного интервала времени.
- DOSSiteCount: число запросов ко всем страницам домена, т.е если поступило более 90-ти запросов с одного ай-пи на разные страницы домена – тогда такой ай-пи будет заблокирован.
- DOSPageInterval: Интервал для директивы DOSPageCount (в секундах)
- DOSSiteInterval: Интервал для директивы DOSSiteCount (в секундах)
- DOSBlockingPeriod: На сколько заблокировать ай-пи (в секундах)
- DOSEmailNotify: будет отправлять сообщение по электронной почте о том что такой-то IP был заблокирован.Использует /bin/mail,которого например у меня нет тут.А есть в /usr/bin/,поэтому делаем символическую ссылку ln -s /usr/bin/mail /bin/mail
- DOSSystemCommand: эта директива используется для выполнения какой-нибудь вашей команды когда IP блокируется.В переменную «%s» передается от модуля IP-адресс атакуемого хоста)
- DOSWhiteList: список белых IP адресов, можно и по маскам (напр. 127.0.0.*)
Теперь перезагружаем Апач и наш модуль в работе!
Единственное,с чем столкнулся сейчас — Апач работает от юзера www-data,и по уму надо при блокировке адреса,блокировать его с помощью iptables из функции DOSSystemCommand.Но! Вызывать iptables можно только пользователю root. И даже если и добавить адрес в блокировку фаервола,то он оттуда сам не исчезнет через время. То есть нам еще надо отсчитать время бана и убрать адрес из блокировки.Видимо буду решать это каким то доп.скриптом.Как только решение сделаю,допишу здесь.
С сайта http://www.lissyara.su/articles/freebsd/www/mod_evasive/ возьмем скрипт для тестирования работы модуля на сервере,на котором он установлен. Если вы хотите этим скриптом протестировать другой адрес, то измените IP-адрес 127.0.0.1 на тот,который вам нужен.
Создаем файл tets.pl с содержимым:
#!/usr/bin/perl
use IO::Socket;
use strict;
for(0..100) {
my($response);
my($SOCKET) = new IO::Socket::INET( Proto => "tcp",
PeerAddr=> "127.0.0.1:80");
if (! defined $SOCKET) { die $!; }
print $SOCKET "GET /?$_ HTTP/1.0\n\n";
$response = <$SOCKET>;
print $response;
close($SOCKET);
}
сохраняем файл,даем ему аттрибут Исполнимый и запускаем.Сначала должны идти ответы ОК,а затем резко 403 Forebidden. Это означает что модуль работает.