首页 > 解决方案 > Apache modsecurity:限制每秒每个资源的请求

问题描述

我正在尝试为 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。

这里有什么问题?

标签: apachemod-security2

解决方案


推荐阅读