在通过CDN对外提供服务时,为了保障资源的安全性,我们建议对请求进行访问权限控制,避免被恶意用户请求,提升业务在CDN上的安全性。
准备工作
1.已经添加完成的CDN域名
2.阿里云CDN控制台。
基础介绍
在使用CDN前,一般鉴权和响应均在源站完成。如下图,当终端用户对资源发起请求时,请求到达源站先校验是否符合权限控制规则,如果鉴权通过,源站再响应终端用户所请求的内容。
当业务使用CDN后,可能面临两个问题:
- 如果CDN在命中缓存时直接返回内容给终端用户,无需回源站,那此时源站的鉴权规则不会被触发。
- 如果鉴权token参数通过请求的query携带(例如:http://test.aliyun.com/test.mp4?token=1234×tamp=12345),由于鉴权参数值频繁变化,此时,CDN视为独立请求回源站进行鉴权,每次都无法共享缓存,导致无法享受正常缓存加速的效果。
那这两个问题如何解决呢?我们需要鉴权和响应拆分为两个环节去处理,其中的鉴权动作拆分到CDN节点执行,响应由源站和CDN节点共同完成。
如下图,当终端用户对资源发起请求时,请求到达CDN节点,由CDN节点校验是否符合权限控制规则。如果鉴权通过,CDN节点再执行内容响应动作:
- 节点本地已有缓存时,CDN节点将直接响应给用户,无需源站处理;
- 节点本地无缓存时,CDN节点将逐级回源拉取,直至回到源站获取。
了解鉴权功能的实现位置后,我们再一起学习CDN已经开放的鉴权功能,概览信息参考下表,常见功能将在下文介绍,您可以根据需求选择性阅读。在配置时,也可以通过基础防护组合进阶防护的方式,共同完成加强防护等级的目的。针对常用的基础防护和进阶防护,下文将为您具体介绍其工作逻辑及配置方法。如果您需要使用特殊防护中的功能,可以在控制台申请开通,参考产品文档进行配置。
类别 |
功能 |
效果 |
优点 |
缺点 |
安全指数 |
基础防护 |
Referer防盗链 |
通过配置访问的 Referer黑名单和白名单来实现对访客身份的识别和过滤 |
配置简单,定向防护 |
过滤方式单一,可能被伪造 |
★☆☆ |
IP黑白名单 |
通过配置IP黑名单和白名单来实现对访客身份的识别和过滤 |
配置简单,定向防护 |
过滤方式单一,可能被伪造 |
★☆☆ |
|
UA黑白名单 |
通过配置 UserAgent黑名单和白名单来实现对访客身份的识别和过滤 |
配置简单,定向防护 |
过滤方式单一,可能被伪造 |
★☆☆ |
|
进阶防护 |
URL鉴权 |
通过配置URL鉴权功能保护用户站点的资源不被非法站点下载盗用 |
安全性相对简单配置功能较高,无法伪造 |
被抓取URL后,在有效期内仍有遭受攻击可能。 |
★★★ |
远程鉴权 |
通过配置远程鉴权功能,对发送到 CDN边缘节点上的用户请求进行校验,避免CDN节点上的资源被非授权用户访问。 |
鉴权逻辑可根据业务需求自定义规则,调整便捷度高,安全度可控 |
源站需要部署鉴权服务器,客户需要有开发能力 |
★★★ |
|
特殊防护 |
频次控制 |
遭受恶意CC攻击导致响应缓慢,可通过频次控制功能拦截恶意流量,阻断访问该网站的所有请求,提升网站的安全性。 |
专注对CC的防护。 |
目前需要开通DCDN WAF支持 |
★★☆ |
区域封禁 |
一键阻断来自指定区域的访问请求,解决部分地区高发的恶意请求问题。 |
按照区域划分,拦截面较大 |
目前需要开通DCDN WAF支持 |
★★☆ |
|
DCDN WAF |
结合边缘Web应用防火墙WAF能力,将业务流量进行恶意特征识别及防护,将正常、安全的流量回源到 服务器 |
对请求行为有分析识别能力,阻断常规攻击注入手段。 |
目前需要开通DCDN WAF支持 |
★★★ |
基础防护
配置入口:登录CDN控制台,在左侧导航栏,单击域名管理,单击目标域名对应的管理,单击访问控制,在 Referer防盗链/IP黑白名单/UA黑白名单 区域,单击修改配置。
Referer防盗链(推荐)
基于HTTP协议支持的Referer机制,通过请求header中携带的Referer头部跟踪来源,对来源进行识别和判断。
以下图为例,该请求发出时,浏览器自动携带了请求头referer:https://cdn.console.aliyun.com/,代表该请求来源为阿里云CDN控制台域名,被请求域名可以通过referer防盗链控制放行或者拒绝该referer的请求。
- 配置时,支持黑名单机制或白名单机制:
- 黑名单:仅黑名单内域名禁止访问该资源
- 白名单:仅允许白名单内域名访问该资源
- 配置需要放行/限制的域名即可,支持通配符*匹配多个子域名。
- 重定向URL:针对不在白名单或针对在黑名单中被拦截的请求返回302及重定向地址,默认为空时,被拦截将返回403状态码。
- 允许通过地址栏直接访问资源URL:在浏览器地址栏中直接输入URL地址进行访问时,其来源为空,因此请求头部中默认不会携带referer。
- 如允许此类不携带referer访问请求,建议勾选开启。
- 如果该域名下资源的所有请求都会携带referer,可以保持关闭。
- 精确匹配:开启后,referer鉴权时为精确匹配规则内容,不会匹配规则的子目录。
- 忽略scheme:referer鉴权时候忽略referer请求头中的协议部分。
IP黑白名单
IP黑白名单
通过对客户端真实IP或客户端建联IP进行限制,实现仅部分IP用户可访问,或特定用户IP不允许访问的需求。支持输入IP段,限制某个地址段用户的访问。
- 客户端真实IP:用户请求中x-forwarded-for请求头携带的第一个IP
- 客户端建联IP:客户端与CDN节点之间建连使用的IP
默认情况下,仅校验客户端真实IP,如需校验建联IP需通过提交工单申请。配置时,支持黑名单机制或白名单机制:
- 黑名单:仅黑名单内IP禁止访问该域名
- 白名单:仅白名单内IP允许访问该域名
UA黑白名单
User-Agent是HTTP请求头的一部分,包含用户访问时所使用的操作系统及版本、浏览器类型及版本等标识信息。
配置UA黑白名单后,用户请求资源时,CDN将获取用户请求时HTTP请求头中的User-Agent字段,同配置中的黑/白名单进行匹配。
以下图为例,该请求发出时,浏览器自动携带了请求头
user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
代表该请求来源的客户端信息,被请求域名可以通过user-agnet黑白名单控制放行或者拒绝该UA的请求。
一般适用于限制特定UA的终端请求,或对当客户端携带特定UA才允许放行的场景适用。
配置时,支持黑白名单两种防护方式,配置规则时支持通配符*匹配,多个值时使用 | 分割,例如 *curl*|*IE*|*chrome*|*firefox*。
如果需要对空UA(不携带UA 或 UA值为空)限制,规则的值可以配置用 ^$ 表示。
进阶防护
如果您的业务对URL资源安全性要求较高,担心基础防护无法满足安全性需求,可以了解URL鉴权和远程鉴权功能,两者均能实现较高的安全防护。
配置入口:登录CDN控制台,在左侧导航栏,单击域名管理,单击目标域名对应的管理,单击访问控制,在 URL鉴权/远程鉴权 区域,单击修改配置。
URL鉴权(推荐)
URL鉴权功能通过阿里云CDN加速节点与客户资源站点配合,形成了更为安全可靠的源站资源防盗方法。主要由以下几个部分配合:
- 源站应用服务器:根据鉴权URL生成规则(包括鉴权算法、密钥)生成鉴权URL返回给客户端。
- 客户端:发起资源请求,并发送鉴权URL给CDN节点进行验证。
- CDN节点:对鉴权URL中的鉴权信息(鉴权字符串、时间戳等)进行验证。
开启鉴权前访问URL:http://DomainName/timestamp/md5hash/FileName
开启鉴权后访问URL:http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash(A类鉴权为例)
当用户携带的时间戳或鉴权凭证错误时,访问到达CDN节点后将被拒绝,返回状态码403。
URL鉴权支持三种鉴权的签算算法:
- A方式
http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash
- B方式
http://DomainName/timestamp/md5hash/FileName
- C方式
格式1:http://DomainName/FileName{&KEY1=&KEY2=}
格式2:http://DomainName/{/}/FileName
三种方式在安全等级上一致,但URL的构造形式有所区别,如果不需要混淆URL,选择方式A即可,如果有混淆URL的需求,可以选择方式B或者C,算法详情请参考产品文档说明。
注意:
- 如果您是线上域名,需要确保业务已经携带正确鉴权参数后,再点击确定开启功能,防止开启后因鉴权失败导致业务无法访问。
- 如果您已关闭URL鉴权,请删除业务中携带的鉴权参数,或,配置忽略参数缓存,避免业务因鉴权参数无法命中缓存(开启鉴权时自动忽略鉴权参数缓存)。
远程鉴权
如果您觉得URL鉴权的算法模式单一,无法满足业务的定制化鉴权诉求,您也可以通过远程鉴权,通过自行维护的鉴权服务器用于自主管理。
① 用户发起的资源访问请求到达CDN节点,请求中携带了鉴权参数。
② CDN节点收到用户请求,将用户请求直接转发(或者经过指定的规则处理后转发)给鉴权服务器。
③ 鉴权服务器根据用户请求中携带的鉴权参数给出鉴权结果,并返回给CDN节点。
④ CDN节点根据鉴权服务器返回的鉴权结果执行对应的动作,并返回对应的数据给用户。
鉴权结果举例如下:
举例1:鉴权成功,CDN节点与用户开始正常的缓存数据访问交互。
举例2:鉴权失败,CDN节点返回404状态码给用户。(失败状态码可自定义)
举例3:鉴权失败,CDN节点对用户访问进行限速。
举例4:鉴权超时,CDN节点执行鉴权超时的默认动作,即放行或者拒绝用户请求。
在配置远程鉴权时,您需要指定以下信息
- 鉴权服务器的地址,CDN转发鉴权请求时所使用的请求方法,以及是否需求针对特定文件类型鉴权。
- 请求鉴权服务器时,访问URL中的请求参数是否需要全部保留转发。
- 鉴权服务器返回的状态码,具体如何判断鉴权成功或失败。
- 如果鉴权服务器返回鉴权失败,CDN需要返回什么状态码给客户端。
- 鉴权服务器多久未响应时判定为超时,超时后应判断本次鉴权通过还是拒绝。
带宽上限阈值
如果您担心存在突发流量导致的损失,可以为域名设置封顶带宽。带宽封顶,即通过设置带宽上限,来控制带宽用量。当指定加速域名在统计周期(1分钟)内产生的平均带宽超出预设上限,CDN将停止为该域名提供加速服务,且该域名会被解析到无效地址offline.***.com,无法被继续访问。
注意:触发封顶后业务将无法继续被访问,非限速策略。
配置入口:登录CDN控制台,在左侧导航栏,单击域名管理,单击目标域名对应的管理,单击流量限制,单击修改配置。
- 域名带宽小于上限:域名正常使用CDN加速服务。
- 突发流量,域名带宽达到或超过带宽上限:域名将会自动下线,并通过CNAME域名被解析到无效地址offline.***.com,无法被继续访问。
- 突发流量恢复正常,域名带宽重新小于带宽上限:CDN默认不会自动恢复加速服务,您需要在CDN控制台手动启用该域名来恢复CDN加速服务。如果您需要恢复业务,可以在CDN控制台的域名管理页面,选中该域名,单击启用,重新启用该域名。
小提示:
- 开启带宽封顶功能后,您的域名会受到带宽封顶的限制而下线。为了不影响您的域名业务,建议您合理评估,谨慎设置您的带宽峰值。
- 由于带宽的监控数据存在一定的延迟,因此域名将在带宽达到峰值后10分钟左右被下线。
结束
至此,访问控制及带宽阈值的介绍及使用部分已经结束,在下个章节中,我们会继续学习CDN监控与计量相关内容,主要包含内容有:
- 如何查看边缘访问/回源的状态码分布、带宽、流量等信息。
- 如何分区域/运营商查看业务带宽分布。
- 如何配置CDN的业务监控告警规则。
更多边缘云产品资讯欢迎访问【阿里云边缘云】或扫码关注【阿里云Edge Plus】
边缘云 开启分布式云网融合新时代