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

And*_*ter 20 security ssh

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

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

我目前的解决方案是获取logwatch每天生成的电子邮件,并将恶劣的 IP 地址转储到一个文本文件中,我将其输入到脚本中,然后重建 iptables。这是hacky,耗时且手动,我想要一个更好的方法。

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

Bar*_*emy 19

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

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

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

参考一个类似的SF问题


Mic*_*zek 15

我使用 DenyHosts,所以我至少可以回答:

优点

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

缺点

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

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


Gil*_*il' 10

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

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

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

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

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

如果你有好的密码,或者你可以不用密码认证,请禁用密码认证。(对于大多数用例来说,密钥和一次性密码就足够了:如果您不信任客户端机器来存储 ssh 密钥,那么您也不相信它没有键盘记录器)。然后蛮力攻击将花费您一些 CPU 和带宽,但不会让您受到入侵(只要您检查过没有任何密钥来自Debian 低熵 OpenSSL)。

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

  • 我同意需要一些练习才能不禁止自己;-) 更改默认端口并且不依赖密码而是依赖受密码保护的密钥也是很好的建议。但我真的不知道为什么我应该让机器人网络填充我的访问日志文件,而我的 ssh 和 Web 服务器每小时必须拒绝数千个请求。使用fail2ban,我的访问日志是干净的,我的服务器应用程序根本看不到此流量(除了前X个错误请求:-))。 (2认同)