企业级 WAF 应该如何选择?
WAF 选型不是比规则条数。真正在生产环境中起作用的是三件事:误杀成本、能否表达你自己的业务逻辑、以及谁来维护它。文中给出 Cloudflare 的真实门槛。
直接回答: 决定 WAF 能不能在生产环境里用起来的是三件事:一次误杀的业务代价、规则语言能不能表达你自己的业务逻辑、以及上线之后谁长期维护它;规则条数是糟糕的替代指标。Cloudflare 这条线上,实际可用的起步点是 Pro——因为 Cloudflare 托管规则集和 OWASP 核心规则集从 Pro 才开始提供;自定义规则数量在 Free / Pro / Business 上分别限制为 5 / 20 / 100 条,正则表达式需要 Business 及以上,Log 动作和 WAF 攻击评分是 Enterprise 才有。
真正决定 WAF 采购的三件事
厂商对比通常先讲规则条数和 OWASP 覆盖。这两项都不能预测半年后这台 WAF 是否还在帮你。能预测的是:
- 误杀成本。每一次误拦合法请求,都是一次丢单、一次登录失败或一张工单。问题不是「它能拦住多少攻击」,而是「我能承受它对多少流量判断错误,以及多快能纠正」。
- 对业务逻辑的表达力。一台懂 SQL 注入却不懂你结账流程的 WAF,会在大促那天拦住你自己的客户。你必须能针对自己的端点、参数和调用方写规则。
- 谁维护它。托管规则需要归属:有人review检测结果、调阈值、决定某条规则何时从 log 转为 block。没人拥有的 WAF 会滑向「拦掉所有看起来奇怪的」,然后滑向被关掉。
WAF 由什么组成,按什么顺序执行
| 组件 | 作用 | 执行顺序 |
|---|---|---|
| HTTP DDoS 托管规则集 | 在任何规则评估之前先吸收洪水 | 第 1 位 |
| 自定义规则 | 你自己的逻辑:路径、ASN、请求头、调用方 | 第 2 位 |
| 限流规则 | 按键控制请求速率 | 第 3 位 |
| 托管规则(Cloudflare / OWASP) | 通用攻击特征 | 最后 |
| 应用画像(Application Profiles) | 学习你的应用正常流量长什么样 | 检测与分析层 |
这个顺序比看上去更重要。托管规则放在最后,正是因为它最容易对你的流量判断错误;而你对自己业务确定的事情,应该在它参与判断之前就已经被处理完。
签约前要跑的五个测试
1. 你能看见 WAF 看到的东西吗? Enterprise 才提供 cf.waf.score——1 到 99,1 表示几乎可以肯定是恶意,99 表示极可能是干净的;100 表示请求到达打分系统但未被打分,Logpush 里的 0 表示根本没到那个阶段。分类字段对应 attack(1–20)、likely_attack(21–50)、likely_clean(51–80)、clean(81–99)。数值分与 sqli/xss/rce 子分值仅 Enterprise 可用;分类字段从 Business 起可用。 看不见分值,你就无法调优任何东西——只能猜。
2. 你能写出描述自己业务的规则吗? 自定义规则条数为 5 / 20 / 100 / 1,000,正则表达式需 Business 及以上。Log 动作仅 Enterprise——这是个真实约束,因为「先观察后阻断」正是避免误杀的办法。
3. 你期望的托管覆盖率在你的套餐上真的存在吗? Free Managed Ruleset 全套餐可用,但 Cloudflare Managed Ruleset 与 OWASP Core Ruleset 在 Free 上不可用,从 Pro 起才有。Sensitive Data Detection 仅 Enterprise。要按套餐核实覆盖,而不是假设宣传清单适用于你的档位。
4. 你能调阈值,还是只能二选一地阻断? WAF 侧的调节旋钮是 OWASP 的 score threshold:Low ≥ 60、Medium ≥ 40、High ≥ 25;偏执等级 PL1–PL4,默认 PL1。选某个等级意味着启用该等级及以下的所有规则,所以提高偏执度会同时提高覆盖率与误杀率。(注意:敏感度 High/Medium/Low/Essentially Off 属于 DDoS 托管规则集,不属于 WAF——这个混淆制造了大量无法落地的需求。)
5. 你需要多租户或账号级策略吗? WAF for SaaS 仅 Enterprise,账号级 WAF 配置同样如此。如果你要让客户用自己的域名接入,这不是可选附加项,而是产品本身。
各组件如何叠加
Cloudflare 能力 vs 团队职责
| 事项 | Cloudflare 提供的 | 你的团队必须做的 |
|---|---|---|
| 通用攻击覆盖 | 托管规则集;Cloudflare 与 OWASP 规则集从 Pro 起 | 为每条规则承担 log→block 的决策 |
| 业务专属策略 | 自定义规则(条数受套餐限制,正则需 Business+) | 依据真实流量编写并评审规则,而不是套模板 |
| 检测可见性 | Enterprise 提供 cf.waf.score 及子分值;Business 起提供分类 |
建立检测结果的review闭环 |
| 行为基线 | Application Profiles——先在 Profile Analysis 中观察 | 决定哪些画像升级为阻断规则 |
| 多租户策略 | WAF for SaaS(Enterprise) | 定义每租户的覆盖规则与归属人 |
| 应用层正确性 | — | 输入校验、授权判断、参数化查询;WAF 不能替代这些 |
边界与不适用情况
- WAF 不是输入校验层。它检查请求,但不知道你的代码拿这些请求做了什么。参数化查询、输出编码与授权判断仍是应用层工作。
- WAF 不是 DDoS 产品。流量型与协议型洪水由 DDoS 层处理,WAF 处理载荷层攻击。买一个不等于覆盖另一个。
- 分值不是判决。低分值是证据,不是证明。支付、改密码、导出这类高价值操作,应把分值与应用场景结合判断,而不是仅凭分值阻断。
- 偏执等级是取舍,不是可以拉满的旋钮。选择 PLn 会启用 n 及以下的所有规则。偏执度升高时,覆盖率与误杀率同时上升;要靠度量来移动它,而不是靠热情。
- 没有归属人的规则会腐化。每条自定义规则都应有作者、原因与复审日期。事故中临时加的规则若从不回看,就会成为下一次事故。
FAQ
免费套餐有 OWASP 覆盖吗? 没有。Free Managed Ruleset 全套餐可用,但 Cloudflare Managed Ruleset 与 OWASP Core Ruleset 从 Pro 起才有。如果 OWASP 覆盖是采购硬指标,Pro 是底线。
为什么我们不能把规则设成只记录? 自定义规则的 Log 动作仅 Enterprise。低套餐的实际替代做法有两种:先对范围很窄的表达式使用挑战动作,或者先用 Application Profiles 在分析模式下观察,再决定是否需要规则。
到底需要多少条规则? 比厂商暗示的少。少数几条范围清晰、描述你自己端点、调用方与速率预期的规则,通常胜过从模板复制的一大堆。条数是质量的糟糕代理指标。
偏执等级越高越安全吗? 不是。偏执等级与误杀率同步上升。「更安全」等于「拦住的攻击减去被拦的合法请求」,而第二项在你没有度量的情况下离开 PL1 之后增长得更快。
相关阅读
参考来源
以下为 Cloudflare 官方文档页面,本文涉及的功能可用性、配额与限制以此为准;功能会随产品更新变化,以控制台实际可见项为准。
- developers.cloudflare.com/waf/
- developers.cloudflare.com/waf/managed-rules/
- developers.cloudflare.com/waf/custom-rules/
- developers.cloudflare.com/waf/detections/attack-score/
- developers.cloudflare.com/waf/detections/application-profiles/
- developers.cloudflare.com/waf/managed-rules/reference/owasp-core-ruleset/concepts/
- developers.cloudflare.com/cloudflare-for-saas/security/waf-for-saas/