如何追踪SSH登录失败的尝试?

我想看看是否有人试图通过SSH对我的Ubuntu 12.04服务器进行暴力破解登录。我如何查看是否发生了这样的活动?

3个回答

所有的登录尝试都会被记录到/var/log/auth.log

1. 筛选暴力互动SSH登录

打开终端,输入以下内容;如果超过1页,您可以上下滚动;输入q退出:

grep sshd.\*Failed /var/log/auth.log | less

这是我一个VPS的真实例子: Aug 18 11:00:57 izxvps sshd[5657]: root从95.58.255.62端口38980 ssh2登录失败 Aug 18 23:08:26 izxvps sshd[5768]: root从91.205.189.15端口38156 ssh2登录失败 Aug 18 23:08:30 izxvps sshd[5770]: nobody从91.205.189.15端口38556 ssh2登录失败 Aug 18 23:08:34 izxvps sshd[5772]: asterisk从91.205.189.15端口38864 ssh2登录失败 Aug 18 23:08:38 izxvps sshd[5774]: sjobeck从91.205.189.15端口39157 ssh2登录失败 Aug 18 23:08:42 izxvps sshd[5776]: root从91.205.189.15端口39467 ssh2登录失败
2. 寻找失败的连接(即未尝试登录,可能是端口扫描等):
使用以下命令:
grep sshd.*Did /var/log/auth.log | less

如何减少登录失败/暴力破解尝试
  • 示例:

    8月5日22:19:10 izxvps sshd[7748]: 未收到来自70.91.222.121的身份验证字符串
    8月10日19:39:49 izxvps sshd[1919]: 未收到来自50.57.168.154的身份验证字符串
    8月13日23:08:04 izxvps sshd[3562]: 未收到来自87.216.241.19的身份验证字符串
    8月17日15:49:07 izxvps sshd[5350]: 未收到来自211.22.67.238的身份验证字符串
    8月19日06:28:43 izxvps sshd[5838]: 未收到来自59.151.37.10的身份验证字符串
    

如何减少登录失败/暴力破解尝试

  • 尝试将您的SSH切换到非标准端口,而不是默认的22端口
  • 或者安装一个自动封禁脚本,比如fail2ban安装fail2ban

5切换SSH端口能提供多少安全性(他们不是还可以扫描你吗,就像你提到的那样),对于合法用户来说,这是否值得付出那么小的可用性损失? - Nick T
11@NickT,结果证明更改端口足以显著减少登录尝试。在过去的一周/一天中,我曾经收到数千次尝试,但是到目前为止,在过去的一个月中,我只要更改了端口就没有任何尝试了。 - AntoineG
2我认为禁止使用密码登录也可能会有帮助。 - Luc M
2我知道这是Ubuntu,只是想提一下,在某些像CentOS这样的系统中,文件路径是/var/log/secure - lfender6445
有些系统使用systemctl -eu sshd来访问日志。 - alecdwm
请确保您始终更新fail2ban,因为这些CVE不可轻视。 - Binar Web

我认为监控日志是一个薄弱的解决方案,尤其是如果你在账户上使用了弱密码。暴力尝试通常每分钟至少尝试数百个密钥。即使你设置了一个定时任务来通过电子邮件通知你有关暴力尝试的情况,你可能需要几个小时才能到达服务器。
如果你有一个面向公众的SSH服务器,你需要一个在你被黑客攻击之前就能发挥作用的解决方案。
我强烈推荐使用fail2ban他们的维基比我更好地解释了它的功能。
Fail2ban扫描日志文件(例如/var/log/apache/error_log),并禁止显示恶意迹象的IP地址,如过多的密码失败、寻找漏洞等。通常,Fail2Ban会更新防火墙规则以拒绝指定时间内的IP地址,但也可以配置任何其他任意操作(例如发送电子邮件或弹出光驱)。Fail2Ban开箱即用,带有各种服务的过滤器(apache、curier、ssh等)。

获取保护非常简单,只需执行sudo apt-get install fail2ban命令。
默认情况下,一旦有人连续三次失败尝试,其IP地址将被禁止五分钟。这种延迟基本上可以阻止SSH暴力破解尝试,但如果你忘记密码也不会影响你的日常(不过你应该使用密钥认证!)。

8为什么叫做"fail to ban"? - Pacerier
11@Pacerier 嗯,如果用一个类比来说的话,登录失败会导致(2)封禁。 - Sebi
2哈哈哈,你真是让我开心啊 @Pacerier,我从来没想过它是字面上的“禁止失败”。 - adelriosantiago
1我认为这应该进行编辑,从第一句中删除“特别”。只有当您使用弱密码时,这才是一个问题。强密码在任何情况下都无法被暴力破解,唯一的原因是为了减少服务器负载才会禁止尝试。 - Abhi Beckert
绝对同意。无论如何,防止服务器负载过高是可以的。我见过以毫秒为单位的尝试。 - Diego Andrés Díaz Espinoza
是的,就像@Pacerier所说的那样,它的名字可能意味着将“失败”转化为“禁止”。 - Artfaith

简短回答: 要跟踪失败的尝试,你只需查看日志文件/var/log/auth.log,而不使用任何模式匹配命令,因为这些模式并不全面。然后,为了减轻风险,你可以使用像fail2ban这样的工具。
长篇回答: 无效登录有很多种方式。例如,攻击者可能会尝试一些默认的用户名和密码,比如在Kali Linux上的默认用户名"kali"和密码"kali"。(这是德国黑客在冷战时期广泛使用的技术。如果你感兴趣,可以阅读《布谷鸟的蛋》。)
假设你删除了"kali"用户,上述grep命令就无法捕捉到这个情况。
Nov 25 07:11:32 Everything20170707 sshd[27216]: input_userauth_request: invalid user kali [preauth]