fail2ban 怎么用
fail2ban 通过监控日志中的认证失败记录,按失败频率自动封禁来源 IP,用于 SSH 等暴露服务,能显著降低口令爆破的成功率,形成动态防护。配置写在 jail.local(不要直接改 jail.conf,升级会被覆盖),重点参数是 bantime、findtime、maxretry 与 ignoreip;封禁记录接入告警后,运营环节也有痕迹可查。
基本信息
| 作用 | 按失败频率自动封禁来源 IP |
|---|---|
| 配置文件 | /etc/fail2ban/jail.local(覆盖 jail.conf) |
| 关键参数 | bantime、findtime、maxretry、ignoreip |
| 常用操作 | 查看状态、手动解封、维护白名单 |
| 日志依赖 | 需与实际系统日志路径匹配(auth.log 或 secure) |
| 与 faillock 关系 | 来源级封禁与账户级锁定互补 |
典型使用场景
- SSH 暴露公网时的动态防护
- 与账户锁定策略配合形成双重限制
- 误封排查与白名单维护
- 封禁记录的留存与告警接入
- 站点被批量撞库时的应急加固
jail.local 配置
jail.local 配置
# /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8 10.10.0.0/24 # 白名单:本机与运维网段
bantime = 1h # 封禁时长 1 小时
findtime = 10m # 统计窗口 10 分钟
maxretry = 5 # 失败 5 次即封禁
[sshd]
enabled = true运行与查询
运行与查询
# 开机自启并立即启动
systemctl enable --now fail2ban
# 查看 sshd 状态、当前封禁数量与 IP
fail2ban-client status sshd
# 手动解封某个来源 IP
fail2ban-client set sshd unbanip 203.0.113.10关键参数
| 参数 | 含义 | 建议取值 |
|---|---|---|
| bantime | 封禁时长 | 1 小时起,按攻击强度调整 |
| findtime | 失败计数统计窗口 | 10 分钟 |
| maxretry | 窗口内允许失败次数 | 5 |
| ignoreip | 永不封禁的来源 | 本机与运维网段 |
ignoreip 未配置运维网段,可能把自己人封在门外;变更访问策略前先确认白名单覆盖范围。
只依赖 fail2ban 不做日志告警,持续低频尝试(每次低于阈值)不会被发现,建议把封禁事件接入告警。
常见牢笼与用途
| 牢笼 | 监控对象 | 适用场景 |
|---|---|---|
| sshd | SSH 认证失败日志 | 服务器远程登录防护 |
| nginx-http-auth | Web 基础认证失败 | 管理后台口令保护 |
| nginx-limit-req | 请求频率超限 | 接口暴力请求缓解 |
| postfix | 邮件认证失败 | 邮件服务暴露场景 |
查看当前生效的牢笼与全局参数用 fail2ban-client status 与 fail2ban-client get 系列命令,改动配置后先 fail2ban-client reload 再验证状态。
封禁动作依赖本机防火墙后端:确认 firewalld、iptables 或 nftables 中至少有一项可用,否则策略生效但流量不会被真正丢弃。