1.
概述:为什么在CDN上分发mp4必须做防盗链
- 防止流量被第三方盗用导致带宽成本激增。
- 保护版权与付费内容,避免未经授权的嵌入与传播。
- 降低源站压力,避免缓存击穿与高并发请求直击VPS/主机。
- 减少DDoS放大面,避免攻击者利用开放资源制造高额账单。
- 提升统计准确性,确保播放量、付费转化数据可信。
2.
常见防盗链策略概览(优缺点对比)
- Referer白名单:实现简单,但易被伪造或空Referer绕过。
- 签名URL(Signed URL/Token):安全性高,支持时效与路径绑定,但需保密密钥与合理过期策略。
- Cookie/会话鉴权:适合登录用户,防止匿名嵌入,但对第三方播放器支持有限。
- Geo/IP封禁与速率限制:有效阻挡异常源,但可能误伤合法用户。
- CDN边缘脚本/边缘函数(Edge Workers):灵活可扩展,可在CDN层完成鉴权与防刷。
3.
签名URL(Token)实现细节与数据示例
- 签名方式:常用HMAC-SHA256,Base64URL编码,不包含"+"或"/"。
- 生效策略:签名携带expiry=unix_timestamp,path=/video/*.mp4,key_id用于密钥轮换。
- 示例签名生成(伪示例):signature = base64url(HMAC-SHA256(secret_key, path + expiry))。
- 推荐参数:签名密钥长度 >= 32 字节,签名有效期通常 60–3600 秒(视业务而定)。
- CDN边界配置:在边缘校验signature和expiry,过期或不匹配则返回403/302。
表格:示例环境配置(居中,边框1,表内文字居中)
| 项 | 示例值 |
| 源站 VPS IP | 203.0.113.42 |
| CDN 节点数 | 120(全球) |
| 签名密钥长度 | 32 字节 |
| 签名有效期 | 300 秒 |
| 缓存 TTL(mp4) | 3600 秒 |
4.
Referer白名单与绕过防范技巧
- 不仅检查Referer,还应检查Host/Origin以及是否为预期的播放页。
- 对空Referer做二次判定:若为空则结合IP/UA/请求频率判断是否放行。
- 使用短期签名作为Referer的加强:即便Referer被伪造也需签名校验。
- 对常见代理或爬虫User-Agent实行更严格阈值或直接封禁。
- 日志记录Referer与UA,用于离线行为分析与规则优化。
5.
源站(nginx)与CDN联合配置示例(真实案例摘录)
- 真实案例:某教育平台A,日均外发流量峰值 2.3TB,因未鉴权被盗链导致额外费用约 $450/天,部署签名URL+边缘缓存后流量降幅 85%。
- nginx(源站)示例片段(简化):
- location /protected/ {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_cache_valid 200 1h;
add_header Cache-Control "public, max-age=3600";
}
- CDN端配置:在边缘校验 signature 与 expiry;未通过返回 403。缓存命中率目标 > 92%。
- 建议参数:源站带宽预留 1.5x 平均峰值,缓存TTL按更新频率设定(静态视频可长缓存)。
6.
DDoS与流量异常防护:与防盗链策略联动
- 结合WAF和速率限制:例如 per-IP 限制 100 req/s,突发 200 req/s 突发桶。
- 启用SYN Cookies与连接限制,防止三次握手耗尽VPS资源。
- 使用CDN流量清洗(scrubbing)服务和黑洞路由策略,设置阈值如 500k PPS 或 10Gbps 自动触发。
- 与防盗链配合:出现大量无签名或无Referer请求时自动拉黑来源ASN/国家。
- 日志与告警:当非签名请求占比 >5% 且总流量急升 >30% 时自动告警并触发防护策略。
7.
运维、监控与密钥管理建议
- 日志采集:记录 edge_id、client_ip、url、referer、signature、expiry、response_code。
- 告警指标:签名校验失败率、非白名单Referer请求数、缓存未命中率、流量突增速。
- 密钥轮换:建议密钥每 30–90 天轮换一次,支持 key_id 回溯验证短期旧密钥。
- 回放与压测:定期做签名回放测试与并发压测(例如 10k 并发模拟),验证边缘限流与源站承载。
- 部署检查表:证书与域名解析、CDN证书匹配、源站防火墙规则、备份/恢复流程。
来源:安全与鉴权要点 在把mp4视频加到cdn时必须配置的防盗链策略