Сегодня я хотел бы описать установку модуля mod_evasive, для веб-сервера Апач. Чем же хорош этот модуль? Наверное все знают что такое dos (ddos) атака, а многие имели опыт с ней столкнуться. В настоящее время организовать такую атаку не составит больших денежных вливаний, а последствия могут быть ощутимые, например для интернет-магазина. Итак mod_evasive – это модуль защиты от dos(ddos), брут форс атак. Но не стоит думать что это панацея, он справиться только с слабой dos(ddos) атакой, для чего то более серьезного, необходимо принимать иные меры.
Устанавливать этот модуль я буду на ОС CentOS 5.5. Подразумевается что Апач, версии 2 у вас уже установлен.
1. Подключаем репозиторий Epel.
Вот линк: http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Импортируем так:
# rpm -Uhv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
2. Устанавливаем модуль
# yum install mod_evasive
3. Редактируем конфигурационный файл Апача
# vi /etc/httpd/conf/httpd.conf
Добавляем следующии строки:
<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 6 DOSSiteCount 100 DOSPageInterval 2 DOSSiteInterval 2 DOSBlockingPeriod 600 DOSEmailNotify admin@corp.ru DosWhitelist 90.52.18.19 </IfModule>
Описание настроек: DOSH * ashTableSize: это размер хэш-таблицы которая обрабатывает запросы к веб-серверу.
- 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 адресов, можно и по маскам (например 192.168.0.*)
#!/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); }
Выставляем на файл права
# chmod a+x test
Запускаем скрипт:
# ./test
И видим такое:
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
Ну что ж модуль работает. На этом все!