如何配置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: sshdNumber 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。


相关推荐
椰子今天很可爱3 小时前
五种I/O模型与多路转接
linux·c语言·c++
Lueeee.3 小时前
Linux kernel Makefile 语法
linux
Nan_Shu_6144 小时前
学习:VueUse (1)
学习
Li.CQ4 小时前
SQL学习笔记(二)
笔记·sql·学习
Huangxy__4 小时前
指针的补充学习
学习
爱吃山竹的大肚肚5 小时前
EasyPOI 大数据导出
java·linux·windows
极地星光5 小时前
dmesg 工具的核心功能与作用
linux
Smartdaili China5 小时前
掌握Java网页抓取:技术与示例完整指南
java·网络·学习·指南·网页·住宅ip·爬虫api