12 янв. 2012 г.

Установка и настройка mod_evasive для Apache в CentOS (защита от DOS, DDOS)

mod_evasive - очень интересный модуль для Апача для автоматического бана IP-шников при DOS (DDOS) атаке.

Устанавливаем сам модуль (имеется в виду, что у вас уже установлен и настроен сам Апач):

yum install mod_evasive

Для Debian: aptitude install libapache2-mod-evasive

Далее редактируем конфиг (в принципе, там всё по-умолчанию уже нормально настроено):

nano /etc/httpd/conf.d/mod_evasive.conf

Описание настроек:
  • DOSHashTableSize: это размер хэш-таблицы которая обрабатывает запросы к WWW-серверу.
  • DOSPageCount: число запросов к одной странице от одного и того же IP в течение указаного интервала времени.
  • DOSSiteCount: число запросов ко всем страницам домена, т.е если поступило более 50-ти запросов с одного ай-пи на разные страницы домена — тогда такой ай-пи будет заблокирован.
  • DOSPageInterval: Интервал для директивы DOSPageCount (в секундах)
  • DOSSiteInterval: Интервал для директивы DOSSiteCount (в секундах)
  • DOSBlockingPeriod: На сколько заблокировать ай-пи (в секундах)
  • DOSEmailNotify: может быть использован для уведомления, будет отправлять сообщение по электронной почте о том что такой-то IP был заблокирован.
  • DOSSystemCommand: эта директива используется для выполнения какой-нибудь вашей команды когда IP блокируется. Вы можете использовать это для добавления IP-адреса в таблицу фаервола. (пример: «/sbin/iptables -A INPUT -p tcp —dport 80 -s %s -j REJECT» В %s передается от модуля IP)
  • DOSWhiteList: список белых IP адресов, можно и по маскам (напр. 127.0.0.*)
Единственное что - следует добавить в конец для логов: DOSLogDir /var/log/httpd/mod_evasive
Далее создадим директорию, в которую будут кидаться логи:

mkdir /var/log/httpd/mod_evasive

Редактируем конфиг апача:

nano /etc/httpd/conf/httpd.conf

Добавляем в конфиг строчку для загрузки модуля (для Debian - a2enmod mod-evasive):

LoadModule evasive20_module modules/mod_evasive20.so

Перезагружаем апач чтобы изменения вступили в силу:

/etc/init.d/httpd reload

Всё. Проверяем с помощью скрипта (ставится вместе с модулем):

perl /usr/share/doc/mod_evasive-1.10.1/test.pl

Если первые сколько-то там запросов 200 или 404, а затем 403 - значит, всё настроено правильно и работает. Для Debian скрипт находится в /usr/share/doc/libapache2-mod-evasive/examples/test.pl