用户登录日志审计筛查异常爆破账号:服务器用户登录日志审计
检查你的服务器是否正被暴力破解
每天都有大量攻击者尝试通过猜密码的方式登录你的服务器。
如果你没有做任何登录日志审计,可能直到服务器被植入后门才意识到出了问题。
本文教你如何通过分析 Linux 用户登录日志,快速筛查出异常爆破账号并采取封锁措施。
准备条件
操作前请确认以下条件:
- 你有一台 Linux 服务器(本文以 CentOS 7/8、Ubuntu 20.04+ 为例)。
- 你拥有 root 或 sudo 权限。
- 服务器上
/var/log/目录存在secure或auth.log文件(大部分发行版默认开启登录日志)。 - 如果你使用了宝塔面板或其他面板,它们通常不会关闭系统原生日志,因此本文方法依然有效。
定位异常爆破账号的实战步骤
1. 查看失败的登录尝试总览
暴力破解的特征是短时间内出现大量失败的登录尝试。
我们先统计登录失败的 IP 和账号:
CentOS/RHEL 系统(基于 /var/log/secure)
sudo grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -20
这条命令的作用:从日志中提取所有包含 Failed password 的行,取出 IP 地址(倒数第四个字段),统计每个 IP 出现次数并按降序排列,只显示前 20 个。
Ubuntu/Debian 系统(基于 /var/log/auth.log)
sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -20
如果看到某个 IP 失败次数达到几十上百,基本可以判定是异常爆破。
2. 找出被频繁尝试的账号
攻击者可能针对 root、admin、test 等常见账号进行爆破。
我们统计失败的登录尝试是针对哪些用户名:
sudo grep "Failed password" /var/log/secure | awk '{print $(NF-5)}' | sort | uniq -c | sort -rn | head -20
(Ubuntu 将 secure 替换为 auth.log)
这条命令提取的是用户名(倒数第六个字段)。
如果某个你从未设置过的账号(比如 test、user)出现大量尝试,说明有人正在暴力破解。
如果是 root 账号,则要引起高度警惕。
3. 查看成功登录记录与可疑的 IP
光看失败记录还不够,还要排查是否有异常 IP 成功登录。
检查最近成功登录记录:
sudo last -20
输出会显示登录时间、登录时长、IP 等信息。
如果你发现从未见过的 IP 成功登录过,极可能已经被入侵。
你也可以针对性检查某个 IP 的全部登录记录:
sudo last | grep "192.168.1.100"
(将 IP 替换为你要查的 IP)
4. 自动化脚本:一键输出疑似爆破的 IP 和账号
如果你经常需要做日志审计,可以写一个简单的 Shell 脚本合并上述步骤。
这里给出一个快速参考:
#!/bin/bash
# 审计爆破账号脚本
LOGFILE="/var/log/secure"
if [ ! -f "$LOGFILE" ]; then
LOGFILE="/var/log/auth.log"
fi
echo "=== 登录失败次数最多的 IP(前 10) ==="
sudo grep "Failed password" $LOGFILE | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10
echo ""
echo "=== 被尝试次数最多的账号(前 10) ==="
sudo grep "Failed password" $LOGFILE | awk '{print $(NF-5)}' | sort | uniq -c | sort -rn | head -10
echo ""
echo "=== 最近成功登录记录(前10条) ==="
sudo last -10
保存为 audit_brute.sh,用 chmod +x audit_brute.sh && sudo ./audit_brute.sh 执行。
避坑指南与常见问题
Q1:日志被轮转(logrotate)覆盖了怎么办?
系统默认会按周或按大小轮转日志,旧日志会被压缩成 secure-20230101.gz 这样的文件。
你可以用 zcat 或 zgrep 读取压缩包:
sudo zgrep "Failed password" /var/log/secure-*.gz | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10
Q2:发现爆破 IP 后如何临时封禁?
你可以使用 fail2ban 这类工具自动封禁,但临时手动封禁也很简单:
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
(将 IP 替换为要封禁的 IP)
注意:封禁前请确认该 IP 不是你自己或公司出口 IP,否则你会把自己关在门外。
Q3:为什么我的日志里看不到 Failed password 记录?
检查 sshd 服务是否开启了密码登录日志。
在 /etc/ssh/sshd_config 中确认 LogLevel 至少为 INFO。
如果设置成 QUIET 或 SILENT,日志将不记录详细登录信息。
修改后执行 sudo systemctl restart sshd 生效。
Q4:last 命令显示的成功登录 IP 不全,怎么办?
last 读取的是 /var/log/wtmp 文件,该文件可能存在轮转。
如果需要更完整的记录,可以查看所有已轮转的 wtmp 文件:
sudo last -f /var/log/wtmp-1
(文件名可能因发行版而异,可以使用 ls /var/log/wtmp* 查看)
效果验证与后续加固
执行上述步骤后,你应该能收到一份清晰的异常列表:
- 失败次数超过阈值(比如 50 次)的 IP 和对应攻击的账号。
- 成功登录记录中出现的陌生 IP。
确认异常后,建议立即执行以下加固措施:
- 禁止 root 直接登录:修改
/etc/ssh/sshd_config,将PermitRootLogin改为no,然后sudo systemctl restart sshd。 - 更换高强度密码或使用密钥登录。
- 安装 fail2ban 自动封禁反复失败的 IP。
- 定期执行上述审计脚本,建议每周一次。
如果你正在处理用户登录日志审计筛查异常爆破账号,先按本文步骤找出主要攻击源和攻击账号,然后结合 fail2ban 和 SSH 安全配置做长效防护。
遇到日志格式不一致或命令报错时,优先回看避坑部分检查日志文件路径和轮转情况。