我在负载平衡设置中使用 IP 集合,因此我希望 mod_security 对 x-forwarded for 标头而不是 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,这显然会禁止所有人。这是错误还是我做错了什么?我甚至将密钥硬编码为 1.1.1.1,它仍然在 ip.pag 文件中设置负载均衡器 IP。救命!:]
答案1
我找到了问题所在。我把这条规则放在了本地规则文件中,这是最后要设置的内容。IP 集合已被另一条优先的规则初始化。
解决方案是将顶行(带有initcol
in 的行)移至 mod_security 配置的顶部,以便对 IP 集合的所有引用都使用x-forwarded-for
我设置的密钥而不是默认的密钥REMOTE_ADDR
。
我希望这可以让其他人免于一早上拔头发!:]
答案2
我还研究了代理/负载平衡器后面的 mod_security 问题。你可以尝试mod_rpaf或者mod_extract_forwarded2所以你不需要调整你的规则。