Fail2Ban通过分析/var/log/fail2ban.log识别累犯攻击者,recidive jail专捕高频被封IP并实施长时封禁,结合封禁时间分布、jail名称及error.log可精准推断攻击类型与意图。

直接看 /var/log/fail2ban.log 是最有效的方式。Fail2Ban 自身日志记录了每一次封禁动作的完整上下文,比单纯查服务日志(如 auth.log)更能反映攻击者的持续性、频率和策略特征。
聚焦 recidive 日志识别累犯攻击者
Recidive 是 Fail2Ban 内置的“累犯检测器”,它不监控原始服务日志,而是专门分析 fail2ban.log 中已发生的 Ban 记录。只要一个 IP 在设定周期内被多次封禁,就会被归入 recidive jail,触发更长封禁(例如 7 天)。
- 确认 recidive 已启用:
[recidive] enabled = true在jail.local中配置,并确保logpath = /var/log/fail2ban.log - 搜索典型日志行:
NOTICE [recidive] Ban 203.0.113.45—— 这类条目代表该 IP 已是“惯犯” - 结合时间戳统计:用
grep "NOTICE.*Ban" /var/log/fail2ban.log | awk '{print $1,$2,$3}' | sort | uniq -c | sort -nr快速找出高频被封 IP
从封禁时间分布推断攻击节奏
攻击不是随机的。连续封禁的时间间隔能暴露扫描工具的运行逻辑或人工试探习惯。
- 短时密集封禁(如 1 分钟内 5 次):大概率是暴力破解脚本在穷举密码或用户名
- 固定间隔封禁(如每 15 分钟一次):可能是定时扫描器或低频探测行为
- 跨天重复出现(如每天凌晨 3 点集中触发):需警惕自动化攻击集群或僵尸网络调度
- 用命令提取时间规律:
grep "Ban " /var/log/fail2ban.log | head -100 | awk '{print $2}' | cut -d: -f1 | sort | uniq -c
关联 jail 名称定位攻击目标服务
每条 Ban 日志都标注了所属 jail,比如 [sshd]、[nginx-http-auth] 或 [recidive]。这直接说明攻击者在打哪个服务的主意。
-
[sshd]高频出现 → 重点加固 SSH:禁用密码登录、改端口、启用密钥认证 -
[nginx-http-auth]或[apache-auth]→ 检查 Web 后台路径是否暴露、弱口令是否存在 -
[nginx-botsearch](自定义 jail)→ 攻击者在扫管理界面、备份文件、CMS 漏洞路径 - 混合多个 jail 被触发(如 sshd + nginx + mysql)→ 可能是全量扫描型攻击,需检查系统是否已被渗透
结合 error.log 提升攻击意图识别精度
Nginx 的 error.log 比 access.log 更能揭示真实攻击意图。Fail2Ban 若配置了对应 filter(如 nginx-badbots 或自定义 upstream timeout 规则),其封禁日志会指向更隐蔽的行为。
- 封禁原因含
upstream timed out→ 很可能是 Slowloris 类慢速攻击,单 IP 占用连接资源 - 封禁来自
nginx-limit-reqjail → 表明攻击者绕过常规限流,尝试高频请求特定接口 - 大量
SSL_do_handshake() failed触发封禁 → 多为扫描器发送畸形 TLS 请求试探漏洞 - 验证方式:在封禁日志中找到 IP,再查
grep "203.0.113.45" /var/log/nginx/error.log看错误类型











