我们在很多服务器上使用 fail2ban 来阻止针对 SSH、SMTP、IMAP、SIP 等服务的暴力破解尝试,效果非常好。但是,在某些常见情况下,我们会收到很多误报。
我们的客户大多是小型企业。因此,他们的所有用户都在 NAT 防火墙后面的本地 LAN 上。因此,10 个用户使用他们的电子邮件帐户进行身份验证很常见。但是,如果某个用户多次输入错误凭据,整个办公室(来自一个公共 IP)就会被我们禁止访问。
我希望 fail2ban 的流程能够更智能一些。类似于“如果我们看到来自此 IP 地址的身份验证成功,那么我们就将其列入白名单,因为将来的登录失败几乎肯定是真正的失败,而不是暴力攻击。”
我们有些客户的办公室有静态 IP,有些客户有动态 IP。手动将动态 IP 列入白名单显然行不通。但即使对于静态 IP,尝试手动管理它们也是一场噩梦。由于暴力破解 IP 会被禁止一段时间,因此一旦我们检测到该 IP 的身份验证尝试成功,最好自动将其列入白名单一段时间,这样它就不会被禁止。
这可以通过一些巧妙的 fail2ban 规则来实现吗?
答案1
如果我们看到来自该 IP 地址的身份验证成功,那么我们就将其列入白名单,因为将来的登录失败几乎肯定是真正的失败,而不是暴力攻击。
尽管它可能可以防止一些误报,但由于几个原因,这种做法值得怀疑。主要有以下几点:
- 在这样的子网中,单台受感染的 PC 可以不受阻碍地进行暴力破解和其它操作,并且如果将 IP/子网添加到忽略列表,它将被忽略;
- 它打开了一个向量,可能允许提升某些权限较少的用户的权限或窃取其他用户的帐户 - 某些拥有有效帐户的用户可以尝试使用另一个帐户登录,然后简单地成功登录(使用他自己的帐户),因此准重置失败尝试的次数,或者更糟的是将 IP /子网添加到白名单中。
因此至少必须考虑用户名,请参阅[github]/fail2ban#PR-1243。
但你可以尝试使用来实现这个想法ignorecommand
。下面是此类实现的一个示例 -[github]/fail2ban#2013,评论-426940189。
另请注意,fail2ban 能够禁止基本上一切,因此在这种情况下,应该使用<ip>
和的组合作为禁止标识符。 或者,也可以将 NAT 后面的“代理”地址与客户的真实 IP 地址一起使用。<F-USER>
无论如何,无论您如何实施,请确保您真正了解您所做的事情以及所涉及的风险以及避免这些风险的预防措施。