阻止暴力 SSH 攻击的各种方法的优缺点是什么?

阻止暴力 SSH 攻击的各种方法的优缺点是什么?

有许多不同的软件包可以阻止在您的系统上发起强力 SSH 攻击的 IP。例如:

这些或其他的优点/缺点是什么?

我当前的解决方案是获取电子邮件日志观察每天都会生成并将令人震惊的 IP 地址转储到一个文本文件中,我将其输入到脚本中,然后重建 iptables。这是很麻烦的、耗时的、手动的,我想要一个更好的方法。

(请注意,我没有问解决问题的“最佳”方法是什么,因为做任何事情都没有“最佳”方法。)

答案1

另一种是失败2禁止,它依赖于 iptables(因此它适用于任何服务,而不仅仅是 ssh)。使用fail2ban,您可以:

  • 指定任何日志文件的路径(apache、ssh、nginx、邮件服务器...)。
  • 指定攻击模式的正则表达式(例如,6秒内同一ip在nginx访问日志上出现超过10个“404错误”)
  • 指定正则表达式来忽略某些模式(非常有用!)
  • 指定禁言时间
  • 发送电子邮件(或任何其他警报...)
  • 完全可定制(您可以编写自己的警报和过滤器)

DenyHosts 的一个“缺点”是它需要 tcp 包装器,因此它只能与查看 /etc/hosts.deny 文件的服务一起使用。但为了公平对待 DenyHosts,sshd 被编译为在大多数 Linux 发行版上使用 TCP Wrappers。我还发现 DenyHosts 比fail2ban 更容易配置(但功能较弱)。

参考类似的SF问题

答案2

我使用 DenyHosts,所以我至少可以回答这个问题:

优点

  • 完全自动化
  • 它是可配置的(在黑名单之前有多少次失败的尝试,对于不存在的用户名、确实存在的用户名以及 root 的特殊条目)
  • 它可以定期通过电子邮件向您发送新列入黑名单的主机列表,和/或每次将新主机列入黑名单时运行给定程序
  • 支持一段时间后自动将主机取消列入黑名单

缺点

我没有任何不可弥补的缺点,只要你正确使用它:

  • 在其默认配置中,它不会提醒您新列入黑名单的主机,因此,如果有人从数百个不同的地址攻击您的网络,您可能不会像手动监控日志那样立即注意到,但是(如优点部分)它可以向您发送电子邮件或运行可执行文件以在添加新主机时提醒您
  • 默认情况下,它会像其他主机一样将您的主机列入黑名单,因此您可能希望将它们添加到/etc/hosts.allow.有一次我因为输入密码失败而将自己锁在门外,有一次工作中有人开玩笑地尝试登录我的 root 帐户并将我的工作 IP 列入黑名单,我花了几天时间才弄清楚为什么我突然无法连接不再从工作中连接到我的网络

答案3

针对基于扫描的攻击的一种简单且实际上有效的保护措施是不使用标准端口。 443(https 端口)会让您面临不同的暴力攻击,这些攻击不会破解您的弱密码,并且可能比默认端口 (22) 能通过更多的防火墙。

大多数防止 ssh 暴力攻击的方法都是自我 DoS 的好方法(哎呀,我搞砸了配置!哎呀,我做了一堆快速 rsync,现在被禁止了!)或辅助自我 DoS(哎呀) ,攻击者来自/已经颠覆了与我在同一子网中的计算机(动态 IP 范围、大学网络...),我也被禁止了!)。

如果您只从几个地方登录,则只需将源 IP 地址列入白名单即可。如果您想随时随地通过笔记本电脑或手机进行 ssh,这显然是不好的。

拥有一个只侦听 IPv6 连接的 ssh 守护进程应该可以保护您在几年内免受扫描。但许多防火墙不允许您以任何合理的方式传输 IPv6。

您没有提到的另一种方法是端口敲门。它不会遇到自我 DoS 问题(除了错误配置),但它不能很好地跨越防火墙,并且可能会增加连接建立的几秒钟的延迟。

如果您有好的密码,或者您可以在没有密码身份验证的情况下生活,请禁用密码身份验证。 (密钥和一次性密码对于大多数用例来说就足够了:如果您不信任客户端计算机来存储 ssh 密钥,那么您也不相信它没有键盘记录器)。那么暴力攻击会消耗你一点 CPU 和带宽,但不会让你遭受入侵(只要你检查过你的密钥没有来自某个Debian 低熵 OpenSSL)。

总而言之,请注意,更改端口不会显着减少您的暴露。你会得到更少扫描,但您所能切断的只是试图利用旧漏洞和弱密码的唾手可得的果实。只要您使守护进程保持最新状态,并强制执行合理的密码或合理的尝试率限制,切换端口就更像是一种责任,而不是一种安全措施。

相关内容