понедельник, 31 марта 2008 г.

Защита от легкой flood и ddos атаки по HTTP-протоколу используя mod_dosevasive

Защита от ddos
mod_evasive - (mod_dosevasive) HTTP DoS or DDoS attack or brute force attack
Apache модуль для организации защиты от DDoS атак.

Преамбула
Не стоит думать, что слабый ddos не сможет нанести ущерба вашему серверу. Например, атакующих зомби-машин всего 50-150, все они с толстыми каналами, а вы уехали в командировку или у вас 10-ки серверов и вы не успеваете физически мониторить все. В таком случае, даже не большое количество машин, смогут зафлудить канал или заставить выйти из строя веб сервер apache, mysql, etc. Другое дело когда администратор 24 часа в сутки мониторит сервер и с легкостью обнаруживает атаки, далее с легкостью и в считанные секунды заносит несколько правил в таблицу фаервола при этом спокойно попивая кофе, продолжает заниматься своими делами. Но такое бывает редко, смотреть сутками и мониторить вывод комманд netstat, top, mtop убийственно для вашего мозга, и глаза устанут, будем непосебе :), поэтому нужно автоматизировать процесс блокировки атакующих зомби-машин.

Один из методов как защитить свой сервер от флуд атак и слабого ddos-a по http протоколу это установить модуль для веб-сервера Apache - mod_dosevasive.

Установка и настройка mod_dosevasive

Debian Linux (только для Apache 1.3.x):
apt-get install libapache-mod-dosevasive


Или же вы можете скачать архив с сайта:
http://www.zdziarski.com/projects/mod_evasive/
Распаковываете архив
tar zxvf mod_dosevasive_1.10.tar.gz
cd mod_dosevasive


Компилируем mod_dosevasive для Apache 2:
/usr/local/apache/bin/apxs2 -i -a -c mod_dosevasive20.c

Если у вас apache 1.3 тогда так:
/usr/local/apache/bin/apxs -i -a -c mod_dosevasive.c


(!) Замените /usr/local/apache на ваш путь к apache

Редактируем httpd.conf (Чаще всего он находится в /usr/local/apache/conf/httpd.conf):

Убедитесь, что нечто подобное присутствует в настройках:
LoadModule evasive20_module lib/apache2/modules/mod_evasive20.so


Добавляем в конец файла следующие строки:

DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 15
DOSEmailNotify email@for-notify.com
DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"



-- 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.*)

Также этот модуль позволяет защитить ваши сайты от brute force атак.

5 комментариев:

Bers комментирует...

спасибо за статью, пригодилась

vertigo комментирует...

Спасибо за пост

phpforeva комментирует...

Комманда iptables -A INPUT -p tcp --dport 80 -s %s -j что то не работает
Не записывает в таблицу :(

Morrison комментирует...

phpforeva а ты запиши в таблицу :)

Ярослав комментирует...

При удачной настройке iptables nginx попросту блокирует атакующие адреса и они не нагружают системные ресурсы сервера, ну а для решения серьезных проблем нужная хорошая аппаратная защита. Могу порекомендовать ребят из Simplyway.net, отлично справляются как с ддос атаками так и толково шарят в администрировании.