最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 联动治理:配置 Fail2ban 定时分析 error.log 自动调用系统防火墙封禁 IP
时间:2026-06-23 09:11:23 编辑:袖梨 来源:一聚教程网
Fail2ban 实时监控 Nginx error.log,匹配限流拒绝或自定义标记(如[BLOCK_ME])等异常模式后立即封禁IP;需增强error.log输出真实IP与可识别信号,配置专用filter、jail及iptables动作,并通过fail2ban-regex和fail2ban-client验证生效。
Fail2ban 不是定时扫描,而是实时监控 Nginx error.log 文件,一旦匹配到预设的异常模式(如频繁 401、500 或自定义错误日志),立即调用 iptables/nftables 封禁对应 IP。关键在于日志可读性、规则精准度和动作及时性。
确保 error.log 含真实 IP 与可识别标记
Nginx 错误日志默认不记录客户端 IP,需主动增强输出。在站点或 http 块中启用带 IP 的自定义 error_log 格式:
- 在 location 或 server 块中添加:
log_subrequest on;(让子请求也记入 error.log) - 用
error_log /var/log/nginx/error.log warn;并配合应用层打点:例如 Axum/PHP 在鉴权失败时输出[BLOCK_ME] Client: 192.168.1.100 - 若依赖 Nginx 自身报错(如 limit_req 拒绝),确认
limit_req_status 429;已设,并在 error.log 中可见 “limiting requests” 字样
编写专用 filter 匹配 error.log 中的攻击信号
新建 /etc/fail2ban/filter.d/nginx-error-block.conf,聚焦 error.log 特有内容:
- 匹配限流拒绝:
failregex = ^s*[error].*client <host>.*limiting requests.*$</host> - 匹配自定义安全标记:
failregex = ^s*[error].*[BLOCK_ME] Client: <host>$</host> - 排除健康检查或内部地址:
ignoreregex = health|10.0.0.|192.168.
配置 jail 并绑定 error.log 路径
在 /etc/fail2ban/jail.d/nginx-error.conf 中启用该规则:
[nginx-error-block]enabled = truefilter = nginx-error-blocklogpath = /var/log/nginx/error.log-
maxretry = 3(例如 3 次限流触发即封) -
findtime = 60(时间窗口设为 60 秒) -
bantime = 1800(封禁 30 分钟,避免长期误伤) action = iptables-multiport[name=NGINX_ERR, port="http,https"]
验证并启动防护
配置完成后务必验证有效性,再重启服务:
- 用
fail2ban-regex /var/log/nginx/error.log /etc/fail2ban/filter.d/nginx-error-block.conf测试正则是否命中目标行 - 运行
sudo fail2ban-client reload加载新规则 - 查状态:
sudo fail2ban-client status nginx-error-block,确认“Number of jail matches”开始增长 - 手动触发一次限流或写入一条 [BLOCK_ME] 日志,观察
iptables -L -n | grep NGINX_ERR是否新增 DROP 规则
相关文章
- 明末渊虚之羽防具有哪些排名 07-02
- 如何获取和平精英皮肤照片 07-02
- 空洞骑士丝之歌如何获取制造金属 07-02
- 鱼骨头螃蟹阵容如何搭配 07-02
- 战魂旅人玩法是什么 07-02
- 无限暖暖祝你幸福发饰如何获取 07-02