fail2ban是生产环境动态ip黑名单核心方案,通过日志分析、规则匹配、防火墙调用实现自动识别、拦截与可控恢复,支持阈值配置、白名单、双模式防护及封禁审计。

生产环境里,光靠人工盯日志封IP不现实。真正有效的黑名单 IP 库,核心是“自动识别 + 自动拦截 + 可控恢复”,不是简单列个静态名单。
用 Fail2Ban 实现动态黑名单闭环
Fail2Ban 是最成熟、最轻量的自动化封禁方案,它把日志分析、规则匹配、防火墙调用全链路打通:
- 它持续监控 /var/log/secure(CentOS/RHEL)或 /var/log/auth.log(Debian/Ubuntu),实时抓取“Failed password”“Invalid user”等关键失败模式
- 内置 sshd 过滤器已适配主流发行版日志格式,无需从头写正则
- 触发后自动调用 iptables 或 nftables 添加 DROP 规则,封禁动作毫秒级生效
- 支持自定义 bantime(封禁时长)和 findtime(统计窗口),避免误伤短时重试
配置要点:兼顾安全与可用性
在 /etc/fail2ban/jail.local 中设置生产级参数:
-
端口对齐:确保
port = 58234与你修改后的 SSH 端口一致(不要留默认 22) -
阈值合理:建议
maxretry = 3(3 次失败即封),findtime = 1h(1 小时内累计),bantime = 1d(封 24 小时) -
白名单保底:用
ignoreip = 192.168.0.0/16 10.0.0.0/8 172.16.0.0/12 8.8.8.8排除内网和运维出口 IP -
双模式防护:额外启用
[sshd-ddos]jail,用更宽松的maxretry = 10和更短的findtime = 10m应对连接洪泛类攻击
与防火墙深度协同,提升拦截层级
Fail2Ban 默认走 iptables,但生产环境建议升级到 nftables 或 firewalld,再叠加网络层控制:
- 在 firewalld 的 trusted zone 中预置管理 IP 白名单,确保即使 Fail2Ban 崩溃,核心运维通道仍通
- 用
firewall-cmd --set-log-denied=all开启拒绝日志,配合 rsyslog 抽取到 /var/log/firewalld.log,便于溯源 - 封禁 IP 同时限制其新建连接速率:
iptables -A INPUT -p tcp --dport 58234 -m state --state NEW -m limit --limit 3/min -j ACCEPT,防绕过
封禁状态可查、可管、可审计
自动化不等于黑盒,必须保证每个环节可验证:
- 查当前封禁列表:
fail2ban-client status sshd - 手动解封指定 IP:
fail2ban-client set sshd unbanip 203.0.113.45 - 实时跟踪封禁事件:
tail -f /var/log/fail2ban.log - 定期导出封禁记录做聚合分析,识别高频攻击源段,用于上游防火墙全局策略调整











