使用ModSecurity进行日常访问控制

时间:2014-08-07 11:45:17

标签: apache2 apache2.2 mod-security

我想配置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,并清除所有用户的存储变量。遗憾的是,没有关于值存储位置以及如何修改它们的文档。

有没有办法可以为用户访问存储的集合以允许清除变量?

1 个答案:

答案 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

让我知道它是如何运作的。