百度云防护WAF 自定义规则「回源标记」使用场景与操作教程

一、功能概述

「回源标记」是百度云 Web 应用防火墙(WAF)自定义规则中的一种处置动作。当请求匹配设定的条件时,WAF 不会拦截请求,而是在转发到源站时,自动为该请求 追加自定义 HTTP Header。源站可根据该 Header 的值进行相应的业务逻辑处理。

核心思路:WAF 负责识别 → Header 负责传递 → 源站负责决策


二、使用场景

场景 1:灰度发布 / AB 测试

将特定 IP 段(如公司内部 IP、测试团队 IP)的请求标记为 X-Canary: true,源站读取后分流到灰度环境。

配置项
规则名称灰度流量标记
匹配条件IP 属于 10.0.0.0/8, 172.16.0.0/12
处置动作回源标记
Header 名称X-Canary
Header 内容true

场景 2:恶意爬虫”静默降级”

识别已知爬虫 IP 但不直接拦截,标记为 X-Bot-Score: high,源站返回降级内容(如低清图片、延迟加载),让爬虫抓取到价值较低的数据,同时不影响正常用户体验。

配置项
规则名称爬虫降级标记
匹配条件IP 属于 已收集的爬虫IP列表
处置动作回源标记
Header 名称X-Bot-Score
Header 内容high

场景 3:VIP 用户 / 白名单识别

将高价值客户 IP 标记后,源站提供优先级更高的服务(如限流豁免、专用通道)。

配置项
规则名称VIP 客户标记
匹配条件IP 属于 VIP客户IP段
处置动作回源标记
Header 名称X-User-Level
Header 内容vip

场景 4:地理位置标记

结合匹配条件中的地区字段,为不同地域流量添加标记,源站据此返回本地化内容。

配置项
规则名称海外流量标记
匹配条件地区 属于 海外
处置动作回源标记
Header 名称X-Geo-Region
Header 内容overseas

场景 5:安全审计标记(先观察后处置)

对可疑流量仅添加标记而不拦截,源站记录日志并分析,确认恶意后再升级为「拦截」。

配置项
规则名称可疑流量审计标记
匹配条件URI 包含 /api/v2/admin IP 不属于 内网IP段
处置动作回源标记
Header 名称X-Security-Flag
Header 内容suspicious

三、操作教程

第一步:进入 WAF 控制台

  1. 登录 百度智能云控制台
  2. 在左侧导航栏找到 安全 → Web 应用防火墙 WAF
  3. 选择需要配置的防护域名,进入规则管理页面

第二步:添加自定义规则

  1. 点击 自定义规则 标签页
  2. 点击 添加规则 按钮,弹出配置弹窗

第三步:填写基本信息

  • 规则名称:输入有意义的名称,如 灰度流量标记(1~40 字符,支持中英文、数字、/_
  • 接入类型:根据你的 WAF 接入方式选择
  • SaaSWAF:通过 CNAME 接入的 SaaS 模式

第四步:配置匹配条件

  1. 选择匹配字段:点击下拉框,可选字段包括:
  • IP — 客户端 IP 地址
  • URI — 请求路径
  • Method — 请求方法(GET/POST 等)
  • Header — 请求头
  • Cookie — Cookie 值
  • 地区 — 访问来源地区
  • 等更多字段
  1. 选择逻辑运算符:字段不同,可选运算符不同,常见有:
  • 属于 / 不属于 — 用于 IP、地区等集合匹配
  • 包含 / 不包含 — 用于字符串模糊匹配
  • 等于 / 不等于 — 精确匹配
  • 正则匹配 — 高级模式匹配
  1. 填写匹配值:在文本框中输入匹配内容
  • IP 地址示例:1.1.1.1/24, 2.2.2.2(逗号分隔或回车确认,最多 200 个)
  • 暂不支持正则表达式
  1. 添加多条件(可选):点击 + 添加「且」条件,最多叠加 5 个条件,所有条件 同时满足 才会触发规则

第五步:选择生效模式

模式说明适用场景
永久生效规则始终有效长期策略
按时间段生效指定起止时间临时活动、应急响应
按周期生效设置周期性时间窗口仅工作时间生效、周末放行等

第六步:设置处置动作为「回源标记」

  1. 处置动作 中选择 回源标记
  2. 展开后填写两个子字段:
  • Header 名称:自定义的 HTTP 头名称,如 X-CanaryX-Bot-Score
  • Header 内容:Header 的值,如 truehighvip

⚠️ 注意:Header 名称建议使用 X- 前缀,这是自定义头的约定规范,避免与标准 HTTP 头冲突。

第七步:选择防护站点

在底部 防护站点 区域,勾选需要该规则生效的域名/站点。

第八步:保存规则

确认无误后点击 确定,规则即刻生效。


四、源站端配合配置

WAF 端配置完成后,源站需要读取该 Header 进行业务处理。以下为常见框架的代码示例:

Nginx

location / {
    # 读取 WAF 传递的标记
    if ($http_x_canary = "true") {
        proxy_pass http://canary_backend;
        break;
    }
    proxy_pass http://main_backend;
}

Java (Spring Boot)

@GetMapping("/api/data")
public ResponseEntity<?> getData(
        @RequestHeader(value = "X-Canary", required = false) String canaryFlag) {

    if ("true".equals(canaryFlag)) {
        // 灰度逻辑:返回实验性数据
        return ResponseEntity.ok(canaryService.getData());
    }
    return ResponseEntity.ok(mainService.getData());
}

Node.js (Express)

app.get('/api/data', (req, res) => {
    const canaryFlag = req.headers['x-canary'];

    if (canaryFlag === 'true') {
        return res.json(canaryService.getData());
    }
    res.json(mainService.getData());
});

Python (Flask)

@app.route('/api/data')
def get_data():
    canary_flag = request.headers.get('X-Canary')
    if canary_flag == 'true':
        return jsonify(canary_service.get_data())
    return jsonify(main_service.get_data())

五、验证与调试

1. 检查 Header 是否正确传递

使用 curl 从匹配的 IP 发起请求,检查响应或源站日志:

# 在源站侧抓包查看
tcpdump -A -i eth0 'tcp port 80' | grep -i "X-Canary"

2. 查看规则命中情况

在 WAF 控制台 → 自定义规则列表,查看该规则的 命中次数/统计,确认规则是否按预期触发。

3. 先用「观察」模式测试

首次部署建议先将处置动作设为 观察,确认匹配条件和命中情况无误后,再改为 回源标记


六、常见问题

Q1:回源标记和拦截有什么区别?

对比项回源标记拦截
请求是否到达源站✅ 是(带额外 Header)❌ 否
用户体验影响无感知返回拦截页面
源站是否需要改造需要(读取 Header)不需要
适用场景灰度、审计、降级直接阻断攻击

Q2:可以同时设置多个回源标记规则吗?

可以。不同规则可设置不同的匹配条件和不同的 Header 名称/值。当请求同时匹配多条规则时,WAF 会将所有匹配的 Header 都追加到回源请求中。

Q3:Header 名称有限制吗?

  • 建议使用 X- 前缀
  • 不要使用标准 HTTP 头名称(如 HostContent-Type),以免覆盖原有值
  • 名称应简洁明确,方便源站识别

Q4:匹配条件的「且」和「或」如何理解?

  • 同一规则内的多个条件为 且(AND) 关系,必须全部满足
  • 不同规则之间为 或(OR) 关系,命中任意一条即触发
  • 如需更复杂的逻辑,可以拆分为多条规则

七、最佳实践

  1. 命名规范:规则名称采用 场景_说明 格式,如 灰度_内部IP标记,便于后期管理
  2. 先观察后标记:新建规则先用「观察」模式验证命中情况,确认无误再改为「回源标记」
  3. Header 值标准化:统一定义枚举值(如 true/falsehigh/medium/low),避免源站解析混乱
  4. 定期审计:定期检查规则的命中统计,清理长期无命中的规则
  5. 文档记录:每个回源标记 Header 的含义、取值、来源规则应记录在团队 Wiki 中,方便协作

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧