我正在尝试为我的 10.5 服务器设置防火墙,但似乎无法让它工作。主要目的是尝试阻止持续的暴力邮件登录尝试。
为此,我安装了 fail2ban,以发现并禁止失败的登录。这在很大程度上是有效的,即提交被禁止的 IP 地址并向我发送电子邮件的机制已经完成。如果我启动终端会话,我会使用以下命令列出数十个 IP 地址:
sudo ipfw list
条目如下:
12345 deny tcp from 123.123.23.123 to any in
但是,这种禁令并不有效——同一个 IP 地址稍后会再次尝试,有时会持续数秒甚至数小时。
当我检查 fail2ban 日志时,它会抱怨(在多次检测到恶意登录尝试之后):
"WARNING [sasl-ipfw] 123.123.123.123 already banned"
我尝试过以不同方式格式化禁令:
12345 deny tcp from 123.123.23.123 to 127.0.0.1 dst-port 25
12345 deny tcp from 123.123.23.123 to 192.168.123.123 dst-port 25
但没有任何效果。我甚至尝试对 Web 服务进行本地网络禁用:
12345 deny tcp from 192.168.123.122 to 192.168.123.123 dst-port 80
但这同样没有任何效果。IPFW 列表中的其他规则似乎是默认的,如下所示:
12300 allow log logamount 1000 tcp from any to any established
12301 allow log logamount 1000 tcp from any to any out
12302 allow log logamount 1000 tcp from any to any dst-port 22 …
列表中还有最后一条规则(我在某处看到过这条规则是无法更改的):
65535 allow ip from any to any
服务器管理应用程序指示防火墙服务正在运行,ipfw 日志中没有“拒绝”列表。fail2ban 修补到 IPFW 的条目不会出现在任何服务器管理条目中,也不会出现在 ipfw.conf 或 ipfw.conf.apple 文件中(因此我不确定它们存储在哪里)。但是当我在终端中输入“ipfw 列表”时,我确实看到了它们,并且它们列在服务器管理中防火墙部分的“活动规则”选项卡中。
感谢您对这个问题的任何帮助。
答案1
看起来您的 fail2ban 脚本使用的规则编号太高了。ipfw 按数字顺序评估规则,第一个适用于给定数据包的规则决定了如何处理它。这意味着编号较低的规则具有更高的优先级。由于 fail2ban“拒绝”规则的编号为 12345,但服务器管理员配置的“允许”规则从 12302 开始,因此至少一些允许规则会覆盖 fail2ban 的拒绝规则。
简单的解决方法:找到 fail2ban 脚本中定义规则编号的位置,然后将其降低到 12200 左右。
顺便说一句,fail2ban 的规则没有添加到配置文件中是正常的,而且可能是好事。这些文件在重新加载防火墙时使用(例如,当您重新启动时),但不一定反映“实时”防火墙状态。如果您愿意,您可以编辑 fail2ban 脚本以将其规则添加到这些文件中并将它们设置为实时状态,但这意味着您的规则集会随着时间的推移而任意增大。在我看来,唯一需要担心这种“永久”禁令的情况是,如果您在很长一段时间内不断看到来自相同 IP 的滥用行为......但我希望这种情况很少见。