Оказывается,для Апача есть неплохой модуль для защиты от ДДоС атак. Модуль по сути очень не сложный,ставится легко,настраивается еще легче.Суть его заключается в том,что при превышении определенного количества запросов или соединений за отведенное время с одного 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 admin@site.com
</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. Это означает что модуль работает.

Добавить комментарий

%d такие блоггеры, как: