配置边缘安全加速 ESA 的 WAF 自定义规则后,可能遇到规则不生效、误拦截正常用户、规则冲突或套餐功能受限等问题。参照以下场景化排查指南,可快速定位原因并解决。
快速定位
根据遇到的现象,快速跳转到对应场景:
现象 | 最可能的原因 | 快速跳转 |
设置了拦截规则但请求仍然通过 | 匹配条件配置错误 | |
正常用户或搜索引擎被 403 拦截 | 规则条件过于宽泛 | |
多条规则行为与预期不符 | 规则优先级或执行顺序问题 | |
删除规则后仍然拦截 / 新增规则未立即生效 | 规则缓存或生效延迟 | |
控制台选项灰色不可用 / 保存时报错 | 套餐版本不支持该功能 |
基础知识:WAF 自定义规则的工作原理
WAF 自定义规则的执行遵循以下优先级顺序(从高到低):
IP 访问规则:IP 黑白名单
白名单规则:最高优先级,命中后跳过所有后续安全检查
扫描防护规则:识别扫描行为并自动拦截
托管规则:ESA 内置的安全规则集
自定义规则:用户自定义的匹配条件和执行动作
频次控制规则:基于请求频率的限制
如果一个请求被白名单命中,后续的自定义规则和托管规则都不会执行。排查规则不生效时,需先确认是否有更高优先级的规则放行了该请求。
通用排查步骤
遇到 WAF 规则问题时,建议先通过事件分析确定触发规则的类型,再跳转到对应场景排查:
场景一:规则配置后未生效
典型现象:设置了自定义拦截规则,但异常请求仍然能到达源站。
1.1 "等于"与"包含"混用
问题:URI 设置为"等于 /forum.php",但实际请求是 /forum.php?mod=misc&action=postreview(带查询参数),导致无法匹配。
解决:将匹配条件从等于改为包含。两种匹配方式的区别如下:
匹配方式 | 说明 | 示例 |
等于(精确匹配) | 仅匹配完全一致的字符串,带查询参数的 URL 无法命中 |
|
包含(模糊匹配) | 只要请求路径包含指定字符串就匹配 |
|
验证:修改规则后,发送测试请求并到事件分析页面确认该请求已被规则命中。
除非需要精确匹配一个固定 URL(不含参数),否则建议使用包含。
1.2 空 Referer 的正确匹配方式
问题:想拦截空 Referer 请求,设置了 Referer 长度小于 3,但部分空 Referer 请求仍通过。
解决:空 Referer 存在两种情况,需分别处理:
Referer 字段不存在(请求头未携带 Referer):选择 Referer 不存在。
Referer 字段存在但值为空(值为空字符串或
-):选择 Referer 存在且长度小于1。
建议同时配置两条规则(用 OR 连接)以覆盖全部场景。
验证:分别使用不携带 Referer 和携带空 Referer 的请求测试,到事件分析页面确认两种请求均被命中。
1.3 泛域名通配符不支持
问题:设置 Referer"不等于 *.example.com"想拦截外站引用,但通配符 * 不生效。
解决:WAF 自定义规则的等于 / 不等于条件不支持泛域名通配符。将匹配方式改为不包含example.com。
验证:修改规则后,到事件分析页面确认外站引用请求已被拦截。
1.4 IP"不等于"条件的理解误区
问题:设置"客户端 IP 不等于 114.x.x.x 则拦截",但 114 开头的 IP 仍被拦截。
解决:检查规则是否同时设置了主机名等其他条件。多个条件使用 AND 连接时,所有条件都需同时满足。如果主机名条件未正确匹配,整条规则不会生效。
验证:修改规则后,到事件分析页面确认目标 IP 的请求已被正确放行。
1.5 第一次访问未被自定义规则拦截
问题:设置了拦截规则,但第一次访问正常,第二次才被拦截。
解释:托管规则和频次控制规则需要先收集请求特征,第一次请求属于正常访问,第二次访问如果命中规则条件则会被拦截。自定义规则的拦截动作通常首次即生效,如果第一次未生效,请检查匹配条件是否正确。
1.6 主机名条件未设置
问题:规则配置了 URI 拦截条件,但未指定主机名,导致规则对所有域名生效或对预期域名不生效。
解决:
为规则添加主机名匹配条件。
如果规则需要仅对特定域名生效,必须配置主机名匹配条件。
验证:修改规则后,到事件分析页面确认规则仅对目标域名的请求生效。
场景二:规则误拦截了正常用户
典型现象:配置 WAF 规则后,正常用户无法访问网站、图片不显示、搜索引擎无法收录、第三方服务失效。
2.1 搜索引擎爬虫被拦截(影响 SEO 收录)
现象:Googlebot、Baiduspider 等搜索引擎爬虫被 WAF 拦截,网站搜索排名下降、广告推广失效。
解决:
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏选择。
添加白名单条件:User Agent 包含
Googlebot或Baiduspider。执行动作选择跳过全部规则。
验证:添加白名单后,到事件分析页面确认爬虫请求不再被拦截。
基础版套餐仅支持 2 条白名单规则。如果白名单名额不够用,可将 IP 类的加白移至 IP 访问规则处理。
2.2 手机端或第三方引用图片被拦截
现象:电脑浏览器正常,手机端查看网站图片加载失败;网站图片无法被复制到微信公众号等第三方平台。
根因:配置了空 Referer 拦截规则,但手机浏览器或第三方平台请求图片时可能不携带 Referer。
解决:
将引用来源域名(如
mp.weixin.qq.com)添加到白名单。检查是否存在跨域引用(如
www.example.com引用img.example.com),跨域来源也需添加到 Referer 白名单。如果需要防盗链但不影响正常引用,改为拦截 Referer 存在但不包含自己域名的请求。
验证:修改规则后,使用手机浏览器访问网站,确认图片正常加载。
2.3 API 接口被 JS 挑战拦截
现象:后端 API 调用返回了 HTML 页面(挑战页面)而非预期的 JSON 数据。
根因:JS 挑战需要浏览器环境执行 JavaScript,后端 API 请求无法完成挑战。
解决:
为 API 路径添加白名单,跳过安全规则:条件为 URI 路径包含
/api/。或将自定义规则的执行动作从 JS挑战改为拦截或观察。
对于支付回调、Webhook 等第三方回调接口,同样需要通过白名单放行。
验证:修改规则后,调用 API 接口确认返回正常的 JSON 数据。
2.4 Google Ads 或百度推广着陆页被拦截
现象:广告平台的着陆页被 ESA 挑战页面替代,广告平台检测到异常。
解决:
为广告着陆页 URL 添加白名单,配置跳过安全规则。
将 User Agent 包含
AdsBot-Google或Baiduspider的请求加入白名单。
验证:添加白名单后,通过广告平台的验证工具确认着陆页可正常访问。
场景三:多条规则冲突或优先级异常
典型现象:配置了多条自定义规则,实际执行结果与预期不符。
3.1 规则执行顺序
自定义规则按照从上到下的顺序依次匹配。一旦请求命中某条规则,即执行该规则的动作,不再继续匹配后续规则。
排查步骤:
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏选择。
检查规则列表的排列顺序。
使用拖拽功能调整规则优先级。
将更具体的规则(如特定 IP 放行)放在更宽泛的规则(如全局拦截)之前。
验证:调整顺序后,发送测试请求并到事件分析页面确认命中的是预期规则。
3.2 白名单与拦截规则的关系
问题:设置了自定义拦截规则,又设置了白名单放行,但白名单似乎没有生效。
解释:白名单规则的优先级高于所有自定义规则。如果白名单未生效,请检查白名单的匹配条件是否正确配置。
验证:通过事件分析页面确认请求是否命中了白名单规则。如果未命中,检查白名单的匹配条件。
3.3 频次控制与自定义规则的叠加
问题:同时配置了频次控制和自定义规则,请求被重复处理。
解释:频次控制和自定义规则是独立执行的。一个请求可能同时命中频次控制和自定义规则,分别执行各自的动作。建议通过白名单统一管理需要放行的请求。
场景四:规则增删后效果延迟或不符合预期
4.1 规则修改后的生效时间
问题:修改或删除了 WAF 规则,但短时间内效果未变化。
解释:WAF 规则变更通常在 1~2 分钟内全球生效。如果超过 5 分钟仍未生效:
清除浏览器缓存后重试。
确认修改的是正确的站点和规则。
检查是否有其他规则(如托管规则)仍在拦截。
验证:等待 2 分钟后,发送测试请求并到事件分析页面确认规则变更已生效。
4.2 删除规则后仍然出现 403
问题:删除了所有自定义拦截规则,但访问仍返回 403。
排查步骤:
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏,选择。
查看 403 响应对应的规则 ID,确认是自定义规则还是托管规则拦截的。
如果是托管规则拦截,在左侧导航栏选择,调低安全等级或关闭对应规则组。
验证:调整托管规则后,重新访问目标 URL,确认不再返回 403。
4.3 缓存与 WAF 规则的交互
问题:刷新缓存后 WAF 规则行为发生变化。
解释:ESA 的缓存层位于 WAF 层之前。如果请求命中缓存(HIT),直接返回缓存内容,不经过 WAF 检查。因此:
被 WAF 拦截的请求不会被缓存。
已缓存的内容不受后续 WAF 规则变更影响,需要刷新缓存才能使新规则对已缓存的 URL 生效。
场景五:套餐版本功能限制
典型现象:WAF 自定义规则配置页面的部分选项灰色不可用或保存时报错。
5.1 常见版本限制
功能分类 | 详细功能项 | 免费版(0 元/月) | 基础版(9.9 元/月) | 标准版(375 元/月) | 高级版(3600 元/月) | 企业版(联系销售定制) |
5条 | 10条 | 50条 | 100条 | 100条 | ||
1条 | 1条 | 3条 | 5条 | 10条 | ||
频次控制-统计时长枚举 | 10秒 |
|
|
|
| |
频次控制-持续时间枚举 | 10秒 |
|
|
|
| |
频次控制-特征 | 客户端IP |
|
|
|
| |
频次控制-在缓存请求上应用 | ||||||
50条 | 200 条 | 300 条 | 400 条 | 400 条 | ||
1条 | 2条 | 3条 | 5条 | 10条 | ||
支持基础规则 | 支持基础规则 | 支持全部规则 | 支持全部规则 | 支持全部规则 | ||
5条 | 10条 | 20条 | ||||
严格滑块 | ||||||
账号级别配额,默认规则条数上限10条。 | ||||||
DDoS告警 | ||||||
四层代理(含四层DDoS防护) | ||||||
5.2 规则数量超限(OverQuota)
现象:保存规则时提示 Phase.HttpCustom.RulesetPerPhase.Length.OverQuota。
解决:
删除不再需要的规则,腾出名额。
合并多条相似规则(使用 OR 逻辑连接多个条件)。
升级套餐以获取更多规则配额。
5.3 部分匹配条件不可用
现象:自定义规则的请求方法或标头等选项灰色不可选。
解决:当前套餐版本不支持该匹配条件。如需使用,请升级套餐。
通过 API 批量管理 WAF 规则
如需批量管理 IP 黑白名单(如 2~3 万个 IP)或定时自动更新规则,可通过 OpenAPI 管理 WAF 规则。ESA 提供以下 OpenAPI 接口:
API | 说明 |
ListWafRules | 查询 WAF 规则列表 |
CreateWafRule | 新增 WAF 规则 |
UpdateWafRule | 修改 WAF 规则 |
DeleteWafRule | 删除 WAF 规则 |
BatchCreateWafRules | 批量创建规则 |
通过阿里云 CLI 调用示例:
# 查询 WAF 规则列表
# 站点 ID 可在 ESA 控制台的站点概览页获取
aliyun esa ListWafRules --SiteId <站点ID> --Phase HttpCustom如需封禁大量 IP,建议使用 IP访问规则而非自定义规则:
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏选择。
批量添加 IP 地址,或通过 API 批量操作进行拦截。
IP 访问规则的 IP 黑名单和自定义规则的 IP 拦截功能等价,但 IP 访问规则不占用自定义规则名额。
配置示例
拦截敏感文件路径
以下示例拦截 .git 和 .env 等敏感文件路径的访问请求:
条件 | 匹配字段 | 操作 | 值 |
条件 1 | URI 路径 | 包含 |
|
条件 2(OR) | URI 路径 | 包含 |
|
执行动作:拦截
请根据业务实际需求调整匹配条件,避免误拦截合法请求。例如拦截 .json 文件时,建议使用更精确的路径(如 package.json、composer.json)而非通配所有 .json 请求。
仅允许中国内地访问
条件 | 匹配字段 | 操作 | 值 |
条件 1 | 地域 | 不等于 | 中国内地 |
执行动作:拦截
Referer 防盗链配置
以下示例允许空 Referer 和自身域名访问,拦截其他来源的请求:
规则 | 条件 | 执行动作 |
规则 1(白名单) | Referer 不存在 | 跳过所有安全规则 |
规则 2(白名单) | Referer 包含 | 跳过所有安全规则 |
规则 3(拦截) | 所有请求 | 拦截 |