这个坑值得记一笔。日志里每天几万条登录失败记录,来源遍布各地,虽然没被攻破,但日志量大、噪音多,还担心哪天被撞开。
排查方向其实有限,先把可能性排一排。默认端口和 root 账号是扫描的首要目标;密码登录开着,弱口令风险很高;没有自动封禁机制。
动手时先统计失败来源的数量
lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head
然后关闭密码登录只留密钥
grep PasswordAuthentication /etc/ssh/sshd_config
再往下启用自动封禁
fail2ban-client status sshd
限制来源地址范围
iptables -S | grep 22
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
怎么算真的好了,看的是同一批现象。失败登录记录大幅减少,只有白名单地址和密钥可以登录。
这里还有个坑。改端口只能减少噪音,不能替代密钥认证;最有效的手段是限制来源地址,把管理入口收到固定网络。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。