Атаки типа "отказ в обслуживании" (DoS) направлены на то, чтобы сделать сервер или сетевой ресурс недоступным, перегрузив его потоком трафика. Это может привести к серьезным проблемам для веб-сайтов и онлайн-сервисов. Apache, являясь одним из широко используемых веб-серверов, может стать мишенью для таких атак.
Одним из способов защиты веб-сервера Apache от DoS-атак является использование модуля mod_evasive. Он обнаруживает и обеспечивает уклонение в случае атаки, что делает его незаменимым инструментом для администраторов серверов.
Модуль mod_evasive отслеживает IP-адреса входящих соединений, и если он обнаруживает чрезмерное количество запросов с IP-адреса, то временно заносит его в черный список. Модуль может быть настроен в соответствии с вашими требованиями и окружением.
Шаги по предотвращению DoS-атак с помощью mod_evasive в Apache
Запустите терминал.
Установите модуль mod_evasive для вашей конкретной версии Apache.
1 | sudo apt install libapache2-mod-evasive |
1 | sudo dnf install --assumeyes mod_evasive |
Для дисперсии CentOS и RedHat требуется установка репозитория Raven
Включите модуль, если он не активирован.
1 | sudo a2enmod evasive |
Откройте файл конфигурации mod_evasive с помощью удобного текстового редактора.
1 | sudo nano /etc/apache2/mods-available/evasive.conf |
1 | sudo nano /etc/httpd/conf.d/mod_evasive.conf |
Настройте параметры mod_evasive.
1 2 3 4 5 6 7 8 9 10 11 12 | <IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSEmailNotify email@example.com DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP" DOSLogDir "/var/log/apache2/" DOSWhitelist 127.0.0.1 </IfModule> |
Параметр | Описание | По умолчанию |
DOSHashTableSize | Определяет размер используемой хэш-таблицы. | 3097 |
DOSPageCount | Количество запросов на одну и ту же страницу (или URI) за интервал страниц. | 2 |
DOSSiteCount | Общее количество запросов к любому объекту с одного и того же клиентского IP-адреса за интервал сайта. | 50 |
DOSPageInterval | Интервал для порогового значения количества страниц. | 1 секунда |
DOSSiteInterval | Интервал для порогового значения количества сайтов. | 1 секунда |
DOSBlockingPeriod | Продолжительность (в секундах), на которую IP будет заблокирован. | 10 секунд |
DOSEmailNotify | Адрес электронной почты, на который будут отправляться предупреждения. | Нет |
DOSSystemCommand | Системная команда, которая будет выполняться при обнаружении DoS-атаки. | |
DOSLogDir | Каталог, в котором будут храниться журналы, связанные с mod_evasive. | |
DOSWhitelist | IP-адреса, которые должны быть внесены в белый список и не рассматриваться для блокировки. |
Сохраните и выйдите из редактора.
Перезапустите Apache, чтобы применить изменения.
1 | sudo systemctl restart apache2 |
1 | sudo systemctl restart httpd |
Проверьте конфигурацию, имитируя DoS-атаку.
1 | ab -n 1000 -c 10 http://127.0.0.1/ |
Пример вывода
1 2 3 4 5 6 7 8 9 10 | This is ApacheBench, Version 2.3 <$Revision: 1903618 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ ##### snipped Complete requests: 1000 Failed requests: 994 (Connect: 0, Receive: 0, Length: 994, Exceptions: 0) Non-2xx responses: 994 |
Большинство запросов не прошло из-за того, что mod_evasive блокировал запросы.
Пожалуйста, убедитесь, что эти тесты проводятся контролируемо и этично. Тестирование на живом сайте без разрешения может привести к юридическим последствиям.
Отслеживайте журналы вашего сервера, чтобы наблюдать за поведением mod_evasive.
1 | sudo tail -f /var/log/apache2/error.log |
Пример вывода
1 2 3 | [Thu Sep 30 09:47:52.179779 2023] [evasive20:error] [pid 11185:tid 281872643232032] [client 10.0.0.10:40043] client denied by server configuration: /var/www/html/ [Thu Sep 30 09:47:52.179903 2023] [evasive20:error] [pid 11185:tid 281872643232032] [client 10.0.0.10:40047] client denied by server configuration: /var/www/html/ [Thu Sep 30 09:47:52.179972 2023] [evasive20:error] [pid 11185:tid 281872677048608] [client 10.0.0.10:40069] client denied by server configuration: /var/www/html/ |