mod_evasive: настройка и тестирование модуля защиты Apache
Кратко
mod_evasive — лёгкий модуль для Apache, который ограничивает частые запросы от одного клиента и помогает защититься от brute-force и простых DoS-атак. В этом руководстве — установка, конфигурация, тестирование, чек-листы для ролей, сценарии реагирования и советы по безопасности и интеграции.
Быстрые ссылки
- Установка mod_evasive
- Настройка параметров блокировки
- Белый список известных IP
- Как это работает
- Тестирование установки
- Контрольные списки и playbook
- Когда mod_evasive может не помочь
- Альтернативы и дополнительные меры
- Резюме

mod_evasive — модуль Apache, который помогает защитить сервер от brute-force и простой DoS-активности. Он выступает как страховочная сетка, блокируя клиентов, которые генерируют слишком много запросов за короткий промежуток времени, до того как это начнёт существенно снижать производительность сервера.
Модуль предоставляет параметры конфигурации, позволяющие задать число параллельных запросов от клиента за фиксированный интервал. Дополнительные запросы приводят к временной блокировке клиента.
Установка mod_evasive
Шаги установки зависят от вашей ОС и версии Apache. Для наиболее распространённой комбинации Apache 2.4 на Debian-совместимых системах используйте команды ниже. В репозитории проекта также есть инструкции по сборке из исходников.
apt updateapt install libapache2-mod-evasiveУстановка через apt обычно автоматически включает модуль.
Проверить, что модуль активен, можно с помощью утилиты apachectl:
apachectl -M | grep evasiveЕсли модуль активен, вы увидите его имя в выводе.
Важно: на системах с другой системой управления пакетами используйте эквиваленты (yum, dnf, zypper) или сборку из исходников.
Настройка параметров блокировки
Файл конфигурации mod_evasive обычно находится в /etc/apache2/mods-enabled/evasive.conf или в каталоге mods-available с символической ссылкой в mods-enabled. Формат тот же, что и в других конфигурациях Apache. Полная справка — в документации mod_evasive.
Пример конфигурации с часто используемыми настройками:
DOSPageCount 5
DOSSiteCount 10
DOSPageInterval 1
DOSSiteInterval 2
DOSBlockingPeriod 300
DOSEmailNotify user@example.com
Пояснения к основным параметрам:
- DOSPageCount — число запросов к одному URI за DOSPageInterval секунд, после которого запросы по этому URI начнут блокироваться.
- DOSSiteCount — число различных URI с одного IP за DOSSiteInterval секунд, после превышения которого IP будет блокироваться для всего сайта.
- DOSPageInterval и DOSSiteInterval — интервалы измерения в секундах.
- DOSBlockingPeriod — время блокировки в секундах. В примере это 300 секунд (5 минут).
- DOSEmailNotify — адрес, на который отправляются уведомления о блокировках.
mod_evasive различает запросы к конкретной странице (URI) и запросы в рамках сайта. В примере клиент, который запрашивает один и тот же URI 5 раз за 1 секунду, попадёт под блокировку; также будет блокирован клиент, который запрашивает более 10 различных URI за 2 секунды.
mod_evasive также умеет запускать произвольную системную команду при блокировке. Это удобно для интеграции с вашей системой учёта или брандмауэром — например, чтобы добавить IP в локальный чёрный список или записать событие в базу данных. Для этого используется DOSSystemCommand с плейсхолдером %s для IP:
DOSSystemCommand /app/blacklisted_ip.php --ip=%sПримеры реального использования DOSSystemCommand:
# добавить в iptables (требуется скрипт с правами на изменение правил)
DOSSystemCommand /usr/local/bin/add-to-iptables.sh %s
# записать в лог через logger
DOSSystemCommand /bin/logger -t mod_evasive "Blocked IP %s"Важно: скрипты, запускаемые через DOSSystemCommand, должны быть безопасны и иметь минимально необходимые привилегии.
Белый список известных IP
Во время разработки и тестирования полезно исключать доверенные адреса из ограничений. Для этого используется параметр DOSWhiteList — указывайте отдельные IP или диапазоны.
DOSWhiteList 127.0.0.1DOSWhiteList 192.168.0.*IP из белого списка не подлежат ограничениям модулем, поэтому используйте этот механизм осторожно и не добавляйте туда публичные адреса, которым вы не доверяете.
Как это работает
mod_evasive ведёт в памяти хеш-таблицу IP-адресов и URI, которые запрашивали эти IP. IP и URI хешируются для формирования ключа, по которому модуль определяет, повторялся ли запрос ранее.
Если для некоторого IP частота обращений к конкретному URI или к набору URI превышает заданный предел, модуль возвращает клиенту HTTP 403 и помещает IP в кратковременный «чёрный список». Это минимизирует расход ресурсов сервера, так как на такие запросы возвращается только код 403, без выполнения тяжёлых обработчиков.
После достижения предела клиент должен дождаться завершения DOSBlockingPeriod, чтобы снова получить успешный ответ. Повторные попытки в период блокировки обычно приводят к продлению блокировки.
Модуль оказывает некоторое влияние на производительность на очень нагруженных серверах, поскольку требуется хранить и проверять записи о каждом запросе. На занятом сервере с достаточным объёмом памяти увеличьте DOSHashTableSize, чтобы расширить размер таблицы в памяти и уменьшить время на поиск ключей:
DOSHashTableSize 32768Если память ограничена, выбирайте компромисс между скоростью обработки и доступной памятью.
Тестирование установки
Самый надёжный способ протестировать mod_evasive — короткий, контролируемый поток запросов, чтобы увидеть, как сервер запрещает клиента и (при настройке) посылает уведомление.
Инструмент ab (ApacheBench) можно использовать для коротких нагрузочных тестов:
ab -n 1000 -c 50 http://your-server/your-pathПараметры:
- -n — общее количество запросов;
- -c — одновременно открываемые соединения.
Пример выше отправляет 1000 запросов по 50 одновременных соединений. Подберите значения под вашу конфигурацию и помните, что ab может вызвать реальную нагрузку на сервер.
Важно: запускать такие тесты только на тестовом окружении или после предупреждения команды — вы можете случайно вызвать отказ в обслуживании.
Контрольные списки по ролям
Ниже — минимальные действия для разных ролей в команде при настройке и эксплуатации mod_evasive.
Администратор (sysadmin):
- Установить пакет и включить модуль.
- Проверить конфигурацию Apache и перезапустить сервис безопасным способом.
- Настроить DOSEmailNotify и/или DOSSystemCommand с безопасными скриптами.
- Настроить логирование и ротацию логов.
- Проверять использование памяти и при необходимости увеличить DOSHashTableSize.
Разработчик (developer):
- Убедиться, что автоматические тесты и CI не попадают в белый список по ошибке.
- По возможности уменьшить количество повторяющихся запросов в тестах.
- Сообщать о ложных срабатываниях (false positives) для корректировки порогов.
Инженер по безопасности (security engineer):
- Сопоставить правила mod_evasive с политиками брандмауэра и WAF.
- Настроить интеграцию с SIEM через DOSSystemCommand или логирование.
- Проверять случаи массовых блокировок и анализировать их природу.
Playbook реагирования на инцидент
- Обнаружение: уведомление по email или запись в мониторинг о новой массовой блокировке.
- Быстрая проверка: анализ логов mod_evasive и access.log за период блокировки.
- Определение характера: локальная (один IP) или распределённая атака (много IP).
- Действие при ложных срабатываниях: добавить IP в DOSWhiteList временно, скорректировать DOSPageCount/DOSSiteCount.
- Действие при реальной атаке: усилить защиту в большинстве слоёв — включить firewall, rate limiting на балансировщике, подключить WAF.
- Пост-инцидентный анализ: собрать данные, определить вектор, обновить правила и playbook.
- Откат изменений: убрать временные белые списки, вернуть значения порогов к постоянным.
Критерии успешного реагирования:
- Восстановлена работоспособность критичных сервисов без необоснованных долгосрочных блокировок.
- Ложные срабатывания минимизированы после корректировок.
- Данные инцидента сохранены для дальнейшего анализа.
Когда mod_evasive может не помочь
mod_evasive полезен для простых сценариев, но у него есть ограничения:
- Распределённые атаки (DDoS) с большого количества IP: если атакующие распределяют трафик по тысячам адресов, лимиты по одному IP не окажут существенного эффекта.
- Атаки на приложение с уникальными URI: если каждый запрос использует уникальные пути, DOSPageCount не сработает.
- Атаки на сетевом уровне (SYN-флуд, уровень L3/L4): mod_evasive работает на уровне HTTP и не защитит от низкоуровневых сетевых атак.
- Массовые легитимные запросы (например, поисковые роботы, CDN-переадресации): при неправильно настроенном белом списке можно получить ложные блокировки.
Если вы ожидаете крупные DDoS-риски, комбинируйте mod_evasive с сетевыми решениями, облачным WAF и балансировщиками, которые поддерживают глобальный rate limiting.
Альтернативы и дополнительные меры
- Fail2ban: реагирует на паттерны в логах и может добавлять правила в брандмауэр.
- ModSecurity (WAF): фильтрация на уровне правил приложения, работа с сигнатурами и специфическими атаками на HTTP.
- Rate limiting на балансировщике (Nginx, HAProxy, cloud load balancer).
- Облачные WAF/CDN (Cloudflare, AWS Shield, Akamai) для защиты от крупных распределённых атак.
- Сетевые фильтры и ACL/blackhole routing на уровне провайдера для DDoS.
Комбинация нескольких слоёв защиты (defense-in-depth) даёт наилучший эффект.
Шпаргалка конфигураций
Рекомендуемые стартовые варианты — в зависимости от профиля трафика:
- Консервативный (маленький сайт): DOSPageCount 5, DOSPageInterval 1, DOSSiteCount 10, DOSSiteInterval 2, DOSBlockingPeriod 300.
- Агрессивный (API с частыми запросами): DOSPageCount 20, DOSPageInterval 1, DOSSiteCount 40, DOSSiteInterval 2, DOSBlockingPeriod 120.
- Для тестовых окружений: добавлять свои CI/CD и локальные IP в DOSWhiteList.
Примеры DOSSystemCommand для интеграции:
# добавить в локальный чёрный список через скрипт
DOSSystemCommand /usr/local/sbin/block-ip.sh %sФайл block-ip.sh должен принимать IP как $1 и управлять iptables/nftables с минимальными правами.
Критерии приёмки
- Модуль установлен и активен (apachectl -M показывает модуль).
- После контролируемого теста сервер возвращает 403 при превышении порогов.
- Уведомление по email приходит при блокировке (если DOSEmailNotify настроен).
- DOSSystemCommand корректно вызывается и выполняет ожидаемые действия.
- Отсутствие ложных срабатываний в обычном рабочем трафике в течение наблюдаемого периода.
Безопасность и эксплуатация
- Не запускайте DOSSystemCommand от root без ограничений: используйте скрипты, которые проверяют входные параметры.
- Ограничьте доступ к файлам конфигурации и скриптам привилегиями ОС.
- Настройте ротацию логов и хранение событий блокировок для аудита.
- При интеграции с почтовой подсистемой убедитесь, что MTA настроен безопасно.
Примеры тестовых сценариев
- Ложная тревога: симулируйте трафик от одного IP на фиксированный URI и убедитесь, что 403 появляется только при превышении порога.
- Распределённая нагрузка: с нескольких IP — проверьте, не допускает ли mod_evasive ложного ограничения легитимного пуш-трафика.
- Интеграция DOSSystemCommand: убедитесь, что скрипт получает IP и безопасно его обрабатывает.
Резюме
mod_evasive — простое средство для защиты Apache от избытка запросов от одного клиента и от грубых brute-force/DoS-образных сценариев. Оно не заменяет сетевые и облачные средства защиты для крупных DDoS, но является полезным уровнем в многослойной стратегии безопасности. Настройте параметры под профиль нагрузки, обеспечьте безопасную интеграцию через DOSSystemCommand и используйте белые списки осторожно.
Важно: тестируйте на стенде и контролируйте последствия изменений, чтобы не допустить отказа в обслуживании легитимных пользователей.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента