系统账号暴力破解日志分析,auth.log定位爆破源IP
如果服务器 SSH 端口暴露在公网,几乎每天都会收到大量登录失败的日志。
这些记录保存在 auth.log 中,通过分析进出内容,可以快速定位爆破源 IP,并判断服务器是否已经失守。
本文按零基础可操作的思路,带你完成一次完整的系统账号暴力破解日志分析,从查看日志到封禁 IP,全程使用命令即可完成。
先确认日志文件位置
大多数 Debian/Ubuntu 系统会记录在 /var/log/auth.log,CentOS/RHEL 则使用 /var/log/secure。
如果服务器启用了 journald,也可以通过 journalctl -u ssh 查看。
执行下面的命令先验证文件是否存在:
ls -l /var/log/auth.log
如果提示没有这个文件,就替换成 /var/log/secure 再试。
确认日志可用后,后续命令里的路径也要跟着改。
筛选登录失败记录
SSH 登录失败会在日志里留下 Failed password 字样,直接搜索就能拿到爆破记录:
grep "Failed password" /var/log/auth.log
输出里会包含日期、登录用户名、源 IP 和端口。
例如:
Jan 5 03:22:14 vps sshd[1234]: Failed password for invalid user admin from 203.0.113.9 port 52340 ssh2
只要看到大段这样的内容,基本可以确认正在被扫或被爆破。
为了进一步统计哪个 IP 攻击最频繁,把输出交给 awk 和 sort 处理:
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20
这段命令会按出现次数从高到低列出源 IP。
如果日志里有些行是 IPv6 地址,字段位置会略有不同,先用前一条命令抽查几行,再决定是否需要调整 $ 编号。
区分爆破与成功登录
光看失败记录还不够,务必检查有没有爆破成功的迹象。
分别统计一下 Accepted 和 Failed 的数量:
grep "Accepted" /var/log/auth.log | wc -l
grep "Failed password" /var/log/auth.log | wc -l
如果 Accepted 数量异常,且来源 IP 与自己的办公网段不一致,说明服务器可能已经被入侵。
此时立即断开 SSH 连接,检查当前登录会话和可疑用户。
正常情况下,只要没开密码登录,Accepted 记录应该只来自你自己。
临时封禁定位到的 IP
在确认攻击来源后,可以先封禁最活跃的几个 IP。
以 UFW 为例:
iptables -A INPUT -s 203.0.113.9 -j DROP
更稳妥的做法是安装 fail2ban,它会自动监测日志并封禁恶意来源。
注意执行 iptables 前先确认防火墙规则不会影响现有连接,最好在测试环境先验证一次。
常见坑点与验证方法
auth.log 可能会被 logrotate 压缩成 .gz 文件,分析旧日志时要先解压:
zcat /var/log/auth.log.2.gz | grep "Failed password"
如果服务器配置了 PAM,有些暴力破解记录会写在 auth.log 之外,比如 sudo 或 cron 相关的记录,但 SSH 爆破仍会落在 sshd 条目下。
验证封禁是否生效,可以临时用另一台机器尝试 SSH 登录,然后再次查询日志确认没有新增来源。
最后记住,
定位爆破源 IP 只是第一步。无论这次是否爆破成功,
都要检查是否存在弱密码、
是否关闭了 root 远程登录,
并开启 SSH 密钥认证。 只有关闭密码登录,
才能从根本上减少这类攻击。
如果你需要长期跟踪暴力破解情况,建议把 fail2ban 纳入日常运维,并为监控工具加上日志告警。
希望这篇文章能帮你理清 auth.log 的分析思路,下次遇到可疑登录请求时,可以自己动手找出来源。