0%

网络问题排查-异常攻击后节点SSH登录失败无法恢复问题

问题现象

K8S集群所有节点之间网络异常,无法执行正常的SSH操作。

原因分析

基于该现象,首先怀疑是使用的密码错误,先排查使用的密码和实际密码和是否一致,经确认业务存储的密码跟实际密码是一致的,排除密码不一致的问题;

再排查是不是有异常的ip使用错误密码连接:

这里使用的是ipv6地址,需要注意,默认的netstat命令看到的ipv6地址是不全的,无法方便看出完整的ip地址,需要添加-W命令完整显示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node1 ~]# netstat -anp -v|grep -w 22 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 156183/sshd: /usr/s
tcp6 0 0 :::22 :::* LISTEN 156183/sshd: /usr/s
tcp6 0 0 2000:8080:5a0a:2f:59732 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:44072 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:35666 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:42998 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:59834 2000:8080:5a0a:2f40::22 ESTABLISHED 170769/java
tcp6 0 0 2000:8080:5a0a:2f:59652 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:39430 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:35648 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:36852 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:43162 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:35002 2000:8080:5a0a:2f40::22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f:36052 2000:8080:5a0a:2f40::22 ESTABLISHED 170769/java

完整ipv6地址的ssh连接如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@node1 ~]# netstat -anp -W|grep -w 22 |grep -v ::4
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 156183/sshd: /usr/s
tcp6 0 0 :::22 :::* LISTEN 156183/sshd: /usr/s
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:48950 2000:8080:5a0a:2f40:8002::5:22 ESTABLISHED 170769/java
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52506 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:56798 2000:8080:5a0a:2f40:8002::6:22 ESTABLISHED 170769/java
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52624 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:56860 2000:8080:5a0a:2f40:8002::6:22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52396 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52398 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:22 2000:8080:5a0a:2f40:8002::5:45532 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52202 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT -
tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52348 2000:8080:5a0a:2f40:8002::5:22 ESTABLISHED 170769/java

从上面的记录看,至少当前没有异常ipssh连接,再确认一下是不是之前出现过错误密码导致密码被锁的情况;

查看/var/log/secure日志(日志已发生过轮转,无法确认出问题的初始时间点),查看系统最近没有发生过重启,继续看journal --boot里的登录失败日志,找到了出问题的时间点,并且可以看到源ip地址2000:8080:5a0a:2f47::2一直使用错误密码登录:

1
2
3
4
5
6
7
8
cat boot.log |grep "Failed password"|less
3月 26 10:42:19 node1 sshd[114043]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 34968 ssh2
3月 26 10:42:23 node1 sshd[114043]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 34968 ssh2
3月 26 10:42:25 node1 sshd[114043]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 34968 ssh2
3月 26 10:42:28 node1 sshd[114043]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 34968 ssh2
3月 26 10:42:31 node1 sshd[116187]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 35194 ssh2
3月 26 10:42:34 node1 sshd[116187]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 35194 ssh2
3月 26 10:42:36 node1 sshd[116187]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 35194 ssh2

正常来说,使用错误密码登录失败后,密码被锁到指定时间后会自动解锁。但问题环境当前没有错误密码连接的情况下,使用正确密码依然无法连接。

临时注释/etc/pam.d/security-auth/etc/pam.d/password-authauth相关的配置,验证ssh异常是否是密码锁配置导致:

1
# auth required pam_tally2.so onerr=fail deny=5 unlock_time=900 even_deny_root

修改完观察一段时间,ssh恢复正常,还原回去后,ssh又出现异常,基本确认是配置问题。从系统相关同事了解到,这里使用的密码锁定模块tally是个老模块,因为存在缺陷已经被废弃,其中一个问题就是:在使用错误密码被锁后,即使密码正确了,也无法解除锁定。建议使用faillock模块替代,配置方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@node1 ~]# vim /etc/pam.d/system-auth 或者 vi /etc/pam.d/login
# 在文件开头增加如下内容:
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail deny=5 even_deny_root unlock_time=900 root_unlock_time=10
auth sufficient pam_faillock.so authsucc deny=5 even_deny_root unlock_time=900 root_unlock_time=10
auth required pam_deny.so

[root@node1 ~]# vim /etc/pam.d/password-auth 或者 vi /etc/pam.d/sshd
在文件第二行(第一行为 #%PAM-1.0 )增加如下内容:
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail deny=5 even_deny_root unlock_time=900 root_unlock_time=10
auth sufficient pam_faillock.so authsucc deny=5 even_deny_root unlock_time=900 root_unlock_time=10
auth required pam_deny.so

说明:faillock模块远程登录、本地登录过程中,用户锁定均不会有任何提示,只会出现锁定期间即使密码输入正确也无法登录系统的现象,解锁后可正常登录。

至于为什么出现这个问题,最后了解到是客户那边的漏扫平台使用弱密码故意扫的,正常只会扫一次,不清楚为什么触发扫了多次。

解决方案

锁密码的安全加固使用faillock模块替代老版本的tally模块。