mod_evasive - защита от DOS и DDOS атак
Собственно ДОС и ДДОС атаки проблема практически всех кто предоставляет такую услугу как хостинг и как всегда кому-то не очень понравится какой нить из проетов что размещены у вас на сервере и как всегда мозгов нет чтобы сломать а задосить ето и 5-ти класник может. Вот собственно нашел модуль какой сможет спасти вас от нашествия ДОС и ДДОС атак вместо того чтобы закидать всех негодяев в фаервол (что же ето за хостинг когда тебя пол мира не видит
).
И так установка mod_evasive для Apache 1.3 и Apache 2.2 в портаx его нету так что нуно качать вот тут.
srv2# wget
Для просмотра ссылки Войди или Зарегистрируйся
srv2# tar xfz mod_evasive_1.10.1.tar.gz
srv2# cd mod_evasive
srv2# whereis apxs
apxs: /usr/local/sbin/apxs /usr/local/man/man8/apxs.8.gz // По умолчанию он тут
srv2# /usr/local/sbin/apxs apxs -i -a -c mod_evasive.c // для Apache 1.3
srv2# /usr/local/sbin/apxs apxs -i -a -c mod_evasive2.c // для Apache 2.2
srv2# rehash
После успешной установки в конфиг апача нужно добавить несколько строк:
Для Apache 1.3
<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
</IfModule>
Для Apache 2.2
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
</IfModule>
После чего перезапустим Апач
srv2# /usr/local/etc/rc.d/apache restart
В падарок к етому модулю в архиве сразу предоставлен тест для проверки работоспособности модуля. С вот таким содержанием.
#!/usr/bin/perl
# test.pl: small script to test mod_dosevasive's effectiveness
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);
}
Только не забудте поставить на него права для запуска chmod +r имя файла.
Если после запуска скрипта видим примерно вот такую штуку
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
Значит все работает отлично.
P.S. Проверял на Апаче 1,3 первых 5 - 10 минут ДОС атаки держыт дальше Апач всетаки падает. Всетаки Апач дайот ответ на запрос хоть и Forbidden но отвечает. А окончательно проблему возможно решить с ДОС и ДДОС атаками с стандартным фаерволом OpenBSD тоисть PF. Вскоре статья будет дополнена конфигурацией по настройке PF.
Вот собственно дополнение:
cat /etc/pf.conf
ext_if="em0"
table <ddos> persist
block in log quick from <ddos>
pass in on $ext_if proto tcp to $ext_if \
port www flags S/SA keep state \
( max-src-conn-rate 100/5, overload <ddos> flush)
А всех кто попал к нам в блек лист можем посмотреть вот так:
pfctl -t ddos -T show
А удалить вот так
pfctl -t ddos -T flush
А для удобства я кинул в крон вот такую строчку
чтобы каждых 20 минут само чистило
*/20 * * * * root pfctl -t ddos -T flush