获取Fail2Ban检查findtime每X分钟

我有fail2ban设置与以下设置:

 bantime = 86400 findtime = 600 maxretry = 2 

这很好,因为它阻止任何在10分钟内暴力强制3次的IP。 但是,每隔30分钟就有一些IP正在尝试。 要捕获这些IP,我将设置更改为:

 bantime = 86400 findtime = 3600 maxretry = 2 

现在,它每隔一小时检查一次,并捕捉那些每20-30分钟尝试一次的IP。 然而,现在我的VPS并没有赶上那些可能会在一个小时内强行逼人的IP。

因此,有什么办法可以设置findtime = 3600 ,每10分钟还有fail2ban检查吗?

正如迈克尔·汉普顿在一些评论中提到的, 反应时间 , fail2ban检查日志的findtime ,与findtime参数无关。 fail2ban应该每隔一秒左右读一次新的日志数据(这取决于你的计算机负载,但是它应该是非常快的,因为在大多数情况下,新的日志数据仍然在内存缓冲区中)。

findtime=...定义了多久后面的日志被检查。 filter是针对从now - findtimenow - findtime和之间有一个date的input进行检查的。 如果filter在该时间段内( now - findtime时间)发现maxretry或更多行日志匹配(不包括那些也与ignoreregex匹配的ignoreregex ),则它发出ban行为。

  ancient past | past | ban | future ----------------+--*--*-*--*---*-+-------------------+-------------> | | | | | +--> now + bantime | +--> now +--> now - findtime 

有一个显示时间表的图表。 日志过去的一部分被忽略。 之间的日志now - findtimenow ,部分名为过去 ,检查匹配。 如果匹配的数量(以星号表示) >= maxretry那么now就开始禁止。 禁令持续到now + bantime 。 请注意,一旦IP被禁止,具有相同IP的命中不应该发生在被禁止的端口上。 但是,其他港口仍然可能发生这种情况。

所以通过增加findtime=...你不会影响反应时间,但是,你增加了一个IP被相应的filter禁止的机会。

您可以在jail.conf添加一个监狱,以便每30分钟检查一次强制执行的操作。 工作configuration的例子是:

 [ssh] # first jail: check every 10 minutes enabled = true port = ssh filter = sshd action = %(action_)s logpath = /var/log/auth.log maxretry = 3 bantime = 600 [fail2ban-ssh] # second jail: check every hour enabled = true filter = fail2ban-ssh logpath = /var/log/fail2ban.log action = iptables-multiport maxretry = 3 findtime = 3600 bantime = 86400 # ban for a day 

创build一个文件fail2ban-ssh.conf并把它放在filter.d以匹配你想要的,例如:

 [Definition] failregex = fail2ban.actions: WARNING \[ssh\] Unban <HOST>