Fail2ban 0.9 引入了数据库存储,以便在重启时保存禁令。但我无法找出其实际工作原理。
有dbpurgeage
一个参数控制旧禁令的生命周期,默认为 24 小时。据我从代码研究中看到,fail2ban 会将禁令保存到数据库中,其时间timeofban
等于禁令保存的时间。然后,dbpurgeage
它会在每个时间段内删除所有带有的禁令timeofban < MyTime.time() - self._purgeAge
,换句话说,删除所有存储时间超过 24 小时的禁令。
但是如果某个 IP 被封禁一个月怎么办?这是否意味着dbpurgeage = 86400
24 小时后重启后我将失去所有超过 24 小时的封禁?
我只是希望,无论如何,我的所有永久禁令都能保留。
答案1
Netfilter 规则在重启后不会保留,因此 Fail2ban 0.9 会在其数据库中记录禁令,并在启动时恢复禁令;但是,它只会记住每个禁令清除秒。如果您重新启动系统的时间超过清除特定禁令实施几秒钟后,该禁令将不是得到恢復。
此行为与禁令期限无关。如果 Fail2ban 忘记恢复禁令,即使您实施了为期一个月的禁令也没关系。如果您的系统在禁令期间没有重新启动,这不是问题,但如果您想绝对确保不会因重新启动而丢失禁令,则必须增加dbpurgeage
。我不确定是否有一种简单的方法可以完全禁用清除。