直接解析/var/log/secure中Invalid user日志是识别SSH暴力破解最基础有效手段;其结构稳定,可提取时间戳、IP等字段,用shell脚本+cron实现分钟级自动封禁,并与Defender联动构建三级防御,同时需排除内网IP、记录封禁日志并定期清理规则。

直接解析 /var/log/secure 中的 Invalid user 日志条目,是识别暴力破解 SSH 登录尝试最基础也最有效的手段之一。这类日志由 Linux PAM 模块自动生成,结构稳定、语义明确,非常适合驱动轻量级自动化防御。
识别 Invalid user 日志的标准模式
典型条目如下:
May 18 22:15:03 server sshd[12345]: Invalid user admin from 192.168.1.100 port 54321关键字段固定且可提取:
- 时间戳:用于滑动窗口统计(如 5 分钟内出现 10 次即触发)
- Invalid user:固定字符串,是核心匹配特征码,无需正则模糊匹配
- from X.X.X.X:IP 地址紧随其后,空格分隔,便于用 awk 或 cut 提取
- port 后为随机端口,通常忽略;重点始终是源 IP 和失败频次
用 shell 脚本实现分钟级自动封禁
不依赖外部工具,仅用系统自带命令即可闭环:
- 用
tail -n 100 /var/log/secure | grep "Invalid user" | awk '{print $11}' | sort | uniq -c | sort -nr统计最近 100 行中各 IP 的失败次数 - 对结果中计数 ≥5 的 IP,执行
iptables -A INPUT -s $IP -j DROP或写入/etc/hosts.deny - 将该逻辑封装为 cron 任务,每 2 分钟运行一次,确保响应延迟控制在 2 分钟内
与 Microsoft Defender for Endpoint 衔接增强响应
Linux 端原生日志分析可与 Defender 生态联动:
- 通过 Defender for Endpoint 的 Linux 客户端(v101.52.57+)启用“高级搜寻”,直接查询含
Invalid user的日志事件 - 在 Defender 门户“公开管理”中创建自定义检测规则,将高频失败登录 IP 自动同步为高风险设备标签
- 结合 Defender 的行为阻止功能,对已标记 IP 发起的后续进程(如 curl、wget)进行实时阻断,形成日志→网络→进程三级防御
避免误封与维护要点
生产环境需注意边界情况:
- 排除内部网段(如 10.0.0.0/8、172.16.0.0/12),防止运维跳板机误伤
- 封禁 IP 后记录到独立日志(如
/var/log/ssh-block.log),便于审计回溯 - 定期清理过期封禁规则,例如用 iptables 的 recent 模块或 cron 清理 24 小时前的 DROP 链项


















