大型fail2ban数据库,正常吗?

大型fail2ban数据库,正常吗?

我的服务器上的fail2ban 数据库非常大(420MB)。

fail2ban 日志非常繁忙(每两秒就有一个“过滤器”条目),但iptables仅显示一些被禁止的地址。

dbpurgeage 为 86400 秒(24 小时)

这个大小与活动一致还是有什么事情发生?

我假设如果我停止/擦除数据库/启动,我将恢复到合理的大小,但这不会使活动禁令永久化吗?

答案1

我刚刚在自己的服务器上发现了这个问题。我的dbpurgeage也设置为默认 24 小时,但我的大小fail2ban.sqlite3已增长到 400MB,并且在过去 2 年中被禁止了 800,000 次。

事实证明在 v0.11 之前,fail2ban 实际上没有清除数据库的代码。它被添加到这次提交。在此之前 dbpurgeage 不执行任何操作。


查看数据库中有多少封禁:

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select count(*) from bans"

要查看最旧的数据库条目的年龄:

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select datetime(min(timeofban), 'unixepoch') from bans"

要清理数据库,例如仅保留上周的数据:

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "delete from bans where timeofban < strftime('%s', 'now', '-7 days')"
sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "vacuum"

删除可能需要几分钟的时间,在此期间,如果尝试访问数据库,fail2ban 将被阻止。也许您可能想要小批量删除(首先是超过 2 年的所有内容,然后是 1 年等),以便让fail2ban 有机会在中间运行,并在最后进行清理。

相关内容