Назад | Перейти на главную страницу

modsecurity: блокировать IP-адрес, который посещал 404 страницы более 10 раз в минуту

Мы используем 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-запроса.