我想配置ModSecurity,以便每天将对某些资源的访问限制为特定计数。
例如:允许用户“A”下载特定目录中的任何文件,但总下载量不得超过5个。
我使用user
集合跟踪用户访问:
# initialize collection for the user
SecAction "phase:2,id:1,initcol:user=%{REQUEST_HEADERS:User},nolog"
# check if the the limit is reached and respond with status 403
SecRule USER:REQUESTS "@gt 5" "phase:2,id:3,deny,status:403"
# increment the request count variable upon success
SecAction phase:4,id:4,setvar:user.requests=+1
现在,我想每天清除requests
集合中的user
字段,以便用户在第二天拥有完整的下载位置。
我知道expirevar
动作,但只允许指定变量被清除之前的秒数,而不是确切的时间。
是否有可能以这种方式使变量失效?
另一个选项是每天同时运行的cron-job,并清除所有用户的存储变量。遗憾的是,没有关于值存储位置以及如何修改它们的文档。
有没有办法可以为用户访问存储的集合以允许清除变量?
答案 0 :(得分:1)
您可以尝试使用ModSecurity的TIME_HOUR变量在一天中的特定时段运行规则。这可以帮助你每天取消该变量。
示例:SecRule TIME_HOUR" @eq 23" "相:1,ID:' 9000080007',SETVAR:user.requests"
请参阅ModSec RefMan @ https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#TIME_HOUR
让我知道它是如何运作的。