跳到正文
Træfɪk

使用 WAF 保护 API 访问

Traefik Hub 功能

此中间件仅在 Traefik Hub 中可用。进一步了解 Traefik Hub 的高级功能。

Traefik Hub API Gateway 中的 Coraza Web 应用防火墙中间件,为常见 Web 应用攻击提供全面防护。该中间件支持 Coraza 规则语法,并兼容 OWASP 核心规则集(CRS),让您可以使用由安全社区维护、经过验证的安全规则。

基础 WAF 防护

要通过自定义安全规则保护应用,请应用以下配置:

apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: waf-protection
  namespace: apps
spec:
  plugin:
    coraza:
      directives:
        - SecRuleEngine On
        - SecRule REQUEST_URI "@streq /admin" "id:101,phase:1,t:lowercase,log,deny"
        - SecRule ARGS "@detectSQLi" "id:102,phase:2,block,msg:'SQL Injection Attack Detected',logdata:'Matched Data: %{MATCHED_VAR} found within %{MATCHED_VAR_NAME}'"

此配置包含三条安全指令,它们协同保护应用:

  • SecRuleEngine On:激活 WAF 引擎,开始处理传入请求。没有此指令,无论如何配置,其他所有规则都不会启用。

  • 管理路径保护:第二条规则通过检查请求 URI,阻止对 /admin 路径的所有访问。这样可以完全阻止访问管理界面,此类界面通常包含用户管理、系统配置或数据库管理工具等敏感功能。规则在阶段 1(请求头处理)触发,并将内容转换为小写以识别 /Admin 或 /ADMIN 等变体。

  • SQL 注入检测:第三条规则使用 Coraza 内置检测引擎,扫描请求参数(查询字符串和表单数据)中的 SQL 注入模式。ARGS 变量涵盖 ?id=1 等查询字符串参数,以及 username=admin&password=123 等 POST 请求的表单数据,但不包含 cookie。SQL 注入攻击尝试通过用户输入注入恶意 SQL 代码,以操控数据库查询。检测到攻击后,规则会阻止请求,并记录攻击尝试的详细信息,包括哪个参数包含恶意载荷。

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: protected-app
  namespace: apps
spec:
  entryPoints:
    - websecure
  routes:
  - match: Path(`/my-app`)
    kind: Rule
    services:
    - name: whoami
      port: 80
    middlewares:
    - name: waf-protection
kind: Deployment
apiVersion: apps/v1
metadata:
  name: whoami
  namespace: apps
spec:
  replicas: 3
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
      - name: whoami
        image: traefik/whoami

---
apiVersion: v1
kind: Service
metadata:
  name: whoami
  namespace: apps
spec:
  ports:
  - port: 80
    name: whoami
  selector:
    app: whoami

使用 OWASP 核心规则集实现高级防护

OWASP 核心规则集提供经过实战检验的规则,防御常见攻击模式。要使用它实现全面防护,请应用以下配置:

apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: waf-crs-protection
  namespace: apps
spec:
  plugin:
    coraza:
      crsEnabled: true
      directives:
        - SecRuleEngine On
        - SecDefaultAction "phase:1,log,auditlog,deny,status:403"
        - SecDefaultAction "phase:2,log,auditlog,deny,status:403"
        - SecAction "id:900110, phase:1, pass, t:none, nolog, setvar:tx.inbound_anomaly_score_threshold=5, setvar:tx.outbound_anomaly_score_threshold=4"
        - SecAction "id:900200, phase:1, pass, t:none, nolog, setvar:'tx.allowed_methods=GET POST'"
        - Include @owasp_crs/REQUEST-911-METHOD-ENFORCEMENT.conf
        - Include @owasp_crs/REQUEST-949-BLOCKING-EVALUATION.conf

此高级配置通过异常评分实现 OWASP 核心规则集(CRS)防护:

  • 阶段 1 和阶段 2 的 SecDefaultAction:设置请求处理阶段的默认行为。阶段 1 处理请求头,阶段 2 处理请求体。规则匹配时,会将事件同时记录到标准日志和审计日志,然后以 403 状态码拒绝请求。

  • 异常评分配置:第一条 SecAction 设置异常分数阈值,其中 inbound_anomaly_score_threshold=5 表示阻止评分达到或超过 5 的请求,outbound_anomaly_score_threshold=4 对响应应用相同逻辑。此评分系统允许多个可疑模式累积分数,而不是首次检测到就阻止,从而在保持安全性的同时减少误报。

  • 允许的方法配置:第二条 SecAction 将 HTTP 方法限制为只允许 GET 和 POST 请求。这可阻止 PUT、DELETE、PATCH 或 OPTIONS 等潜在危险方法,防止修改服务器资源或泄露系统信息。

  • METHOD-ENFORCEMENT 规则集:REQUEST-911-METHOD-ENFORCEMENT.conf 文件强制实施上述允许的 HTTP 方法策略。它将传入请求与允许的方法进行比对,并为不允许的方法增加异常分数。

  • BLOCKING-EVALUATION 规则集:REQUEST-949-BLOCKING-EVALUATION.conf 文件根据配置的阈值评估累计异常分数。如果总分超过阈值,就会触发阻止操作,防止请求到达应用。

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: crs-protected-app
  namespace: apps
spec:
  entryPoints:
    - websecure
  routes:
  - match: Path(`/my-app`)
    kind: Rule
    services:
    - name: whoami
      port: 80
    middlewares:
    - name: waf-crs-protection
kind: Deployment
apiVersion: apps/v1
metadata:
  name: whoami
  namespace: apps
spec:
  replicas: 3
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
      - name: whoami
        image: traefik/whoami

---
apiVersion: v1
kind: Service
metadata:
  name: whoami
  namespace: apps
spec:
  ports:
  - port: 80
    name: whoami
  selector:
    app: whoami

警告

从 Traefik Hub v3.11.0 开始,Coraza 要求对 /tmp 拥有读写权限。此要求来自 Coraza 引擎的上游变更。

高级配置

高级选项和详细规则配置见参考页面。

WAF 中间件支持通过 Coraza 指令进行广泛自定义。您可以创建自定义规则、调整检测阈值、配置日志级别,并集成外部威胁情报源。完整的规则编写指南,请参阅 Coraza 文档和 OWASP CRS 文档。


在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。

为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。


版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证