云与基础设施安全

CDN (内容分发网络)

约 3 分钟阅读

什么是 CDN

CDN (Content Delivery Network,内容分发网络) 是一种将内容缓存在分布于全球各地的边缘服务器上,并从距离用户最近的服务器进行分发的系统。它减少了因物理距离造成的网络延迟 (时延),提高网站加载速度。

CDN 的基本工作原理是通过 DNS 将用户请求路由到最近的边缘服务器,由边缘服务器返回缓存的内容。如果内容未被缓存 (缓存未命中),边缘服务器会从源站获取内容,缓存后再分发。后续对相同内容的请求直接从边缘缓存提供,无需到达源站。

CDN 的安全效果

CDN 不仅在加速方面,在安全方面也发挥着重要作用。

  • DDoS 攻击的缓解:CDN 的边缘网络具备吸收大规模流量的能力。攻击流量在到达源站之前就在边缘被分散、阻断,因此可以保住源站的可用性
  • 源站的隐藏:让流量经由 CDN,就能对外隐藏源站服务器的 IP 地址,使攻击者难以直接攻击源站
  • TLS/SSL 的终止:在 CDN 的边缘终止 TLS,可以把证书管理集中到一处。HSTS 头的下发也能在边缘完成
  • WAF 的整合:许多 CDN 提供商都集成了 WAF 功能,能在边缘阻断 SQL 注入、XSS 等攻击。CloudFront + AWS WAF、Cloudflare WAF 是其中的代表

CDN 部署注意事项

CDN 并非万能,部署时有若干需要考虑的地方。

  • 缓存的一致性:即使更新了内容,在缓存的 TTL (Time to Live) 到期之前仍会分发旧内容。需要把缓存清除 (失效) 的机制纳入运维流程
  • 防止敏感信息被缓存:要正确设置 Cache-Control 头,避免含有个人信息或认证令牌的响应被缓存到边缘。用 Cache-Control: no-store 可以确实地阻止敏感响应被缓存
  • 限制对源站的直接访问:即便部署了 CDN,只要还能直接访问源站服务器,DDoS 缓解的效果就会减半。应在源站的安全组中只允许来自 CDN 的 IP 段的访问
  • DNS 的设置:要使用 CDN,必须把域名的 DNS 记录指向 CDN 的端点。需要设置 CNAME 或 ALIAS 记录,并制定考虑了 DNS 传播时间的切换计划
  • 成本结构:CDN 的费用按数据传输量和请求数计费。对于大文件下载或视频流媒体网站,成本可能相当高,部署前需要评估投入产出
  • 排查的复杂度:出现问题时,判断原因究竟在 CDN 的缓存、边缘的设置还是源站,会变得更复杂。需要配套的日志与监控设置

CDN 架构与缓存策略

正确理解 CDN 的缓存行为、设计恰当的策略,是性能优化的关键。

边缘位置的层级结构:大规模的 CDN 大多具有两层结构,一层是距离用户最近的「边缘 PoP (Point of Presence)」,另一层是位于边缘与源站之间的「源站盾 (中间缓存层)」。启用源站盾后,来自多个边缘 PoP 的缓存未命中会汇聚到源站盾,从而大幅减少发往源站服务器的请求数。

Cache-Control 头的设计:缓存策略要按内容的种类区别对待。

  • Cache-Control: public, max-age=31536000, immutable:文件名中带哈希的静态资源 (CSS、JS、图片)。缓存一年,在文件名改变之前不再校验
  • Cache-Control: public, max-age=3600, s-maxage=86400:HTML 页面。浏览器缓存设为 1 小时、CDN 缓存设为 24 小时,让 CDN 一侧缓存得更久
  • Cache-Control: no-store:已认证的响应或含个人信息的页面。完全不缓存

缓存键的设计:缓存键决定了什么会被视作相同的内容。默认以 URL 作为缓存键,但也可以把查询字符串、头部 (Accept-Language 等) 和 Cookie 纳入键的一部分。缓存键过于细致会拉低缓存命中率,因此应以最少的必要要素来设计。

缓存的失效 (清除):内容更新时让缓存立即生效的办法有两种,一是按路径清除 (删除特定 URL 的缓存),二是整体清除 (删除全部缓存)。把清除动作嵌入部署流水线、让内容更新与缓存更新联动,是运维上的最佳实践。

CDN 安全功能详解

许多 CDN 已超越单纯的缓存层,作为综合性的安全平台发挥作用。

DDoS 缓解的机理:CDN 的边缘网络拥有远超单一源站所能承受的巨大带宽,可以吸收容量型的 DDoS 攻击。第 3/4 层的攻击 (SYN 洪泛、UDP 洪泛) 会在边缘被自动丢弃,第 7 层的攻击 (HTTP 洪泛) 则通过速率限制与异常检测来应对。由于源站服务器不会直接遭到攻击,即使基础设施规模不大也能顶住大规模攻击。

机器人管理:识别正规爬虫 (Googlebot 等) 与恶意机器人 (爬取器、凭证填充机器人),只阻断恶意的一方。判定会综合运用 JavaScript 挑战、CAPTCHA、行为分析等手法。

在边缘终止 TLS:在 CDN 的边缘终止 TLS,既能加密用户与边缘之间的通信,又能让边缘与源站之间作为内部网络高效通信。对 TLS 1.3、HTTP/2、HTTP/3 (QUIC) 的支持也能在边缘一侧统一管理,无需改动源站服务器的设置就能升级协议。

地理访问控制:可以在 CDN 的边缘判定用户的地理信息 (国家、地区),对来自特定国家的访问进行阻断或重定向。常用于切断来自受制裁国家的访问,或实施授权地区的限制。

常见误解

部署了 CDN 就不需要源站安全措施了
CDN 是源站前方的防御层,但存在绕过 CDN 直接访问源站的可能性。源站本身的安全措施 (补丁更新、访问控制、加密) 仍然必要。
CDN 只有大型网站才需要
即使是小型网站也能从 CDN 中获益良多。DDoS 缓解、自动 TLS 证书管理和全球分发速度提升不受网站规模限制。也有提供免费方案的 CDN 服务商,小型网站可以零成本开始导入。
分享

相关术语

相关文章