![让 Fail2Ban 每隔 X 分钟检查一次 findtime](https://linux22.com/image/691707/%E8%AE%A9%20Fail2Ban%20%E6%AF%8F%E9%9A%94%20X%20%E5%88%86%E9%92%9F%E6%A3%80%E6%9F%A5%E4%B8%80%E6%AC%A1%20findtime.png)
我已fail2ban
设置以下设置:
bantime = 86400
findtime = 600
maxretry = 2
这很棒,因为它可以阻止任何在 10 分钟内进行 3 次暴力破解的 IP。但是,有些 IP 每隔 30 分钟左右就会尝试一次。为了捕获这些 IP,我将设置更改为:
bantime = 86400
findtime = 3600
maxretry = 2
现在,它每小时检查一次,并捕获每 20-30 分钟尝试一次的 IP。但是,现在我的 VPS 无法捕获可能在高级别上进行一小时暴力破解的 IP。
那么,有没有办法设置findtime = 3600
并fail2ban
每 10 分钟检查一次?
答案1
正如迈克尔·汉普顿在几条评论中提到的那样,反应时间,检查日志的频率fail2ban
与参数无关findtime
。fail2ban
预计每秒读取一次新的日志数据(这取决于您的计算机负载,但它应该非常快,因为在大多数情况下,新的日志数据仍将位于内存中,在内核缓冲区中。)
定义findtime=...
检查多远的日志。过滤器针对日期在 和 之间的输入进行检查now - findtime
。now
如果过滤器在该时间段(到)内找到maxretry
或更多行匹配的日志(不计算那些也匹配 的日志) ,则它会发出操作。ignoreregex
now - findtime
now
ban
ancient past | past | ban | future
----------------+--*--*-*--*---*-+-------------------+------------->
| | |
| | +--> now + bantime
| +--> now
+--> now - findtime
有一个显示时间线的图表。记录部分古老的过去将被忽略。now - findtime
和之间的日志now
,部分名为过去的,检查匹配项。如果匹配项数(用星号表示)为,>= maxretry
则从 开始禁止now
。禁令持续到now + bantime
。请注意,一旦 IP 被禁止,则不应在被禁止的端口上发生与同一 IP 的匹配。不过,在其他端口上仍有可能发生这种情况。
因此,增加findtime=...
不会影响反应时间,但是会增加 IP 被相应过滤器禁止的机会。
答案2
您可以添加一个监狱,jail.conf
每 30 分钟检查一次谁在暴力破解。工作配置示例如下:
[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
创建一个文件fail2ban-ssh.conf
并将其放入filter.d
您想要的内容中,例如:
[Definition]
failregex = fail2ban.actions: WARNING \[ssh\] Unban <HOST>