Мы используем mod_security, и в настоящее время у нас есть проблемы с некоторыми ботами.
Я хочу заблокировать IP-адрес, который посещал 404 страницы более 10 раз в минуту.
Как это может быть сделано? Как я могу опросить коды возврата 404?
Как я могу подсчитать коды возврата ошибки 404 на этапе 3?
RESPONSE_STATUS может не работать должным образом во встроенном режиме, поскольку Apache иногда обрабатывает определенные запросы по-другому и без вызова ModSecurity (все другие модули).
Как я могу каждый раз получать RESPONSE_STATUS? фаза 5?
Mod_security уже должен поставляться с некоторыми скриптами, предоставленными проектом OWASP, которые блокируют robots. Вы их проверяли? Вам нужно будет включить modsecurity_crs_35_bad_robots.conf. Вы можете скачать файл с сайта проекта OWASP:
https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
Там же можно найти инструкции.
Из README:
== base_rules/modsecurity_crs_35_bad_robots.conf == Detection of Malicious Robots
- Unique request attributes: User-Agent header, URL, Headers
- RBL Check of IP addresses
- Detection of security scanners
- Blocking can confuse security testing software (WAFW00f)
Подсказка к основному набору правил хороша, но фактическое правило, которое вы должны использовать,
modsecurity_crs_11_brute_force.conf
Это правило специально для вашего случая: защитить определенный URL от брутфорса и заблокировать IP, который инициирует эту атаку методом грубой силы. Вы можете настроить это правило в установочном файле
modsecurity_crs_10_setup.conf
В этом установочном файле измените переменную tx.brute_force_protected_urls
в правиле 900014 с URL-адресами, которые вы хотите защитить:
SecAction \
"id:'900014', \
phase:1, \
t:none, \
setvar:'tx.brute_force_protected_urls=#/error/404.html#, #/error/403.html#', \
setvar:'tx.brute_force_burst_time_slice=60', \
setvar:'tx.brute_force_counter_threshold=2', \
setvar:'tx.brute_force_block_timeout=300', \
nolog, \
pass"
Переменная tx.brute_force_burst_time_slice
определяет количество времени в секундах в пределах этого определенного порога, который должен быть превышен. Насколько я понимаю ваш вопрос, используйте 60. Переменная tx.brute_force_block_timeout
определяет время блокировки IP брутфорсера. Переменная tx.brute_force_counter_threshold
немного сложно. Он определяет, как часто вы можете получить доступ к URL-адресу, прежде чем вас заблокируют. Это не точное число, но со значением 2 или 3 вы должны получить неплохой результат для вашего правила блокировки после 10-запроса.