让 Fail2Ban 每隔 X 分钟检查一次 findtime

让 Fail2Ban 每隔 X 分钟检查一次 findtime

我已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 = 3600fail2ban每 10 分钟检查一次?

答案1

正如迈克尔·汉普顿在几条评论中提到的那样,反应时间,检查日志的频率fail2ban与参数无关findtimefail2ban预计每秒读取一次新的日志数据(这取决于您的计算机负载,但它应该非常快,因为在大多数情况下,新的日志数据仍将位于内存中,在内核缓冲区中。)

定义findtime=...检查多远的日志。过滤器针对日期在 和 之间的输入进行检查now - findtimenow如果过滤器在该时间段(到)内找到maxretry或更多行匹配的日志(不计算那些也匹配 的日志) ,则它会发出操作。ignoreregexnow - findtimenowban

  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>

相关内容