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


20

有很多不同的软件包可以阻止IP,在这些IP上会从系统上发起暴力SSH攻击。例如:

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

我当前的解决方案是采用logwatch每天生成的电子邮件,并将过分的IP地址转储到文本文件中,然后将其输入脚本中,然后再重建iptables。它很笨拙,耗时且手动,我想有个更好的方法。

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

Answers:


15

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

优点

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

缺点

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

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

19

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

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

DenyHosts的一个“缺点”是它需要tcp包装程序,因此它仅适用于查看/etc/hosts.deny文件的服务。但是为了与DenyHosts保持公平,sshd被编译为在大多数Linux发行版上使用TCP Wrappers。我还发现DenyHosts的配置比fail2ban更容易(但功能不那么强大)。

引用类似的SF问题


幸运的是,fail2ban还可以与pf一起使用-不仅限于iptables
好人,2013年

10

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

大多数防止ssh蛮力攻击的方法都是自我DoS的好方法(哎呀,我搞砸了配置!糟糕,我做了很多快速rsync操作,现在被禁止使用!)或辅助自我DoS(糟糕! ,攻击者来自/破坏了与我位于同一子网中的计算机(动态IP范围,大学网络...),而且我也被禁止!)。

如果仅从几个地方登录,则只需将源IP地址列入白名单。如果您想在旅途中使用笔记本电脑或手机进行SSH操作,那显然没有好处。

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

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

如果您拥有良好的密码,或者可以不用密码进行身份验证,请禁用密码身份验证。(对于大多数用例,密钥和一次性密码就足够了:如果您对客户端计算机的信任程度不足以存储ssh密钥,那么您也不相信它也没有键盘记录器)。然后,蛮力攻击将花费您一些CPU和带宽,但不会使您遭受入侵(只要您检查了所有密钥都不来自Debian低熵OpenSSL)。

总而言之,请注意更改端口并不会显着减少您的暴露。您将获得较少的扫描,但是您可以切断的只是想利用旧漏洞和弱密码的低挂水果。只要您使守护程序保持最新状态,并强制使用合理的密码或合理的尝试速率限制,切换端口就比安全措施更具责任感。


1
我同意不禁止自己采取一些措施;-)更改默认端口并且不依赖密码,而是依赖受密码保护的密钥也是不错的建议。但是我真的不知道为什么我应该让僵尸网络填充我的访问日志文件,而我的ssh和Web服务器却不得不每小时拒绝数千个请求。使用fail2ban时,我的访问日志很干净,我的服务器应用程序根本看不到此流量(第一个X错误请求:-)除外)。
巴泰勒米(Barthelemy),2010年

使用非标准端口根本不会增加太多保护。与在端口22上扫描SSH相比,在非标准端口上扫描SSH仅花费几分钟(假设解密程序进行了扫描并且该扫描未被IDS阻止。但是,如果您有IDS,则可能不需要进行端口混淆) )。如果我是一名破解者,并且在非标准端口上发现了SSH,则我什至会更感兴趣,因为我知道管理员认为该服务非常有价值,可以隐藏,并且依赖于模糊性来确保安全性。
Stefan Lasiewski

1
@Stefan:大多数攻击不是针对给定主机,而是针对给定服务。为此,扫描多个地址上的单个端口比每个地址上的多个端口更有效。而且,如果您实际上有攻击者将您作为目标,那么最好知道,因此您将希望使用强壮或禁止的密码并记录攻击。
吉尔斯(Gilles)'所以

1
@Stefan我认为非标准端口是解决麻烦(强力扫描)的有效方法,而不是真正的安全措施(例如,防止某人控制我的服务器)。
巴泰勒米(Barthelemy),2010年

1
@sudowned指定其他端口几乎不会造成麻烦。只是中的一行.ssh/config。如果防火墙不允许您通过,则锁定是一个问题,最简单的解决方案是坚持使用端口22并监听443。我同意切换端口并不能真正提高安全性,也许我应该更清楚一点。我不知道为什么您认为SSH守护程序不支持密码身份验证是不可能的:仅需在sshd_configOpenSSH(最常见的实现)中添加一行即可。
吉尔(Gilles)'所以
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.