如何通过分析 /var/log/secure 日志查找 SSH 暴力破解来源 IP?

文章导读
直接查看/var/log/secure 中包含"Failed password"的记录,通过 awk 提取 IP 并统计频次,是定位 SSH 暴力破解来源最快的方法,适用于 CentOS/RHEL 等使用 secure 日志的系统。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

直接查看/var/log/secure 中包含"Failed password"的记录,通过 awk 提取 IP 并统计频次,是定位 SSH 暴力破解来源最快的方法,适用于 CentOS/RHEL 等使用 secure 日志的系统。

先说结论:分析/var/log/secure 日志能快速锁定高频失败登录的 IP,但必须先确认是否有成功登录记录以防系统已失守。

  • 先判断:检查是否有异常"Accepted"记录确认是否已入侵
  • 优先做:统计"Failed password"频次最高的 IP 并封禁
  • 再验证:使用 last 命令交叉验证登录历史

命令速用版

以下命令可直接在终端执行,用于提取攻击次数最多的前 20 个 IP:

grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20

注意:不同系统日志格式可能略有差异,如果上述命令提取不到 IP,可尝试将$(NF-3)改为$11,或先用 head -1 查看日志样例确认 IP 所在列。

为什么会这样

SSH 服务会将所有认证尝试记录在安全日志中。暴力破解的特征是同一 IP 在短时间内产生大量"Failed password"记录。通过分析这些失败记录,可以量化攻击强度,区分是人工误输还是自动化工具扫描。

分步处理

1. 确认系统是否已失守

在封禁 IP 前,先检查是否有成功登录的痕迹,避免攻击者已潜入:

grep "Accepted" /var/log/secure | tail -20

重点关注非工作时间或陌生 IP 的 root 登录记录。如果发现异常成功登录,应立即断开网络并进行应急响应。

2. 统计攻击源 IP

使用速用版命令统计失败次数。如果某 IP 失败次数超过 20 次且集中在几分钟内,大概率是自动化工具。

3. 封禁恶意 IP(关键步骤)

确认攻击 IP 后,需立即通过防火墙封禁。根据系统使用的防火墙工具,选择以下一种方式:

如何通过分析 /var/log/secure 日志查找 SSH 暴力破解来源 IP?

方式一:iptables(通用)

iptables -I INPUT -s <攻击 IP> -j DROP
service iptables save

方式二:firewalld(CentOS 7+/RHEL 7+)

firewall-cmd `--permanent` `--add-rich-rule`='rule family="ipv4" source address="<攻击 IP>" reject'
firewall-cmd `--reload`

方式三:fail2ban(自动防御推荐)

安装并配置 fail2ban 可自动封禁多次失败的 IP:

yum install fail2ban -y
systemctl enable `--now` fail2ban

配置文件通常位于/etc/fail2ban/jail.local,确保 sshd 模块 enabled=true,默认策略为 5 次失败封禁 10 分钟。

怎么验证是否生效

执行封禁后,再次运行统计命令,观察该 IP 是否不再新增失败记录。同时使用 last 命令查看最近登录历史,确认无异常会话:

last -a | head -15

若使用 fail2ban,可通过以下命令查看当前封禁状态:

fail2ban-client status sshd

常见坑

1. 日志路径混淆:Ubuntu/Debian 系统日志通常在/var/log/auth.log,而非/var/log/secure。

2. 字段提取错误:awk 提取 IP 的字段位置取决于日志格式,建议先用 head -1 查看日志样例确认 IP 所在列。

3. 忽略 Invalid user:攻击者常尝试不存在的用户名,需同时 grep "Invalid user" 排查。

4. 封禁未持久化:iptables 规则重启后可能失效,务必执行 save 或使用 firewalld 的`--permanent` 参数。

参考来源

  • CentOS Official Documentation - System Logging
  • Fail2Ban GitHub Repository
  • Linux Man Pages: sshd, iptables, firewall-cmd