封禁记录构成第二时间线
fail2ban 监视日志中的失败记录,达到阈值后自动下发防火墙封禁并在自身日志中记下封禁与解封动作。这条记录独立于 sshd 的失败日志,把两者对齐就能得到一条更完整的爆破时间线:哪些来源被自动阻断、在什么时刻阻断、又是什么时候自动解封。
封禁不等于攻击结束
封禁时长由 jail 的设定决定,默认通常只有十分钟左右,解封后来源可以继续尝试;同时它也只处理当前配置覆盖的日志与协议。因此看到「已被封禁」不能推断攻击停止,要看后续是否仍有失败记录,以及来源地址是否发生变化。
基本信息
| 适用平台 | Linux(fail2ban,通常与 iptables/nftables、firewalld 联动) |
|---|---|
| 日志位置 | /var/log/fail2ban.log |
| 状态查询 | fail2ban-client status sshd |
| 关键设定 | maxretry、findtime、bantime 与 ignoreip 白名单 |
| 作用范围 | 只覆盖配置中启用的 jail 与对应日志 |
典型使用场景
- 爆破时间线:把封禁与解封动作与 sshd 失败日志对齐
- 确认防护效果:统计被封禁来源的数量与频次变化
- 排查误封:白名单未覆盖的运维或监控来源被阻断
- 评估攻击持续性:解封后是否立即恢复尝试
- 为报告取证:说明该主机部署了自动阻断机制及其配置
查看封禁记录
查看封禁记录
# 当前 jail 状态:已封禁地址与统计
fail2ban-client status sshd 2>/dev/null | head -20
# 封禁与解封动作的时间线
grep -E 'Ban|Unban' /var/log/fail2ban.log | tail -20
# 统计被封禁地址的频次(结合原始日志说明攻击强度)
grep ' Ban ' /var/log/fail2ban.log | awk '{print $(NF-1)}' | sort | uniq -c | sort -rn | head
# 核对关键参数与白名单
grep -E 'maxretry|findtime|bantime|ignoreip' /etc/fail2ban/jail.local /etc/fail2ban/jail.conf 2>/dev/null | head日志动作类型
| 动作 | 含义 | 分析用法 |
|---|---|---|
| Ban | 来源被加入封禁列表 | 记录阻断时刻与对象 |
| Unban | 封禁到期或被移除 | 判断防护窗口长度 |
| Found | 匹配到触发规则 | 说明阈值被达到 |
| Jail started | 规则加载 | 与重启、配置变更对照 |
| Restore | 重启后恢复已有封禁 | 解释日志中的成批动作 |
只配置 IPv4 规则的环境里,IPv6 来源不会出现在封禁列表中;排查时先确认 jail 是否同时覆盖两类地址。
解封动作有时来自管理员手动操作或白名单调整,看到解封记录先核对当次运维记录,不要直接判定为攻击者绕过。