Denyhosts vs fail2ban vs iptables-防止暴力登录的最佳方法?

spi*_*ech 65 iptables brute-force-attacks denyhosts fail2ban

我正在设置 LAMP 服务器,需要阻止 SSH/FTP/等。成功的蛮力登录尝试。我已经看到了许多关于 denyhosts 和 fail2ban 的建议,但很少对两者进行比较。我还读到 IPTables 规则可以填充相同的功能。

为什么我会选择其中一种方法而不是另一种方法?serverfault 上的人如何处理这个问题?

小智 55

IIRC,DenyHosts 只会监视您的 SSH 服务。如果您还需要它来保护其他服务,Fail2ban 绝对是更好的选择。如果您愿意调整其配置,它可以配置为观看几乎任何服务,但这应该不是必需的,因为新版本的 Fail2ban 包括适用于许多流行服务器守护程序的规则集。在简单的 iptables 速率限制上使用 fail2ban 具有在指定时间内完全阻止攻击者的优势,而不是简单地降低他攻击您服务器的速度。我已经在许多生产服务器上使用了fail2ban 并取得了很好的效果,并且自从我开始使用它以来,从未见过其中一台服务器遭到蛮力攻击。

  • 请注意,DenyHosts 实际上会阻止其他服务 - 主要区别在于 fail2ban 使用 iptables 而 DenyHosts 使用 hosts.deny,某些服务不查看主机文件,例如 Apache。 (3认同)

Dre*_*ury 22

防止暴力登录的最佳方法?

首先不要让他们进入您的机器!有很多方法可以在暴力尝试到达您的主机之前,甚至在 SSH 级别阻止它们。

话虽如此,使用fail2ban之类的东西保护您的操作系统是一个好主意。Fail2ban 与 DenyHosts 略有不同,尽管它们确实在相同的空间中运行。Fail2ban 使用 iptables。

http://en.wikipedia.org/wiki/Fail2ban

Fail2ban 类似于 DenyHosts ...但与专注于 SSH 的 DenyHosts 不同,fail2ban 可以配置为监控任何将登录尝试写入日志文件的服务,而不是仅使用 /etc/hosts.deny 来阻止 IP 地址/主机,fail2ban 可以使用 Netfilter/iptables 和 TCP Wrappers /etc/hosts.deny。

您应该考虑许多重要的安全技术来帮助防止暴力登录:

SSH:

  • 不允许root登录
  • 不允许使用 ssh 密码(使用私钥认证)
  • 不要监听每个接口
  • 为 SSH 创建一个网络接口(例如 eth1),这与您提供请求的接口(例如 eth0)不同
  • 不要使用常见的用户名
  • 使用允许列表,并且只允许需要 SSH 访问的用户
  • 如果您需要 Internet 访问...限制访问一组有限的 IP。一个静态 IP 是理想的,但是将其锁定到 xx0.0/16 比 0.0.0.0/0 更好
  • 如果可能,找到一种无需 Internet 访问即可连接的方法,这样您就可以拒绝 SSH 的所有 Internet 流量(例如,使用 AWS,您可以获得绕过 Internet 的直接连接,这称为 Direct Connect)
  • 使用像fail2ban这样的软件来捕捉任何蛮力攻击
  • 确保操作系统始终是最新的,尤其是安全和 ssh 包

应用:

  • 确保您的应用程序始终是最新的,尤其是安全包
  • 锁定您的应用程序“管理”页面。上面的许多建议也适用于您的应用程序的管理区域。
  • 密码保护您的管理区域,例如用于 Web 控制台的 htpasswd 将投射任何潜在的应用程序漏洞并创建额外的进入障碍
  • 锁定文件权限。“上传文件夹”因成为各种令人讨厌的东西的入口点而臭名昭著。
  • 考虑将您的应用程序置于私有网络之后,并且只公开您的前端负载均衡器和 Jumpbox(这是 AWS 中使用 VPC 的典型设置)

  • 您能否详细说明一下“在暴力尝试到达您的主机之前,甚至在 SSH 级别上,有很多方法可以阻止它们”。如果您对无法控制外部网络的托管计算机有任何建议,我特别感兴趣。谢谢! (2认同)

小智 9

另一种保护 SSH 的好方法(我已经使用了十年或更长时间)是在本地使用 iptables 中的最新库(取决于您的发行版)。
基本上它可以用作iptables内置的端口敲击。这将为您省去很多麻烦。只要你可以 tcp 连接(telnet 是一种方式。我也使用过 ssh 客户端并将它们指向端口。任何可以与指定端口号建立 tcp 连接的东西。我在看着你 Putty!)从客户端启动 ssh 连接,您可以使用它。

下面是一个示例,当您通过 4103 端口从主机 telnet 到服务器时,iptables 将向您的主机打开端口 22。然后您可以使用 telnet 到端口 4102 或 4104 来关闭 sed 打开。4102 和 4104 的原因是为了防止打开 22 进行简单的 tcp 扫描。只有到端口 4103 的 tcp connect(telnet) 才能允许您进入。

享受!

哦,我喜欢Fail2Ban。更灵活,我喜欢禁令发生在 iptables 而不是 tcpwrappers。

SSH 敲门

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name SSH -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4102 -m recent --name SSH --remove -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4103 -m recent --name SSH --set -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4104 -m recent --name SSH --remove -j DROP
Run Code Online (Sandbox Code Playgroud)


Kev*_*ane 8

Fail2ban 和 Denyhosts 之间的另一个区别是 Denyhosts 可以与其他 Denyhosts 用户共享阻止列表。使用Fail2ban,您只能阻止您的服务器以前见过的IP - 使用Denyhosts,如果其他人已经看到,暴力尝试甚至可能永远不会到达您的服务器,并且阻止列表会在攻击者之前下载到您的服务器进入你的电脑。

另一个区别是 Fail2ban 使用 iptables,而 Denyhosts 使用 tcpwrappers。其他人之前已经提到过这种差异,但有几个方面值得一提。

iptables 受限于您可以有效阻止的 IP 地址数量。这可能是 Fail2ban 没有共享阻止列表机制的原因之一。

另一个影响是当 iptables 替换为 nftables 时,Fail2ban 可能会停止工作或需要重写。Denyhosts 可能会继续工作。

所以,两者都有优点和缺点。我两个都喜欢;就我自己而言,我使用的是 Denyhosts,因为通常我只想保护 SSH,而且我喜欢共享阻止列表。


Eva*_*son 7

我使用 iptables 规则来限制来自同一 IP 地址的新连接的速率(主要是 SSH,但它也适用于 FTP)。在我看来,相对于“fail2ban”和其他此类工具的优势在于 iptables 路由完全在内核模式下发生,并且不依赖于任何用户模式工具来跟踪/解析日志文件。

数百次失败的 ssh 登录

如果你能做到,限制可以访问相关协议的源地址显然也会有所帮助。

使用 SSH,您确实应该使用证书身份验证并且无论如何都不要接受密码。


Xeo*_*oss 5

关于Fail2Ban 需要注意的一件事是,它似乎比DenyHosts 使用了大约10MB 的内存。因此,如果您使用的是 128MB VPS,您可能需要研究一下。此外,开箱即用的 fail2ban 仅在 SSH 上设置,这意味着无需更改配置 - DenyHosts 在更少的内存中执行相同的操作。

  • 尝试将“ulimit -s 256”附加到 /etc/default/fail2ban。在我的系统上降低了 10MB。 (2认同)