В 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 бот 😆