收起左侧

Traefik搭建接近家用天花板的waf防火墙

1
回复
315
查看
[ 复制链接 ]

0

主题

0

回帖

0

牛值

江湖小虾

难度相对较高,不太适合新手,配置精简了部分,所以会有坑要填,后续再考虑补充吧,建议适当寻求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: - CNblackListMode: 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. 部署步骤

  1. 创建网络
    Bash

    docker network create MyServer
    
  2. 获取 CrowdSec LAPI Key: 启动 crowdsec 后,进入容器生成 Key:
    Bash

    docker exec crowdsec cscli bouncers add traefik-bouncer
    

    将生成的 Key 填入 dynamic_conf.yml 中的 crowdsecLapiKey 处。

  3. 准备 HTML 模板: 在目录下创建 ban.htmlcaptcha.html,否则 CrowdSec 中间件可能会报错。

  4. 启动服务
    Bash

    docker-compose up -d
    

🔍 6. 维护与检查

  • 查看 Traefik 日志docker logs -f traefik
  • 查看拦截记录docker exec crowdsec cscli decisions list
  • 查看链路追踪:访问 http://<服务器IP>:16686 观察请求延迟。

image.png

image.png

image.png

IMG_2494.PNG

upload 附件:配置文件.zip

收藏
送赞 2
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

10

主题

108

回帖

0

牛值

fnOS系统内测组

感谢分享。看下来确实感觉GeoBlock足够拦截大多数扫描了,部署成本也低

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则