lastb命令用于读取/var/log/btmp二进制日志,精准提取SSH失败登录中的恶意IP:通过sudo lastb -i | awk '{print $3}' | sort | uniq -c | sort -nr快速统计高频攻击源,支持按时间、终端类型(如ssh:notty)过滤,并可导出黑名单用于iptables或hosts.deny封禁。

直接用 lastb 查看密码爆破失败记录并提取恶意 IP,核心是聚焦 SSH 登录失败、按 IP 统计频次、过滤高频攻击源。它不依赖额外服务,只读取系统自带的 /var/log/btmp 二进制日志,响应快、痕迹轻。
快速定位 SSH 暴力破解记录
绝大多数密码爆破通过 SSH 进行,失败记录中终端字段多为 ssh:notty 或 pts/*。直接过滤可大幅缩小范围:
-
sudo lastb | grep 'ssh:notty'—— 只看 SSH 协议的失败尝试 -
sudo lastb pts—— 匹配所有伪终端(常见于远程 SSH 登录) -
sudo lastb -i | grep 'ssh:notty'—— 强制显示原始 IP,不反向解析域名,避免误判或延迟
提取高频恶意 IP(Top 攻击源)
单次执行就能统计出最可疑的 IP,无需写脚本:
-
sudo lastb -i | awk '{print $3}' | sort | uniq -c | sort -nr | head -20
输出格式:147 192.168.3.55(次数 + IP),前 20 名基本覆盖主要攻击源 - 若需限定“最近一小时”,结合时间筛选:
sudo lastb -i -s "$(date -d '1 hour ago' '+%a %b %e %H')" | awk '{print $3}' | sort | uniq -c | sort -nr
生成可直接使用的黑名单列表
导出结果用于后续封禁(如写入 /etc/hosts.deny 或 iptables):
- 只导出 IP(无次数):
sudo lastb -i | awk '{print $3}' | sort | uniq -c | sort -nr | awk '$1 > 10 {print $2}' > bad_ips.txt
—— 表示“出现超 10 次的 IP 才列入黑名单” - 加注释便于追溯:
echo "# Generated $(date) - IPs with >10 failed SSH logins" > blacklist.conf && sudo lastb -i | awk '{print $3}' | sort | uniq -c | sort -nr | awk '$1 > 10 {print "sshd:" $2}' >> blacklist.conf
配合系统级封禁落地生效
提取 IP 后,需主动应用策略才能阻断:
- 写入 hosts.deny:
sudo sh -c 'echo "sshd:$(cat bad_ips.txt | xargs | sed "s/ /\nsshd:/g")" >> /etc/hosts.deny' - 用 iptables 封禁(更彻底):
sudo iptables -I INPUT -s 192.168.3.55 -j DROP(逐条或批量循环执行) - 推荐长期方案:部署 fail2ban,它默认监听
btmp,自动解析 lastb 数据并触发 iptables 封禁,支持自定义阈值与解封时间

















