Denyhosts 与 fail2ban 与 iptables——防止暴力登录的最佳方法?

Denyhosts 与 fail2ban 与 iptables——防止暴力登录的最佳方法?

我正在设置一个 LAMP 服务器,需要防止 SSH/FTP/等暴力登录尝试成功。我看到过很多关于denyhosts 和fail2ban 的建议,但很少有关于这两者比较的。我还读到 IPTables 规则可以实现相同的功能。

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

答案1

如果我没记错的话,DenyHosts 只会监视您的 SSH 服务。如果您还需要它来保护其他服务,Fail2ban 绝对是更好的选择。如果您愿意调整其配置,它可以配置为监视几乎任何服务,但这不是必需的,因为 Fail2ban 的较新版本包含适用于许多流行服务器守护进程的规则集。使用 fail2ban 而不是简单的 iptables 速率限制具有在指定时间内完全阻止攻击者的优势,而不仅仅是降低攻击者攻击您的服务器的速度。我已经在许多生产服务器上使用了 fail2ban,效果很好,自从我开始使用它以来,从未见过这些服务器被暴力攻击攻破。

答案2

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

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

话虽如此,使用类似 fail2ban 的软件保护您的操作系统是个好主意。Fail2ban 与 DenyHosts 略有不同,尽管它们确实在同一个领域发挥作用。Fail2ban 使用 iptables。

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

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

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

SSH:

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

应用:

  • 确保您的应用程序始终保持最新,特别是安全包
  • 锁定应用程序的“管理”页面。上面的许多建议也适用于应用程序的管理区域。
  • 密码保护您的管理区域,像用于 Web 控制台的 htpasswd 这样的程序将会投射任何潜在的应用程序漏洞,并创建额外的进入障碍
  • 锁定文件权限。“上传文件夹”因是各种恶意内容的入口点而臭名昭著。
  • 考虑将您的应用程序置于私有网络后面,并且仅公开您的前端负载均衡器和跳转箱(这是 AWS 中使用 VPC 的典型设置)

答案3

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

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

享受!

哦,我支持 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

答案4

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

数百次 ssh 登录失败

如果您可以做到这一点,那么限制可以访问相关协议的源地址显然也会有所帮助。

使用 SSH,您确实应该使用证书认证而不是接受密码。

相关内容