SSH爆破攻击应直接分析/var/log/auth.log或/var/log/secure,用grep "Failed password"提取失败记录,以awk '{print $11}'或awk -F'from ' '{print $2}' | awk '{print $1}'提取源IP,结合时间过滤(如最近10分钟)统计活跃攻击,lastb因信息不全不可靠。

直接看日志统计,别等报警——SSH爆破攻击的次数和IP就在 /var/log/auth.log 或 /var/log/secure 里,实时可查,5秒内就能定位主力攻击源。
查失败登录记录用 grep "Failed password" 而不是 lastb
虽然 lastb 看起来方便,但它只读 /var/log/btmp,而这个文件默认不记录完整 IP(尤其在某些发行版或日志轮转后),且无法区分 root 和普通用户尝试。真正可靠、带完整上下文的日志来源是 SSH 守护进程写入的系统认证日志:
-
/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(RHEL/CentOS)才是权威源头,每条记录含时间、用户名、源 IP、端口、协议版本 - 攻击者用 Hydra 或 Medusa 扫描时,
Failed password for root和Failed password for invalid user admin会密集出现,grep "Failed password"能一次捕获全部 - 注意:如果服务器启用了
UsePAM yes且配置了其他认证模块,部分失败可能走 PAM 日志路径,但绝大多数暴力破解仍落在sshd自己写的日志行里
按 IP 统计攻击次数必须用 awk '{print $11}',别信 $9 或 $10
日志字段位置不是固定的,取决于时间格式和系统 locale。在多数标准配置下,源 IP 稳定出现在第 11 列(空格分隔),但以下情况会偏移:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 如果日志开头是
Oct 2 05:18:22(双空格分隔月份和日期),字段索引不变;如果是2026-10-02T05:18:22(ISO 格式),则 IP 通常在第 12 或 13 列 - 更稳妥的做法是用
awk -F'from ' '{print $2}' | awk '{print $1}'提取from后第一个单词,绕过列数依赖 - 执行前先用
sudo head -3 /var/log/auth.log | grep "Failed password"看一眼实际结构,再决定切哪一列
查“当前”受攻次数得加时间过滤,否则统计的是历史总量
不做时间限制的 grep | wc -l 只反映累计失败数,对判断“此刻是否正在被扫”毫无意义。真实应急中要盯的是活跃攻击窗口:
- 查最近 10 分钟:
sudo grep "Failed password" /var/log/auth.log | awk -v d="$(date -d '10 minutes ago' '+%b %d %H:%M')" '$0 > d' | wc -l - 查最近 1 小时内攻击最猛的 IP:
sudo grep "Failed password" /var/log/auth.log | awk -v d="$(date -d '1 hour ago' '+%b %d %H:%M')" '$0 > d' | awk '{print $11}' | sort | uniq -c | sort -nr | head -5 - 注意:
date命令输出格式需与日志前缀严格一致(如日志是Oct 2,不能用%m;有空格补零就用%d而非%-d)
lastb 只能当辅助,千万别用它替代日志分析
lastb 本质是二进制 /var/log/btmp 的解析器,优点是快、不依赖文本格式;缺点是信息极简、无时间精度(只到分钟)、不记录用户名是否为无效用户(invalid user 类攻击会被合并归类),而且:
- 一旦执行过
sudo truncate -s 0 /var/log/btmp(有人误操作清空),所有记录即丢失,不可恢复 - 云服务器若启用日志集中采集(如 rsyslog + ELK),
btmp不会上报,而auth.log会 - 想确认某个 IP 是否还在连,
ss -tuln | grep ':22' | grep '192.168.1.100'比翻lastb更直接——ESTABLISHED 连接说明正卡在密码输入环节
真正关键的不是“总共有多少次”,而是“哪个 IP 在最近 5 分钟内试了 47 次 root 密码,且还没被 fail2ban 封”。字段偏移、时间格式、日志轮转压缩(.gz 文件)这些细节,漏掉一个,查出来的数字就可能是错的。

















