ModSecurity Ratelimiting Ошибка входа в систему

Я пытаюсь создать правило, чтобы ограничить количество ошибок аутентификации xmlrpc.php до 5 в минуту. Правила ModSecurity, которые у меня есть до сих пор:

SecAction phase:1,nolog,pass,initcol:IP=%{REMOTE_ADDR},id:690010
<LocationMatch "/xmlrpc.php">
SecRule IP:COUNTXYZ "@gt 5" "phase:1,deny,status:403,log,msg:'WAF Rules : IP address blocked - more than 5 xmlrpc errors in 60 seconds',id:690011"
SecRule RESPONSE_BODY "faultCode" "phase:4,pass,nolog,setvar:ip.countxyz=+1,deprecatevar:ip.countxyz=1/60,id:690012"
</LocationMatch>

Несмотря на неоднократные обращения к сайту на этом сервере с использованием:

curl -d '<?xml version="1.0"?> <methodCall> <methodName>wp.getUsersBlogs</methodName> <params> <param> <value>username</value> </param> <param> <value>password</value> </param> </params> </methodCall>' http://victimsite/xmlrpc.php

который в каждом случае отправляет обратно тело, содержащее текст «faultCode», но никогда не блокирует запросы, даже если каждый запрос поступает с фиксированного IP-адреса. Есть ли проблема в синтаксисе моих правил, или я могу это отладить?


person Santrix    schedule 11.08.2014    source источник


Ответы (2)


  • Вам не нужна косая черта в Locationmatch "/xmlrpc.php"
  • Вам, вероятно, понадобится «SecResponseBodyAccess On» в блоке Location или эквивалент в цепочке, прежде чем пытаться проверить RESPONSE_BODY.
person Hrvoje Špoljar    schedule 14.08.2014

Правильное решение оказалось:

SecAction phase:1,nolog,pass,initcol:IP=%{REMOTE_ADDR},id:690010     
<LocationMatch "/xmlrpc(\.php)?$">
SecAction phase:2,nolog,pass,deprecatevar:ip.count_a=1/20,id:690010
SecRule IP:COUNT_A "@gt 5" "phase:2,deny,status:403,log,msg:'WAF Rules : XMLRPC - Ratelimited to one call in 20 seconds',id:690012"
SecRule RESPONSE_BODY "fault(Code|String)" "phase:4,pass,nolog,setvar:ip.count_a=+1,id:690013"
</LocationMatch>
person Santrix    schedule 14.08.2014