如何配置Fail2Ban的Jail?

配置 Fail2Ban 的 Jail 核心是定义监控规则、匹配条件和封禁动作 ,每个 Jail 对应一个防护场景(如 SSH、Apache),下面是 Ubuntu 系统下的分步实操指南,包含基础配置、参数详解和自定义案例。


一、Jail 配置的核心原则

  1. 不修改默认文件 :默认规则文件 /etc/fail2ban/jail.conf 仅作参考,所有自定义配置放在 /etc/fail2ban/jail.d/ 目录下,后缀为 .conf,优先级更高。
  2. 一个场景一个 Jail :比如 SSH 防护单独写 sshd.conf,Apache 防护写 apache.conf,便于管理。
  3. 配置结构固定 :每个 Jail 由 Jail 名称 开头,后跟参数键值对,格式为 参数 = 值。

二、Jail 核心参数详解(必配)

先搞懂每个参数的作用,才能灵活配置,以下是最常用的核心参数:

参数 作用 取值示例 关键说明
enabled 是否启用该 Jail true/false 必须设为 true 才会生效
port 防护的端口 ssh/http,https/22,80,443 支持服务名或端口号,多个用逗号分隔
filter 关联的过滤规则 sshd/apache-auth 对应 /etc/fail2ban/filter.d/ 下的规则文件
logpath 监控的日志路径 /var/log/auth.log 支持通配符,如 /var/log/apache2/*.log
maxretry 最大失败次数 3/5 超过次数就触发封禁
bantime 封禁时长(秒) 3600/86400/-1 -1 表示永久封禁
findtime 统计时间窗口(秒) 600(10 分钟) 比如 10 分钟内失败 3 次触发封禁
ignoreip 白名单 IP / 网段 127.0.0.1 192.168.1.0/24 多个用空格分隔,不会被封禁
action 触发后的动作 %(action_)s/%(action_mw)s action_= 仅封禁;action_mw= 封禁 + 发邮件

三、基础配置案例:SSH 防护 Jail

SSH 是最常被暴力破解的服务,以此为例,手把手教你配置:

步骤 1:新建自定义 Jail 文件

bash

运行

复制代码
sudo nano /etc/fail2ban/jail.d/sshd.conf
步骤 2:写入配置内容

ini

复制代码
# 定义 Jail 名称,必须和 filter 名称对应(sshd)
[sshd]
# 启用该 Jail
enabled = true
# 防护的端口(ssh 对应 22 端口)
port = ssh
# 关联的过滤规则(/etc/fail2ban/filter.d/sshd.conf)
filter = sshd
# 监控的日志文件路径(SSH 日志默认路径)
logpath = /var/log/auth.log
# 15 分钟内(900秒)失败 3 次触发封禁
maxretry = 3
findtime = 900
# 封禁 24 小时(86400秒)
bantime = 86400
# 白名单:本地回环 + 内网网段
ignoreip = 127.0.0.1 192.168.0.0/24
# 动作:封禁 + 发送邮件告警(需安装 sendmail)
action = %(action_mw)s
# 邮件配置(可选)
sender = fail2ban@ubuntu-server.com
destemail = your-email@example.com
mta = sendmail
步骤 3:保存并生效配置
  1. 按 Ctrl+O → 回车 → Ctrl+X 保存退出。

  2. 重启 Fail2Ban 服务使配置生效: bash

    运行

    复制代码
    sudo systemctl restart fail2ban
步骤 4:验证配置是否生效

bash

运行

复制代码
# 查看 sshd Jail 的状态
sudo fail2ban-client status sshd

输出包含 Jail list: sshd 和 Number of banned IPs: 0 即为配置成功。


四、进阶配置案例:自定义 Web 防护 Jail

针对 Web 服务的恶意扫描(如频繁 404 请求),自定义一个 Jail:

步骤 1:新建 Jail 文件

bash

运行

复制代码
sudo nano /etc/fail2ban/jail.d/apache-badscan.conf
步骤 2:写入 Jail 配置

ini

复制代码
# 自定义 Jail 名称
[apache-badscan]
enabled = true
port = http,https
# 关联自定义的过滤规则(下面会创建)
filter = apache-badscan
# 监控 Apache 访问日志
logpath = /var/log/apache2/access.log
maxretry = 5
findtime = 300
bantime = 1800
ignoreip = 127.0.0.1 192.168.1.0/24
步骤 3:创建对应的过滤规则文件

Jail 中的 filter = apache-badscan 对应 /etc/fail2ban/filter.d/apache-badscan.conf,需要手动创建:

bash

运行

复制代码
sudo nano /etc/fail2ban/filter.d/apache-badscan.conf

写入正则规则(匹配频繁 404 请求):

ini

复制代码
[Definition]
# 正则表达式:匹配日志中包含 " 404 " 的请求,<HOST> 代表客户端 IP
failregex = ^<HOST> -.*" (GET|POST).*" 404 .*$
# 忽略的正则(留空表示不忽略)
ignoreregex =
步骤 4:生效并测试

bash

运行

复制代码
sudo systemctl restart fail2ban
# 测试过滤规则是否匹配日志
sudo fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/apache-badscan.conf

输出 Success, the total number of matches is ... 即为规则有效。


五、Jail 配置的常用操作

1. 启用 / 禁用某个 Jail
  • 启用:修改对应 Jail 文件的 enabled = true
  • 禁用:修改为 enabled = false,重启服务生效
2. 查看所有已启用的 Jail

bash

运行

复制代码
sudo fail2ban-client status
3. 调整封禁策略(临时生效)

无需修改配置文件,直接用命令调整:

bash

运行

复制代码
# 临时将 sshd Jail 的封禁时间改为 1 小时
sudo fail2ban-client set sshd bantime 3600
# 临时将最大失败次数改为 5 次
sudo fail2ban-client set sshd maxretry 5

注意:临时修改重启服务后会失效,如需永久生效,需修改配置文件。


六、避坑指南

  1. 参数格式错误 :配置文件中 = 前后必须有空格(如 enabled = true,不是 enabled=true),否则会导致服务启动失败。
  2. 日志路径错误 :确保 logpath 指向的日志文件存在且 Fail2Ban 有权限读取(权限至少 644)。
  3. 白名单未配置 :一定要将自己的 IP 加入 ignoreip,避免误封自己。
  4. 防火墙未启动 :Ubuntu 默认用 ufw,需确保 sudo ufw enable,否则 Fail2Ban 无法封禁 IP。


相关推荐
程序员梅雨4 分钟前
ZooKeeper面经总结
java·大数据·linux·分布式·后端·zookeeper·中间件
lingran__8 分钟前
Linux进程万字详解(二)|进程状态深度剖析:调度队列、内核链表、D状态设计哲学、僵尸孤儿进程与Slab机制
linux·进程管理·内核链表·pcb·僵尸进程·孤儿进程·进程状态
PC2005-cloud35 分钟前
Mysql学习笔记:InnoDB Cluster 集群从零搭建实战,基于 Docker 实现高可用读写分离架构
笔记·学习·mysql
小陈phd1 小时前
深入理解agent学习笔记(七)——动态提示词与Skills
笔记·学习
我命由我123451 小时前
田野笔记极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
GeW1 小时前
以Linux为基、数据库为核:新质生产力路线图下的企业架构升级
linux
一木 之林1 小时前
微信小程序开发全攻略·文章版|00 总览:74集学习路径与知识地图
人工智能·学习·计算机视觉·微信小程序·小程序
忆挽篱笙歌1 小时前
进程的状态
linux·ubuntu
小陈phd1 小时前
深入理解agent学习笔记(六)——提示工程-优化系统提示词
笔记·学习
kyle~1 小时前
Linux --- Socket 用户进程与内核网络协议栈之间的统一接口
linux·arm开发·网络协议