我正在设置 LAMP 服务器,需要阻止 SSH/FTP/等。暴力登录尝试成功。我已经看到很多关于拒绝主机和 fail2ban 的建议,但很少对两者进行比较。我还读到 IPTables 规则可以填充相同的功能。
为什么我会选择其中一种方法而不是另一种?serverfault上的人如何处理这个问题?
我正在设置 LAMP 服务器,需要阻止 SSH/FTP/等。暴力登录尝试成功。我已经看到很多关于拒绝主机和 fail2ban 的建议,但很少对两者进行比较。我还读到 IPTables 规则可以填充相同的功能。
为什么我会选择其中一种方法而不是另一种?serverfault上的人如何处理这个问题?
IIRC,DenyHosts 只会监视您的 SSH 服务。如果您还需要它来保护其他服务,Fail2ban 绝对是更好的选择。如果您愿意调整其配置,它几乎可以配置为监视任何服务,但这不是必需的,因为 Fail2ban 的较新版本包含适用于许多流行服务器守护程序的规则集。在简单的 iptables 速率限制上使用 fail2ban 具有在指定时间内完全阻止攻击者的优势,而不是简单地降低攻击者攻击服务器的速度。我已经在许多生产服务器上使用了fail2ban,并取得了很好的效果,并且自从我开始使用它以来,从未见过其中一台服务器遭到暴力攻击。
防止暴力登录的最佳方法?
首先不要让他们进入您的机器!有很多方法可以在暴力尝试到达您的主机之前阻止它们,甚至在 SSH 级别。
话虽如此,使用类似 fail2ban 的东西保护您的操作系统是一个好主意。Fail2ban 与 DenyHosts 略有不同,尽管它们确实在同一个空间中运行。Fail2ban 使用 iptables。
http://en.wikipedia.org/wiki/Fail2ban
您应该考虑一些重要的安全技术来帮助防止暴力登录:
SSH:
应用:
保护 SSH 的另一种好方法(我已经使用了十年或更长时间)是在本地使用 iptables 中的最新库(取决于您的发行版)。
基本上它可以用作 iptables 内置的端口敲击。这将为您省去很多麻烦。只要你可以 tcp 连接(telnet 是一种方式。我也使用过 ssh 客户端并将它们指向端口。任何可以与指定端口号建立 tcp 连接的东西。我在看着你 Putty!)从客户端启动 ssh 连接,您可以使用它。
下面是一个示例,当您从主机远程登录到端口 4103 上的服务器时,iptables 将打开到主机的端口 22。然后您可以使用远程登录到端口 4102 或 4104 来关闭 sed 开放。使用 4102 和 4104 的原因是为了防止打开 22 进行简单的 tcp 扫描。只有到端口 4103 的 tcp connect(telnet) 才会允许您进入。
享受!
哦,我赞成 Fail2Ban。更大的灵活性,我喜欢禁令发生在 iptables 而不是 tcpwrappers 中。
SSH 端口敲门
Fail2ban 和 Denyhosts 之间的另一个区别是 Denyhosts 可以与其他 Denyhosts 用户共享阻止列表。使用 Fail2ban,您只能阻止您的服务器以前见过的 IP - 使用 Denyhosts,暴力尝试甚至可能永远不会到达您的服务器,如果其他人已经看到它,并且阻止列表在攻击者之前下载到您的服务器进入您的计算机。
另一个区别是 Fail2ban 使用 iptables,而 Denyhosts 使用 tcpwrappers。其他人之前已经提到过这种差异,但有一些旁注值得一提。
iptables 限制了您可以有效阻止的 IP 地址数量。这可能是 Fail2ban 没有共享阻止列表的机制的原因之一。
另一个影响是,当 iptables 被 nftables 替换时,Fail2ban 可能会停止工作或需要重写。拒绝主机可能会继续工作。
因此,两者都有优点和缺点。我都喜欢;对于我自己,我使用 Denyhosts,因为通常我只想保护 SSH,而且我喜欢共享阻止列表。
我使用 iptables 规则来限制来自同一 IP 地址的新连接(主要是 SSH,但它也适用于 FTP)。在我看来,与“fail2ban”和其他此类工具相比的优势在于 iptables 路由完全发生在内核模式下,并且不依赖任何用户模式工具来跟踪/解析日志文件。
数百次失败的 ssh 登录
如果你能做到这一点,限制可以访问相关协议的源地址显然也会有所帮助。
使用 SSH,您确实应该使用证书身份验证而不是接受密码。
关于 Fail2Ban 需要注意的一点是,它似乎比 DenyHosts 使用了大约 10MB 的内存。因此,如果您使用的是 128MB VPS,您可能需要研究一下。此外,开箱即用的 fail2ban 仅在 SSH 上设置,这意味着无需更改配置 - DenyHosts 在更少的内存中执行相同的操作。
denyhosts 用于 ssh。fail2ban 更全面(HTTP、FTP 等)。两者都在幕后使用 iptables。
Denyhosts 3.0 版:每次 IP 地址出现在日志文件中时,Denyhosts 都会打开 hosts.deny 文件并读取整个内容以匹配该地址。每次。没有任何东西缓存在内存中。如果您有一个巨大的 hosts.deny 文件并且受到许多探测(许多日志文件条目)的影响,那么 Denyhosts 就会成为 CPU 占用者,会为每个出现的 IP 地址读取和重新读取 hosts.deny 文件。不好。
如果您启用 iptables 支持,Denyhosts 将创建大量、缓慢的被阻止 IP 地址列表。Denyhosts 不使用 ipset 或 nftables 来创建有效的 IP 映射。
为什么不让开放社区为您完成所有工作,而不是使用繁琐的 iptables 或 fail2ban 配置,而是使用 CSF/LFD 呢?我可以强烈推荐它高于所有其他提到的选项。请参阅http://configserver.com/cp/csf.html了解它可以为您的服务器做什么。CSF 不需要控制面板,它本身提供了一个简单的 UI,供那些不想通过 shell 进行操作的人使用。它是很多稳定可靠的非驻留 perl 脚本。
fail2ban 似乎没有一种机制来识别成功的 ssh 登录并重置其失败次数。
sshd 的标准过滤器(至少在我的 debian 安装中)为客户端提供的服务器拒绝的每个 ssh 密钥计算失败计数。一些用户在每次登录时都会显示许多密钥,并且经常被锁定,尽管一旦通过了几个密钥,他们的登录就成功了。
由于上述原因,我目前正在考虑放弃fail2ban。至少在这方面,denyhosts 更好。但是,它显然不再是一个好的选择,并且在最近的 debian 版本中不再受支持(一些讨论在https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- Debian/ )
我这里没有很好的解决方案。