我遇到了一些麻烦,因为 ModSecurity 反复出现“无法删除集合”错误消息(请参阅此讨论@GitHub在某些情况下)。在讨论这个错误时,经常有人提出安全集合超时指令可能会产生一些影响。阅读文档我只了解这个指令:
指定收集超时。默认值为 3600 秒。
但是,我不太明白“收集超时”是什么意思。有人能给我解释一下这个设置的作用吗?
提前谢谢了。
答案1
如果集合记录在那时没有更新,那么它将被标记为删除并且在某个时间点被垃圾收集。
根据规则的编写方式,ModSecurity 可以在超时之前不断更新收集记录,因此它永远不会被标记为过期。
您可以添加一条新规则来使非常旧的记录过期。Ivan Ristic 在第 8 章的 Mod Security 手册中讨论了这一点,并给出了几个检测非常旧记录的示例规则,其中包括 Brian Rectanus 的这条规则(请注意,Id 已成为强制性规则,因此如果您想在现实生活中使用此规则,则需要添加):
# Detect very old IP records
SecAction "phase:5,log,pass,chain,\
msg:'IP record older than 24 hours',\
setvar:tx.exp=%{TIME_EPOCH},\
setvar:tx.exp=-%{IP.CREATE_TIME}"
SecRule TX:exp "@gt 86400"
此示例可以更新为自动删除旧记录而不进行日志记录,只需更改为以下内容:
# Delete very old IP records
SecAction "id:12345,phase:5,nolog,pass,chain,\
setvar:tx.exp=%{TIME_EPOCH},\
setvar:tx.exp=-%{IP.CREATE_TIME}"
SecRule TX:exp "@gt 86400" "setvar:!IP.KEY"
再说了,您的链接可能确实是 ModSecurity 中的一个错误,过期的项目没有被清除,在这种情况下上述方法可能没有帮助......