我有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 - findtime
到now - findtime
和之间有一个date的input进行检查的。 如果filter在该时间段内( now - findtime
时间)发现maxretry
或更多行日志匹配(不包括那些也与ignoreregex
匹配的ignoreregex
),则它发出ban
行为。
ancient past | past | ban | future ----------------+--*--*-*--*---*-+-------------------+-------------> | | | | | +--> now + bantime | +--> now +--> now - findtime
有一个显示时间表的图表。 日志过去的一部分被忽略。 之间的日志now - findtime
和now
,部分名为过去 ,检查匹配。 如果匹配的数量(以星号表示) >= 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>