惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
A
About on SuperTechFans
J
Java Code Geeks
量子位
博客园 - 三生石上(FineUI控件)
博客园 - Franky
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
D
DataBreaches.Net
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

NGINX

有用 Nginx UI 的朋友吗?这玩意是不是时不时将磁盘 IO 打满? 麦当劳服务模式是 nginx,肯德基服务模式是 apache,这样理解对不对? oracleusa.ml 的实现原理 尝试自己配置转发后端请求的时候有个疑问 请教 Nginx 时完整的 SSL 刷新教程或者脚本 问问大家 nginx 日志流量分析用什么方案? nginx 二级目录反向代理是不是有先天缺陷? nginx rewrite 指令的问题 问个 nginx 配置问题 请问下为啥微信客户端访问到 nginx 没有参数了? 有兄弟们用 nginx proxy manager(或者其他图形化工具)来管理 nginx 反向代理的吗? 请问 Nginx 怎么添加 CORS 白名单? 使用 nginx 监听已被监听的端口, reload 不会失败, 但会导致其他配置不生效. nginx 如何获取/打印完整代理路径? Nginx 四层反代 QUIC 如何传递客户端 IP 关于 windows 下面重启之后 nginx 的问题 我是不是可以反向代理个 V2EX 网站? 用 nginx 做的 xai 的转发好像一直有问题 请教一个 Nginx 配置和浏览器强制 http 转 https 问题 nginx proxy manager ipv6 反代指向内网 ipv4 局域网地址,还可以这样操作🤔? 关于 Nginx 反向代理性能调优的问题,求指导🙏 nginx 配置根据请求头分发问题 用过 nginx-proxy-manager 请进, 咨询个问题. 我有一个端口转发问题,求大佬们协助 使用 Nginx 代理 Emby 服务器,浏览器可以访问但是客户端连不上 小白在使用 Nginx proxy manager 遇到问题,请大佬们指教。 请教下 nginx 反代配置 nginx 配置问题求解答 Nginx 流量异常,请大佬支招~ nginx 读取 ssl 证书的权限问题请教
fail2ban 保护 nginx 方案
cowiejulewbfwo · 2025-11-28 · via NGINX

Docker Nginx (Host Mode) + Fail2Ban 完整指南

本教程适用于使用 --network host 模式运行 Nginx 容器的场景。在此模式下,Fail2Ban 配置比 Bridge 模式更简单,因为不需要处理 Docker 的 NAT 转发链。


📌 环境信息

  • 运行模式:Docker (Host Network)
  • 日志路径/root/nginx/log/access.log
  • 监听端口:宿主机直接监听 80/443

第一步:确认容器运行状态

请确保您已使用 Host 模式启动容器:

# 停止并删除旧容器
docker rm -f nginx01

# 启动新容器( Host 模式)
docker run -d \
  --name nginx01 \
  --restart always \
  --network host \
  -v "/root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \
  -v "/root/nginx/html:/usr/share/nginx/html" \
  -v "/root/nginx/cert:/etc/nginx/cert" \
  -v "/root/nginx/log:/var/log/nginx" \
  --add-host=host.docker.internal:host-gateway \
  nginx

第二步:配置 Fail2Ban 过滤器

我们需要创建规则来告诉 Fail2Ban 什么是恶意行为。

1. 防恶意扫描( Bad Request )

拦截扫描敏感文件(如 .env, wp-login.php)的攻击者。

sudo nano /etc/fail2ban/filter.d/nginx-bad-request.conf
[Definition]
failregex = ^<HOST> - - .* "(GET|POST|HEAD) .*\.(php|asp|aspx|jsp|cgi|env|git|yml|sql|bak|tar|gz|zip|rar|sh) HTTP.*" (400|401|403|404) .*$
            ^<HOST> - - .* "(GET|POST|HEAD) .*/(phpmyadmin|admin|setup|manager|dashboard|wp-login|xmlrpc).* HTTP.*" (400|401|403|404) .*$
ignoregex =

2. 防高频 CC 攻击( Anti-Flood )

拦截请求频率过高的 IP ,但排除静态资源(图片、CSS 等)以免误封。

sudo nano /etc/fail2ban/filter.d/nginx-cc.conf
[Definition]
failregex = ^<HOST> - - .* "(GET|POST|HEAD).*HTTP.*" .*$
# 忽略图片、CSS 、JS 等静态资源
ignoregex = \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg|mp4|webm) HTTP

第三步:配置监狱(jail.local

这是 Host 模式与 Bridge 模式最大的区别点。**Host 模式下,我们不需要指定 chain = DOCKER-USER**。

sudo nano /etc/fail2ban/jail.local
[DEFAULT]
# 白名单 IP:即使这些 IP 触发规则也不会被封
# 建议加上 localhost
ignoreip = 127.0.0.1/8 192.168.0.0/16 10.0.0.0/8

# 默认封禁时间:1 小时
bantime  = 1h
# 查找时间窗口:10 分钟
findtime = 10m
# 最大尝试次数:5 次
maxretry = 5

# --- Host 模式动作配置 ---
# 直接使用标准 iptables-multiport 即可,无需指定 chain
banaction = iptables-multiport

# ==========================================
# 规则 1:防止恶意扫描
# ==========================================
[nginx-bad-request]
enabled  = true
logpath  = /root/nginx/log/access.log
filter   = nginx-bad-request
port     = 80,443
maxretry = 3
bantime  = 24h

# ==========================================
# 规则 2:防止 CC 攻击
# ==========================================
[nginx-cc]
enabled  = true
logpath  = /root/nginx/log/access.log
filter   = nginx-cc
port     = 80,443
findtime = 60
# 允许每分钟 120 次非静态资源请求
maxretry = 120
bantime  = 2h

第四步:重启与验证

1. 重启 Fail2Ban

sudo systemctl restart fail2ban

2. 验证状态

sudo fail2ban-client status

应看到以下两个监狱处于活动状态:

  • nginx-bad-request
  • nginx-cc

3. 验证防火墙规则

检查 INPUT 链( Host 模式走这里):

sudo iptables -L INPUT -n

确认规则中出现针对目标 IP 的 DROPREJECT 记录,表示封禁生效。


完成!
您的 Nginx 容器已在 Host 模式下成功集成 Fail2Ban ,具备抵御恶意扫描与 CC 攻击的能力。