fail2ban 和 iptables 规则泛滥(导致带宽不足)

fail2ban 和 iptables 规则泛滥(导致带宽不足)

我注意到在过去 6 个月里,这种模式在我的服务器上发生了几次:

  • 首先,fail2ban检测来自机器人的许多 SSH 尝试,并成功禁止它们。事实上/etc/fail2ban/jail.conf我有:

    [ssh]
    enabled  = true
    port     = ssh
    filter   = sshd
    logpath  = /var/log/auth.log
    maxretry = 3
    findtime = 86400
    bantime = 2678400
    
  • 然后,结果,iptables很多很多规则,就我而言,我有~ 4000 条规则像这样:

    -D fail2ban-ssh -s 1.2.3.4/32 -j DROP
    -D fail2ban-ssh -s 5.6.7.8/32 -j DROP
    ...
    
  • 最后,该服务器的整个互联网连接是非常慢(在使用 SFTP 将文件下载到本地计算机时,我注意到只有 ~ 160 KB/秒的带宽),可能是因为所有这些规则。

这暂时解决了:

iptables -S |grep DROP| sed 's/-A/-D/' >rules
cat rules | while read line; do iptables $line; done
iptables -S |wc -l     # ~100 rules (instead of ~4000), good, back to normal!

执行此操作几秒钟后,我到本地计算机的带宽恢复正常,即超过 5 MB/秒,这还可以。

但几周后它会再次发生,因为它已经发生过几次了。

如何避免这个长期问题?

答案1

ipset旨在解决这个问题。您可以创建一组 IP 或子网:

ipset create bannedv4 hash:net family ipv4 comment
ipset create bannedv6 hash:net family ipv6 comment

添加一条 iptables 规则,如下所示:

iptables -A INPUT -m set --match-set bannedv4 src -j DROP
ip6tables -A INPUT -m set --match-set bannedv6 src -j DROP

然后您可以将许多条目添加到禁止集中。我不知道如何配置fail2ban来使用它。对我来说,已经定义了 ipset 操作,/etc/fail2ban/action.d但它可能是特定于发行版的。

ipset add bannedv4 1.2.3.4/16 comment "SSH bot"
ipset add bannedv6 64:ff9b::1.2.3.4/112 comment "SSH bot"

也可能存在过期条目。当您创建该组时,只需添加timeout 604800仅禁止它们一周的选项。您可以通过将相同的选项传递给 来覆盖此默认超时ipset add。您可能还想保存初始化脚本中的设置,就像保存 iptables 规则一样。请注意,您必须恢复 iptables 规则之前的设置。

ipset save > /var/lib/firewall/ipset
ipset restore < /var/lib/firewall/ipset

答案2

正如已经正确指出的那样,ipset它更适合大型列表。
这是可能的配置 (fail2ban >= v.0.10) 来jail.local指定所有监狱的默认操作:

[DEFAULT]
banaction = iptables-ipset-proto6
banaction_allports = iptables-ipset-proto6-allports

至于bantime2678400(31天?!) - 仅仅在3次失败后就直接禁止这么长的时间有点太重了,至少不推荐。
如果您有fail2ban v.0.11,您可以使用增量bantime功能 - 请参阅https://stackoverflow.com/a/66443690/7161854例如。

相关内容