Что такое DoS атака - знают практически все. Пусть и не все испытали на себе, но по словам очевидцев - не очень приятное зрелище, когда ваш сайт просто отказывается подавать хоть какие-то признаки жизни. Причём написать скрипт для DoS атаки не составляет труда (пример будет ниже). Чтобы защитить свой сайт от HTTP DoS-а можно воспользоваться модулем mod_evasive, который позволяет "регулировать" нагрузку. В стандартной поставке, к сожалению, данного модуля нет. Собирать его придётся из исходников.
Скачаем модуль с сайта разработчика
wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar xfz mod_evasive_1.10.1.tar.gz
cd mod_evasive
apt-get install apache2-prefork-dev
Если хотите получать уведомления о DoS атаке, поднастройте строку #define MAILER to “/usr/bin/mail %s”, указав вместо /usr/bin/mail свой локальный почтовик. После того, как всё поднастроите, соберите модуль (для apache2 это будет следующая команда)
/usr/bin/apxs2 -i -c mod_evasive20.c
После сборки модуля необходимо прописать его в "автозагрузку" апача. Создайте в папке /etc/apache2/mods-available файл evasive.load со следующим содержанием
LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so
Создайте в папке /etc/apache2/conf.d файл “evasive” - в нём будут лежать настройки модуля:
<ifmodule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
DOSEmailNotify admin@server.ru
DOSLogDir /var/log/mod_evasive
</ifmodule>
Также можно прописать команду на выполнение, если модуль посчитает, что идёт DoS атака
DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
Чтобы подгрузить модуль, выполните
a2enmod evasive
Запустите апач на релоад конфигов
/etc/init.d/apache2 force-reload
В архиве с mod_evasive идёт скрипт для проверки эффективности модуля
-----------
#!/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);
}
---------
Установите на скрипт атрибут 755 и запустите его. "Выхлоп" должен быть примерно следующим:
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
Если видите примерно такое - значит модуль работает исправно. Для примера можете попробовать отключить его и посмотреть на выхлоп.
Естественно, этот модуль ни в коем случае не панацея, но от "пионеров" начитавшихся статей "как завалить сайт за 5 минут" вполне может помочь.



