难度相对较高,不太适合新手,配置精简了部分,所以会有坑要填,后续再考虑补充吧,建议适当寻求AI引导部署,或者移除CrowdSec仅GeoBlock也够用,欢迎指正。
📝 1. 核心亮点
- Docker 隔离:通过
docker-socket-proxy 隐藏宿主机 /var/run/docker.sock,防止容器逃逸。
- 多层防御体系:
- CrowdSec:行为分析防火墙,自动屏蔽恶意攻击者。
- GeoBlock:通过 IP 地理位置插件拦截指定国家(配置中为 CN)的访问。
- Authelia:为无认证或弱认证应用提供 二次身份验证 (2FA/SSO)。
- 全自动化证书:通过 Cloudflare DNS-01 挑战自动获取和续签通配符 TLS 证书。
- 可观测性:集成 Jaeger (非必要)进行 OTLP 链路追踪,监控请求流转。

📂 2. 文件结构
在宿主机创建反向代理工作目录(例如 /opt/traefik),并按以下结构组织文件:
Bash
.
**── docker-compose.yml # 容器编排定义
**── traefik.yml # Traefik 静态配置文件
**── dynamic_conf.yml # Traefik 动态配置文件(路由、中间件、TLS)
**── .env # 环境变量文件(需手动创建)
**── letsencrypt/ # 自动生成,存放证书 acme.json
**── logs/ # 存放 Traefik 和业务日志
**── ban.html # CrowdSec 拦截自定义页面(非必要)
**── captcha.html # CrowdSec 验证码自定义页面(非必要)
🛠️ 3. 配置文件
🟢 3.1 环境变量 (.env)
你需要创建一个 .env 文件,替换其中的敏感信息:
代码段
TZ=Asia/Shanghai
DOMAIN_NAME=yourdomain.com
CF_API_EMAIL=youremail@example.com
CF_DNS_API_TOKEN=你的Cloudflare_API_Token
CROWDSEC_CONFIG_DIR=./crowdsec/config
CROWDSEC_DATA_DIR=./crowdsec/data
TRAEFIK_HOST_LOG_DIR=./logs/traefik
🔵 3.2 容器编排
此文件定义了四个核心服务:socket-proxy (安全)、jaeger (追踪)、traefik (网关)、crowdsec (安全)。
注意:需预先创建外部网络 docker network create MyServer。
🛡️ 4. 关键中间件逻辑说明
1. GeoBlock (地理拦截)
配置中 countries: - CN 且 blackListMode: false 的逻辑实际上是:仅允许 CN 访问,其他拦截(若要拦截中国,需将 blackListMode 设为 true)。同时它配置了 Cloudflare 的 IP 段作为白名单。
2. CrowdSec WAF
- AppSec:开启了应用层解析 (
crowdsecAppsecEnabled: true),可以深度检测 SQL 注入、跨站脚本等。
- Remediation:被拦截时返回 403 错误,并展示
ban.html。
3. TLS 策略
强制使用 TLS 1.3,并禁用了不安全的加密套件,仅保留现代强加密算法(如 Chacha20-Poly1305)。
🚀 5. 部署步骤
-
创建网络:
Bash
docker network create MyServer
-
获取 CrowdSec LAPI Key: 启动 crowdsec 后,进入容器生成 Key:
Bash
docker exec crowdsec cscli bouncers add traefik-bouncer
将生成的 Key 填入 dynamic_conf.yml 中的 crowdsecLapiKey 处。
-
准备 HTML 模板: 在目录下创建 ban.html 和 captcha.html,否则 CrowdSec 中间件可能会报错。
-
启动服务:
Bash
docker-compose up -d
🔍 6. 维护与检查
- 查看 Traefik 日志:
docker logs -f traefik
- 查看拦截记录:
docker exec crowdsec cscli decisions list
- 查看链路追踪:访问
http://<服务器IP>:16686 观察请求延迟。




附件:配置文件.zip