我正在尝试为 Apache 配置 modsecurity 以限制每单位时间对同一资源的请求数:无论请求哪个 IP 地址,每个资源每秒 10 次命中。最好不要阻止额外的调用,而是重定向到给定的页面。
我包含模块并将下一个代码放在 httpd.conf 中:
<LocationMatch "(.*)\.dimg(.*)">
SecDebugLogLevel 9
SecAction phase:2,initcol:resource=%{REQUEST_URI},pass,nolog,id:132
SecRule RESOURCE:COUNT "@gt 10" "phase:2,pause:300,deny,status:503,setenv:RATELIMITED,skip:1,nolog,id:102"
SecAction "phase:2,setvar:resource.count=+1,pass,nolog,id:103"
SecAction "phase:5,deprecatevar:resource.count=10/1,pass,nolog,id:104"
Header always set Retry-After "10" env=RATELIMITED
ErrorDocument 503 "Service Unavailable"
然后我运行压力测试来模拟高负载。但不会阻止额外的请求。来自日志:记录的原始集合变量:resource.count = "0"
因此,SecRule RESOURCE:COUNT "@gt 10" 对任何请求都返回 false。
这里有什么问题?