В Apache существует модуль, предназначенный для отражения DDOS атак — модуль mod-evasive. Этот модуль отслеживает количество подключений к странице и сайту за определенный интервал времени с одного IP и блокирует этот IP адрес на определенное время.
По умолчанию,модуль mod-evasive вообще-то не блокирует IP, а просто выдает ему вместо контента код 403. То-есть Apache все равно производит обработку и посылает ответ, хоть и гораздо меньший. И соответствующие записи появляются в логах доступа и ошибок. Так что при сильной атаке Apache все равно упадет. Но от слабеньких DOS атак помогает.
В Ubuntu модуль mod-evasive присутствует в репозитории и устанавливается командой
sudo apt-get install libapache2-mod-evasiveСоздаем файл настроек mod-evasive /etc/apache2/mods-available/mod-evasive.conf со следующим содержимым:
<IfModule mod_evasive20.c>
DOSHashTableSize 4096
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
DOSEmailNotify admin@site.com
</IfModule>Доступные для использования опции:
DOSHashTableSize: это размер хэш-таблицы, обрабатывающей запросы к веб-серверу.
DOSPageCount: число запросов к одной странице от одного и того же IP в течение установленного интервала времени.
DOSSiteCount: число запросов ко всему сайту с одного IP в течение установленного интервала времени.
DOSPageInterval: Интервал времени для директивы DOSPageCount (в секундах)
DOSSiteInterval: Интервал времени для директивы DOSSiteCount (в секундах)
DOSBlockingPeriod: Время блокировки (в секундах)
DOSEmailNotify: адрес электронной почты, на который будет послано уведомление о блокировке
DOSSystemCommand: команда, которая будет выполнена при блокировании IP. В переменную «%s» передается адрес блокируемого IP)
DOSWhiteList: список белых IP адресов, можно и по маскам (напр. 192.168.1.*)
Включаем модуль mod-evasive и перезапускаем Apache:
sudo a2enmod mod-evasive
sudo service apache2 restartВ /usr/share/doc/libapache2-mod-evasive/examples есть скрипт на Perl для проверки модуля mod-evasive – test.pl. Для проверки работоспособности модуля правим в скрипте адрес сервера и запускаем скрипт:
test.plЕсли модуль mod-evasive работает нормально, сначала должно выдаваться несколько сообщений:
HTTP/1.1 200 OKа при достижении указанного порога запросов:
HTTP/1.1 403 ForbiddenУ меня mod-evasive сразу же забанил Майкрософтовский bing бот.