我在一个负载平衡的设置中使用一个IP集合,因此我希望mod_security在x-forwarded的头部而不是REMOTE_ADDR上执行。 这是我的规则:
SecAction "phase:1,nolog,pass,initcol:IP=%{REQUEST_HEADERS.x-forwarded-for}" SecAction "nolog,phase:1,setvar:IP.hitcount=+1,deprecatevar:IP.hitcount=100/15" SecRule IP:hitcount "@gt 600" "nolog,drop,phase:1,msg:'Possible DoS'"
无论我在IP =后面设置密钥,我通过哪个负载均衡器IP都明显地禁止了每个人。 这是一个错误还是我donig错误? 我甚至硬编码到1.1.1.1的密钥,它仍然在ip.pag文件中设置负载均衡IP。 帮帮我! :]
我发现了这个问题。 我把这个规则放在本地规则文件中,这是最后要设置的东西。 IP收集已经由另一个优先的规则初始化了。
解决的办法是将最上面的一行( initcol中的initcol )移到mod_securityconfiguration的顶部,这样所有对IP集合的引用都使用我设置的x-forwarded-for键,而不是默认的REMOTE_ADDR 。
我希望这可以帮助别人早晨把头发拉出来! :]
我还研究了代理/负载均衡器背后的mod_security问题。 你可以尝试mod_rpaf或mod_extract_forwarded2,所以你不必调整你的规则。