fail2ban 的数据库太大(超过 500mb)。如何将其调整到合理的大小?

fail2ban 的数据库太大(超过 500mb)。如何将其调整到合理的大小?

最近我的备份开始出现故障,我追踪到问题出在文件上/var/lib/fail2ban/fail2ban.sqlite3。它超过 500mb。我不确定它是随着时间的推移而增长的,还是最近才出现的。

我怎样才能将其调整到合理的大小并保持该大小?(为了达到这个目的,我们假设其大小在 500mb 以下。)

答案1

dbpurgeage中有一个参数fail2ban.conf,它指示在数据库中保留多少天的数据。默认值为一天(1d),因此请尝试将其减少到几个小时:

dbpurgeage = 8h

此设置与以下内容相结合:长度超过findtime是没有意义的。findtimedbpurgeage

编辑(2021):以下注释在撰写本文时是正确的。然而,现在看看新生事物回答而是:fail2ban 0.11.x,在 Linux 发行版中可用(例如Debian 11 及更高版本Ubuntu 20.04 及更高版本然后,Fedora 33 及更高版本),尊重dbpurgeage设定。

过时的说明: 通过观察我自己失败2ban数据库,该dbpurgeage设置似乎不起作用。因此,唯一的解决方案是手动删除条目。例如,为了删除去年的条目,请运行:

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 \
  "DELETE FROM bans WHERE DATE(timeofban, 'unixepoch') < '2020-01-01'; VACUUM;"

(这sqlite3可执行文件通常位于同名包中)。

似乎没有办法在VACUUM没有 sqlite在同一目录中执行数据库的复制。但是,您可以在执行操作之前将文件复制到另一个文件系统,然后再复制回较小的数据库。

答案2

您可以更新到 0.11.x(其中包含执行清除的代码),然后删除庞大的数据库,然后重新启动 fail2ban。它将重新创建数据库。这是对大多数人来说最简单的解决方案,没有任何缺点。

虽然 fail2ban 0.11.x 实际上包含清除旧条目的代码(旧版本没有!),但它没有VACUUM。因此,另一个选择是等待 fail2ban 清除旧条目(每小时发生一次)并执行手动sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "VACUUM;"。如果没有,VACUUM数据库文件将保持其大小。

答案3

sudo /etc/init.d/fail2ban stop

sudo rm -rf /var/lib/fail2ban

sudo /etc/init.d/fail2ban start

sudo reboot

为我解决了所有问题。重启后检查

df -h

我有 25gb 的 sqlite 文件,内存占用了 40gb 的 94%

答案4

在减少日志时,我最终选择了一条替代路线。

因为我制作了自己的代码,使用这些简单的规则总结了 IP 地址。

给定一个 IP 范围:如果超过 25% 的 IP 在 Fail2ban jails 中列出,那么我将删除单个 IP 并阻止整个范围。

然后,我将检查越来越大的 IP 范围,如果仍然有至少 25% 的 IP 属于阻止范围,在这种情况下阻止范围会变得更大。

我使用自定义二叉搜索树作为我的解决方案,因为它使用 IP 地址搜索树来确定是否可以减少树。

计算搜索范围的数学运算需要一点技巧,但这基本上就是我最终阻止 2 家中国 ISP、1 家伊朗 ISP 和 1 家俄罗斯 ISP 的原因。

并且由于有屡次违规者,因此没有计时器可以将其从阻止名单中剔除。

相关内容