1.
概述与架构设计要点
- 明确角色:源站(Origin)、边缘节点(Edge/CDN)、回源通道。
- 选择模式:建议采用CDN Pull(边缘按需回源)或Push(预推流量较大时);对直播选SRT/RTMP推流到边缘,再由边缘分发。
- Anycast与多线BGP:优先使用Anycast+多运营商以降低单点链路风险;配置健康检查与权重回源策略,避免单一节点过载。
2.
TLS/证书与传输加固实操
- 申请证书:推荐使用Let's Encrypt或CA证书,并在边缘与回源均启用TLS。
- 强制安全组合:在Nginx中启用TLS1.2/1.3,禁用TLS1.0/1.1;配置强加密套件,如 ECDHE+AESGCM。示例:ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers '...';
- 启用OCSP Stapling与HSTS:ssl_stapling on; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
- 对RTMP/推流通道使用专用证书或单独域名,防止混淆。
3.
签名URL与防盗链配置(实操步骤)
- 原理:通过带有效期的签名参数阻止外链与代刷。
- 生成签名:在应用层用HMAC-SHA256对path+expiry+secret加密,生成token。示例伪码:token = HMAC_SHA256(secret, path + expiry); URL = /video.mp4?expiry=1650000000&token=xxx
- Nginx验证(示例):使用ngx_lua或第三方模块,在access_by_lua中解密校验;或用CDN提供的Signed URL功能直接配置密钥。
- 配置回源时传递真实客户端IP(X-Forwarded-For)以便审计。
4.
缓存策略与视频分片优化
- Cache-Control与协商缓存:设置合理的Cache-Control、Expires,针对chunk或切片(HLS/DASH)短TTL,媒体清片可适当长缓存。示例:Cache-Control: public, max-age=60, stale-while-revalidate=30。
- 分片处理:HLS/DASH采用小分片(2-4s),边缘优先缓存切片,降低回源压力。
- 支持Range请求:确保边缘和源站都允许HTTP Range以支持断点续传与播放器按需请求。
5.
边缘安全与WAF规则部署
- 启用WAF:在边缘或API网关层启用WAF(如ModSecurity、商用WAF),导入OWASP规则集:阻止SQLi、XSS、上传恶意脚本等。
- 针对视频流的特殊规则:限制非常规User-Agent、阻断异常Referer、识别并拦截采集器和爬虫。
- 定制速率规则:对某一IP/UA在短时间内大量请求播放列表或切片进行拦截并计数,配合临时封禁策略。
6.
抗DDoS实操配置要点
- CDN层吸收:优先把流量导向CDN并启用提供商的抗DDoS清洗服务(流量清洗、连接限制、缓存降级)。
- 边缘限流:在Nginx使用limit_conn_zone和limit_req_zone限制每IP并发和QPS:例如 limit_req_zone $binary_remote_addr zone=one:10m rate=20r/s; 在location中 limit_req zone=one burst=50 nodelay;
- TCP层防护:启用SYN Cookies(net.ipv4.tcp_syncookies=1),调整netfilter参数;使用iptables/nftables黑名单和hashlimit进行速率限制。
- 黑洞与BGP策略:在极端大流量下与上游/运营商配合黑洞或流量清洗;推荐Anycast与上游清洗厂商联动。
7.
系统防护与主机加固操作步骤
- 最小化服务:只开放必要端口(80/443, 1935/协议端口),关闭不使用服务。
- 防火墙规则示例(iptables):允许CDN边缘IP段或管理IP访问源站,其他默认拒绝。示例:iptables -A INPUT -p tcp -s
--dport 443 -j ACCEPT; iptables -A INPUT -p tcp --dport 443 -j DROP;
- 登录与密钥管理:禁止密码登录,使用SSH密钥并限制来源IP,启用多因素认证(MFA)。
8.监控、告警与演练(运维流程)
- 指标监控:采集边缘QPS、并发连接、回源流量、错误率、响应时延等,设置Prometheus+Grafana监控面板。
- 日志与溯源:开启详细访问日志并定期归档,结合ELK/EFK做实时检索与告警。
- 演练:定期演练回源切换、黑洞恢复、证书更新与应急脚本,形成Runbook并写入SOP。
9.问:如何在Nginx上简单实现视频签名URL验证?
- 答:可用ngx_http_lua_module在access_by_lua_block中校验。步骤:1)在应用端生成带expiry与token的URL;2)在Nginx配置access_by_lua_block读取arg.expiry与arg.token,计算HMAC并比较;3)expiry超时或token不匹配返回403。伪代码:local expected = ngx.hmac_sha256(secret, path..expiry); if expected ~= token then ngx.exit(403) end。
10.问:如何用iptables/NFT对抗SYN Flood与连接速率攻击?
- 答:先启用SYN Cookies(sysctl net.ipv4.tcp_syncookies=1),然后在iptables中限制新连接速率:示例iptables规则:iptables -N SYN_FLOOD; iptables -A INPUT -p tcp --syn -m hashlimit --hashlimit 20/s --hashlimit-burst 40 --hashlimit-mode srcip --hashlimit-srcmask 32 -j ACCEPT; iptables -A INPUT -p tcp --syn -j DROP。nftables可用ct计数与limit替代,更高效。
11.问:自建源站如何与公有CDN结合以提升抗DDoS能力?
- 答:步骤:1)把域名CNAME指向CDN,源站仅对CDN IP开放回源访问;2)在源站防火墙白名单中加入CDN边缘IP段;3)启用CDN的清洗/访问控制、WAF与速率限制;4)配置缓存规则降低回源频次,并设置Origin Shield/中继层做二次缓存;5)保留备用回源与切换策略并定期演练。这样CDN先行吸收攻击,源站只响应合法回源请求。