如何配置 Traefik 的 Coraza WAF 中间件防御常见 Web 攻击

发布时间:2026/9/9 13:15:04
如何配置 Traefik 的 Coraza WAF 中间件防御常见 Web 攻击 如何配置 Traefik 的 Coraza WAF 中间件防御常见 Web 攻击【免费下载链接】traefikThe Cloud Native Application Proxy项目地址: https://gitcode.com/GitHub_Trending/tr/traefik如果你的应用跑在 Traefik Hub API Gateway 后面需要抵御 SQL 注入这类常见 Web 攻击可以启用 Coraza WAF 中间件。它支持 Coraza 规则语法并兼容 OWASP Core Rule SetCRS让你直接复用社区维护的成熟安全规则。本文给出两条配置路径用自定义规则做基础防护以及启用 OWASP CRS 做全面防护并说明如何把中间件绑定到路由上。先明确一个前提Coraza WAF 中间件只在 Traefik Hub API Gateway 中提供开源版 Traefik Proxy 不包含该中间件开源版本有另一个基于 WASM 的 Coraza 插件文档指出 Hub 原生中间件的性能至少是其 23 倍以上。准备条件使用 Traefik Hub API Gateway不是开源 Traefik Proxy。从Traefik Hub v3.11.0开始Coraza 需要对/tmp目录有读写权限这是 Coraza 上游引擎变更引入的要求部署时注意保证。文档示例使用traefik/whoami镜像作为后端服务来承载流量落到真实应用时把 Service、Deployment 中的名称与端口替换成你自己的服务。方式一自定义 Coraza 规则做基础防护第一步创建一个Middleware资源在spec.plugin.coraza.directives里写入 Coraza 指令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 引擎。缺少这条指令时其余规则全部不生效所以它必须放在规则列表里。/admin路径防护规则在 phase 1处理请求头阶段检查REQUEST_URI并施加lowercase转换因此/Admin、/ADMIN这类大小写变体也会被拦截动作是deny。SQL 注入检测phase 2 用detectSQLi扫描请求参数。ARGS变量覆盖查询字符串参数如?id1和 POST 表单数据如usernameadminpassword123不包含 Cookie。命中时阻断请求并通过logdata记录具体是哪个参数命中了恶意载荷。第二步创建IngressRoute把中间件挂到路由上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第三步部署文档示例中的后端服务Deployment加Service3 副本的traefik/whoamiService 端口 80供路由指向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 Core Rule Set 全面防护如果需要覆盖更多攻击模式可以在中间件里启用 CRS 规则集。把crsEnabled设为true后规则集就可以通过Include owasp_crs/...引用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_threshold5, setvar:tx.outbound_anomaly_score_threshold4 - SecAction id:900200, phase:1, pass, t:none, nolog, setvar:tx.allowed_methodsGET POST - Include owasp_crs/REQUEST-911-METHOD-ENFORCEMENT.conf - Include owasp_crs/REQUEST-949-BLOCKING-EVALUATION.conf这份配置的关键点phase 1 / phase 2 的默认动作phase 1 处理请求头phase 2 处理请求体。规则命中时先写入标准日志和审计日志log,auditlog然后以403状态码拒绝请求deny,status:403。异常评分阈值inbound_anomaly_score_threshold5表示请求评分达到 5 及以上才被阻断outbound_anomaly_score_threshold4对响应侧同理。评分制允许多个可疑模式累积分而不是首次命中就拦截。允许的 HTTP 方法只放行GET和POSTPUT、DELETE等不在列表中的方法会被计入异常评分。REQUEST-911-METHOD-ENFORCEMENT.conf执行上面定义的方法白名单策略。REQUEST-949-BLOCKING-EVALUATION.conf把累计异常评分与阈值比较超过阈值就触发阻断请求不会到达你的应用。配套的IngressRoute与方式一相同只是中间件名称换成waf-crs-protectionapiVersion: 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验证防护是否生效文档描述的行为如下可以据此判断 WAF 是否按预期工作方式一向/admin包括大小写变体发起请求会被deny规则拦截携带 SQL 注入模式的参数请求会被阻断日志中带有SQL Injection Attack Detected消息和命中的参数信息Matched Data: ... found within ...。方式二规则命中时事件会同时写入标准日志和审计日志请求以 403 状态码被拒绝异常评分超过阈值请求 5 分 / 响应 4 分的请求才会被阻断未达阈值的请求照常通过。配置字段速查字段说明默认值是否必填directives要执行的 WAF 规则列表—是crsEnabled启用 CRS 规则集启用后可在中间件中通过Include owasp_crs/...使用false否更详细的字段说明见 WAF 中间件参考页完整示例来自 Secure API Access with WAF。限制与注意事项该中间件是 Traefik Hub 专属功能开源 Traefik Proxy 无法按本文方式配置。Traefik Hub v3.11.0 起必须保证 Coraza 对/tmp的读写权限否则无法满足引擎运行要求。文档示例中的评分阈值、方法白名单GET POST等都是示例值调整这些值属于规则调优写法应参考 Coraza 文档和 OWASP CRS 文档本文不额外给出经验性建议。【免费下载链接】traefikThe Cloud Native Application Proxy项目地址: https://gitcode.com/GitHub_Trending/tr/traefik创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考