问题描述
我想看看是否有人试图通过brute-force将log-in通过SSH登录到我的Ubuntu 12.04服务器上。我怎么看这些活动是否发生?
最佳解决思路
所有登录尝试都记录到/var/log/auth.log
。
1.过滤brute-force交互式SSH登录
打开一个终端,然后输入下面的内容;如果它长于1页,则可以上下滚动;键入q
退出:
grep sshd.\*Failed /var/log/auth.log | less
-
以下是我的一个VPS的真实例子:8月18日11:00:57 izxvps sshd [5657]:失败的密码从95.58.255.62端口38980 ssh2 8月18日23:08:26 izxvps sshd [5768]:失败的密码root从91.205.189.15端口38156 ssh2 8月18日23:08:30 izxvps sshd [5770]:从91.205.189.15端口38556失败的密码ssh2 8月18日23:08:34 izxvps sshd [5772]:无效用户失败的密码星号91.205.189.15端口38864 ssh2 8月18日23:08:38 izxvps sshd [5774]:无效用户sjobeck的密码失败,来自91.205.189.15端口39157 ssh2 8月18日23:08:42 izxvps sshd [5776]:失败的密码根从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的标识字符串Aug 8 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的标识字符串
如何减少失败/brute-force登录尝试
-
尝试将您的SSH从默认值22切换到non-standard端口
-
或者安装auto-ban脚本,如fail2ban。
次佳解决思路
我认为监控日志是一个弱项解决方案,特别是如果您的帐户密码较弱。暴力企图通常每分钟至少尝试数百个密钥。即使你的cron作业设置为通过电子邮件发送垃圾邮件,但可能需要几个小时才能到达服务器。
如果你有一台public-facing SSH服务器,你需要一个解决方案,在你被黑客入侵之前就开始使用它。
我强烈建议fail2ban
。 Their wiki表示它比我做得更好。
Fail2ban scans log files (e.g.
/var/log/apache/error_log
) and bans IPs that show the malicious signs — too many password failures, seeking for exploits, etc. Generally Fail2Ban then used to update firewall rules to reject the IP addresses for a specified amount of time, although any arbitrary other action (e.g. sending an email, or ejecting CD-ROM tray) could also be configured. Out of the box Fail2Ban comes with filters for various services (apache, curier, ssh, etc).
获得保护就像sudo apt-get install fail2ban
一样简单。
默认情况下,一旦有三次失败尝试,他们的IP会被禁止5分钟。这种延迟本质上阻止了一次SSH暴力破解尝试,但如果你忘记了密码,它不会毁了你的一天(但你仍然应该使用密钥!)