本方案旨在通过Web应用防火墙(Web Application Firewall,简称WAF)为已接入内容分发网络(CDN)的域名提供安全防护。通过在CDN回源链路上部署WAF,实现对HTTP/HTTPS流量的实时检测与清洗,确保仅正常业务流量到达源站,有效抵御Web攻击。
适用范围
-
适用架构:本文适用于“CDN+ECS”的动静混合架构,旨在确保静态资源继续由CDN加速的同时,由WAF专注于保护动态资源。若业务采用“CDN+OSS”纯静态托管架构,因OSS仅存储静态文件且不存在应用层攻击风险,接入WAF提供的防护有限,反而会增加回源链路与访问延迟,故不建议接入。
-
操作前提:目标域名已接入阿里云 CDN、DCDN 或其他厂商的 CDN 服务。
-
操作说明:本文以阿里云 CDN 为例阐述操作步骤,其逻辑同样适用于 DCDN 或其他厂商的 CDN 服务,操作时请参照执行。
-
业务影响:建议在业务低峰期执行本文操作,以最小化对业务的影响。
选择合适的接入方式
WAF支持与其他云产品协同部署以构建纵深防御体系。在未接入WAF的架构中,用户请求经DNS解析至CDN节点后直接回源,导致攻击流量与正常业务流量直达源站服务器。
WAF提供CNAME接入与云产品接入两种模式,具体对比如下。请结合业务架构特性,选择适配的接入方案。
|
对比项 |
云产品接入 |
CNAME接入 |
|
方案优势 |
无需调整CDN回源配置,对业务影响较小,适用于快速接入场景。 |
适用场景广泛,功能限制较少,支持跨账号及跨云部署。 |
|
接入对象 |
阿里云云产品实例。 |
域名。 |
|
使用限制 |
|
配置稍复杂,需配置CDN回源、获取真实客户端IP等。 |
如需了解更多的接入方式对比与原理介绍,请参见接入概述。
操作步骤
-
开通WAF(仅限WAF未开通时):若尚未开通WAF服务,请访问Web应用防火墙3.0(按量付费)购买页,初次使用建议选择付费模式为按量付费。具体购买流程,请参见开通WAF 3.0按量付费实例。
-
前往WAF控制台:登录Web应用防火墙控制台,在顶部菜单栏,选择WAF实例的资源组和地域(中国内地、非中国内地),然后在左侧导航栏,单击接入管理。
-
接入资产:从CNAME接入或云产品接入中选择一种方式完成资产接入。
说明以下操作需参考CDN已配置的信息。为确保配置准确,请先前往CDN控制台确认域名、回源等相关配置后再继续操作。
CNAME接入
-
在CNAME接入页签,单击接入。在配置监听页面,需要关注以下配置。
配置项
说明
域名
填写已接入CDN的域名,仅支持填写一个需防护的域名,包括精确域名(如
www.aliyundoc.com)或通配符域名(如*.aliyundoc.com)。协议类型与端口
请根据CDN已配置的回源协议与回源端口进行选择:
-
协议选择:需与CDN回源协议保持一致。
-
端口选择:需与CDN回源端口保持一致。
默认情况下,当CDN回源端口配置为443时,使用HTTPS协议回源;其余端口则使用HTTP协议回源。
若使用HTTPS协议,需上传与域名匹配的证书文件。若该证书此前已上传至本账号的数字证书管理服务,可直接选择已有证书进行配置。
WAF前是否有七层代理(高防/CDN等)
由于业务前置了CDN,必须在此处选择是。若配置错误,WAF将无法获取真实客户端IP,导致报表数据将所有请求来源显示为CDN节点。
-
客户端IP判定方式选择【推荐】取指定Header字段中的第一个IP作为客户端源IP,避免XFF伪造。
-
指定Header字段填写
ali-cdn-real-ip。这是阿里云CDN回源请求中默认携带的、用于存储真实客户端IP的HTTP请求头。
说明阿里云CDN回源请求中用于存储真实客户端IP的字段为
ali-cdn-real-ip。若使用其他CDN产品,请查阅其官方文档以确认对应的字段名称。此外,也可以通过配置CDN增加自定义出站请求头,来使用自定义的回源字段。
-
-
单击下一步,进入配置转发页面,填写服务器地址后,单击提交。
此处的服务器地址应与CDN控制台填写的源站地址一致。
-
在接入完成页,单击复制CNAME。
-
前往CDN控制台。单击域名管理,定位至接入WAF的域名,单击操作列的管理。在源站信息区域,单击操作列的编辑,将源站信息修改为上一步复制的CNAME地址。此操作将CDN回源路径指向WAF。
重要当存在以下场景时,还需执行相应的额外配置:
-
CDN回源HOST配置:若已配置默认回源HOST,需同步进行修改,将CDN回源路径指向WAF。
-
静态文件绕过WAF:为减少性能损耗,若需使客户端对静态文件的请求绕过WAF,需配置CDN条件源站或将相关资源加入WAF白名单。
-
源站记录真实客户端IP:若需在源站服务器(如Nginx的 access.log)记录真实客户端IP,需配置源站以提取真实IP字段。详细信息,请参见获取客户端真实 IP。
-
CNAME接入高级功能:WAF的CNAME接入方式支持HTTPS、IPv6、回源负载均衡及高可用等高级功能。如需自定义相关配置,请参见通过CNAME接入为网站开启WAF防护。
云产品接入
-
在云产品接入页签,选择需接入的云产品类型,以ECS实例为例,单击云服务器 ECS,然后定位至目标实例,单击其操作列的立即接入。
说明若接入其他云产品,请参照以下配置项,并依据对应的云产品接入文档完成配置。
-
在弹出的立即接入页面,单击操作列的添加端口,根据CDN已配置的回源协议与回源端口进行选择:
-
协议选择:需与CDN回源协议保持一致。
-
端口选择:需与CDN回源端口保持一致。
默认情况下,当CDN回源端口配置为443时,使用HTTPS协议回源;其余端口则使用HTTP协议回源。
若使用HTTPS协议,需上传与域名匹配的证书文件。若该证书此前已上传至本账号的数字证书管理服务,可直接选择已有证书进行配置。配置完成后单击确定。
-
-
返回立即接入页面,由于业务前置了CDN,必须在WAF前是否有七层代理(高防/CDN等)区域,选择是。若配置错误,WAF将无法获取真实客户端IP,导致报表数据将所有请求来源显示为CDN节点。
-
客户端IP判定方式选择【推荐】取指定Header字段中的第一个IP作为客户端源IP,避免XFF伪造。
-
指定Header字段填写
ali-cdn-real-ip。这是阿里云CDN回源请求中默认携带的、用于存储真实客户端IP的HTTP请求头。
说明阿里云CDN回源请求中用于存储真实客户端IP的字段为
ali-cdn-real-ip。若使用其他CDN产品,请查阅其官方文档以确认对应的字段名称。此外,也可以通过配置CDN增加自定义出站请求头,来使用自定义的回源字段。
-
-
单击确定完成接入。
-
-
验证测试:在浏览器输入接入的网站域名,测试CDN与WAF接入是否成功。
-
在域名后输入Web攻击代码(例如
<被防护域名>/alert(xss),alert(xss)为用作测试的跨站脚本攻击代码),如果返回405拦截提示页面,表示攻击被拦截,WAF防护成功。 -
按F12打开浏览器开发者工具,刷新页面后切换至Network页签。单击目标静态资源,在Headers页签中定位至X-Cache字段,若显示hit而非miss,即表示命中缓存,CDN加速生效。

-
-
配置WAF自定义防护规则:WAF为接入的对象默认启用一系列防护规则,适用于日常防护场景,可以在页面查看。当默认规则无法满足业务需求时(例如需将具备特定特征的请求加入白名单予以放行),可新建或修改防护规则。更多信息,请参见防护配置概述。
常见问题
CNAME接入后,WAF控制台显示“DNS解析未知,域名启用了代理”怎么办?
使用CNAME接入方式时,控制台出现此提示属于正常现象。这是因为域名的DNS解析直接指向了CDN,导致WAF无法直接获取解析状态,无需关注此提示。
如需确认接入是否成功,请参照前文提到的验证测试步骤进行实际测试即可。
接入WAF完成后,是否需要刷新CDN缓存?
通常无需刷新CDN缓存。但在特定配置变更下,需手动执行刷新操作。具体说明如下:
-
无需刷新的情况
仅完成WAF接入配置,未对源站内容进行任何变更。由于源站静态资源未发生改变,CDN节点现有缓存依然有效。
-
需要刷新的情况
存在以下任一情况时,需手动刷新CDN缓存以确保配置生效:
-
修改了源站的静态资源文件。
-
调整了与缓存策略相关的HTTP响应头。
-
启用了WAF的Bot管理功能,并配置了自动集成Web SDK。
-
接入完成后访问网站提示重定向的次数过多怎么办?
通常是因为源站服务器配置了 HTTP 强制跳转 HTTPS 的规则,导致流量在 WAF/CDN 与源站之间形成了死循环。
需要在源站服务器的前一跳设备上,将回源协议配置为 HTTPS。根据采用的接入方式,具体配置位置如下:
-
CNAME 接入:前一跳设备为 WAF。
-
云产品接入:前一跳设备为 CDN。
更多信息,请参见重定向次数过多的解决方案。