首页/安全/安全加固速查/fail2ban 自动封禁(与防火墙后端联动)
防火墙与访问控制50 条

fail2ban 自动封禁(与防火墙后端联动)

fail2ban 读日志按模式计数并调用防火墙后端封禁来源 IP,是 SSH 与 Web 爆破的通用缓解方案,需与本机防火墙后端正确搭配。

安全加固速查安全更新于 2026-10-13

按日志计数,自动封禁来源

fail2ban 读取服务日志,按正则匹配失败记录(如 SSH 登录失败),在时间窗口内累计到阈值后调用防火墙后端封禁来源地址。对持续爆破的场景,它能在不依赖边界设备的情况下自动降低噪声与尝试次数。生效的前提有两个:日志后端能读到正确的日志源,以及 banaction 与本机实际防火墙匹配。前者不配置就静默失效,后者不匹配会出现“封了但没效果”。

基本信息

加固项自动封禁缓解爆破
适用平台Linux(fail2ban 0.10 及以上、1.x)
权限要求root
达标判据SSH 等关键服务的 jail 启用,封禁计数在增长
关键项backend、logpath、banaction、ignoreip

典型使用场景

  • 公网 SSH 持续遭遇爆破的自动缓解
  • Web 登录接口暴力尝试的封禁
  • 减少日志噪声,让真实异常更容易被发现
  • 与云安全组配合减轻带宽与连接数压力
  • 配合限源规则降低未授权访问尝试的频率

最小配置(/etc/fail2ban/jail.local)

最小配置(/etc/fail2ban/jail.local)
[sshd]
enabled  = true
port     = ssh
maxretry = 5
findtime = 600
bantime  = 3600
# 先写白名单再启用,避免把办公网或堡垒机封掉
ignoreip = 127.0.0.1/8 10.0.8.0/24

运行与解封

运行与解封
fail2ban-client status                 # 看有哪些 jail 生效
fail2ban-client status sshd            # 看当前封禁数量与已封 IP
fail2ban-client set sshd unbanip 203.0.113.10   # 解封指定地址
fail2ban-client -d 2>/dev/null | grep -E 'banaction|logpath' | head   # 确认后端与日志路径
# firewalld 环境:banaction 指向 firewallcmd-ipset 或 firewallcmd-rich-rules 系列

关键参数

参数含义配置建议
enabled是否启用该 jail先配 ignoreip 再置 true
maxretry窗口内允许的失败次数常见 5 次,过低容易误封
findtime计数窗口(秒)600 秒是常用起点
bantime封禁时长(秒)3600 起,持续攻击可加大或递增
ignoreip永封白名单办公网、堡垒机、监控来源必须列入
banaction封禁动作与防火墙后端须与本机实际防火墙匹配
把自己或办公网封掉是这类方案的经典事故:启用前务必先配置 ignoreip,把办公网段、堡垒机与监控来源列入白名单。另一个常见问题是后端不匹配——机器上跑的是 firewalld 而 banaction 仍指向 iptables,配置看起来生效,实际封禁没有落地,验证时应对照防火墙规则确认封禁条目真的存在。
日志后端的选择会影响可靠性:auto 模式可能选错(journal 与文件日志之间),后端不可用时 jail 会静默失效。验证方法是观察“已封禁数量”是否随攻击增长,或用一次自测触发失败尝试看是否被计数,而不仅仅看服务是否 active。

易错点

  • backend 或 logpath 配错导致 jail 静默失效,规则看着在跑但计数一直为零
  • banaction 与实际防火墙后端不匹配(firewalld 与 iptables 混用),封禁不落地
  • 未配置 ignoreip 就把办公网或堡垒机封掉,影响正常运维
  • 前置负载均衡或 NAT 场景下本机封禁只挡本机看到的地址,需在上游设备处置才有效

数据来源与参考

  • fail2ban 官方文档:jail.local 与 banaction
  • Debian Wiki:fail2ban

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌