首页/系统/Linux 运维命令速查/fail2ban 登录失败封禁框架

fail2ban 登录失败封禁框架

fail2ban 监控认证日志、按规则统计失败次数并自动封禁来源 IP;拒绝 SSH 爆破的标配,配合防火墙生效。

Linux 运维命令速查系统更新于 2026-10-13

fail2ban 是什么

fail2ban 是日志驱动的入侵防护框架,工作方式像一个自动化裁判:持续读认证日志,用正则统计某个来源 IP 的失败次数,超过阈值就调用防火墙把它临时封禁。它由三部分组成——jail 定义「监控什么服务、用什么阈值」,filter 提供匹配失败的正则,action 负责调用防火墙接口封禁。它不替代防火墙,而是给防火墙装上自动决策的脑。

基本信息

用途按日志自动检测暴力破解并临时封禁来源 IP
语法配置在 /etc/fail2ban/{jail.conf,jail.d/,filter.d/,action.d/},管理用 fail2ban-client
所属软件包fail2ban(多数发行版仓库自带,EPEL 里也有)
权限要求需要 root;读日志与操作防火墙都依赖提权

典型使用场景

  • 公网 SSH 防护:把口令爆破的源 IP 自动封掉,减少密码尝试量与日志噪音
  • Web 登录接口防护:对 401/403 频次过高的来源限速封禁
  • 邮件服务防护:SMTP 认证失败、垃圾投递尝试的自动处置
  • 安全合规要求:等保或审计项要求具备暴力破解检测与自动阻断能力
  • 日志驱动排障:通过 jail 状态查看当前封禁名单与失败统计,掌握攻击来源分布

最小可用配置

最小可用配置
# /etc/fail2ban/jail.d/sshd.local(片段文件,优先级高于 jail.conf)
[sshd]
enabled  = true
port     = ssh
backend  = systemd
maxretry = 5
findtime = 10m
bantime  = 1h
ignoreip = 127.0.0.1/8 10.0.0.0/8
banaction = iptables-multiport

管理命令

管理命令
systemctl enable --now fail2ban
fail2ban-client -t                     # 校验配置语法,改完先测再重启
fail2ban-client status                 # 列出已启用的 jail
fail2ban-client status sshd            # 看该 jail 的失败与封禁统计
fail2ban-client set sshd unbanip 203.0.113.10   # 手工解封
journalctl -u fail2ban -n 50 --no-pager         # 看服务自身日志

关键参数含义

参数作用取值建议
maxretry在统计窗口内允许的失败次数公网 SSH 设 3 到 5
findtime统计窗口长度10 分钟是常见起点,太短对慢速爆破不敏感
bantime封禁时长1 小时起步,持续攻击可加长或启用累进封禁
ignoreip永不封禁的地址或网段本机、内网、堡垒机、监控来源必须列入
banaction调用哪个防火墙动作必须与本机实际防火墙匹配
backend日志读取方式有 journald 用 systemd,否则用 auto 读文件
日志后端要选对:Debian 系默认写 /var/log/auth.log,RHEL 系写 /var/log/secure,启用 systemd 日志的系统直接用 backend = systemd 更省事。选错后端会出现「jail 已启用但从不封禁」的现象。
白名单是第一道防呆:ignoreip 漏掉自己的办公网段或堡垒机,一次改密或自动化巡检就可能把运维人员自己封在门外。云主机还应叠加安全组限制,避免单点失效。

易错点

  • 改完配置只 reload 不校验:先用 fail2ban-client -t 检查语法,再 reload 或 restart,否则可能带着旧策略继续跑
  • banaction 与实际防火墙不匹配(系统跑 nftables 却配了 iptables-multiport),封禁动作会静默失败,看 iptables -S 或 nft ruleset 里有没有 f2b 链最直接
  • ignoreip 不配或漏配监控与堡垒机来源,容易把正常访问一起封掉,事后还要手工解封
  • 只看 fail2ban-client status 的计数就以为封禁生效:计数只统计匹配,封禁是否落到防火墙要另外核实

数据来源与参考

  • fail2ban 官方文档(jail.conf(5))
  • man 1 fail2ban-client

相关工具

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