“我套了 CDN,是不是就不怕 DDoS 了?”这是站长咨询里出现频率最高的问题之一。答案是:CDN 确实能防住一部分 DDoS,但它不是万能盾牌,用错方式照样被打瘫。本文用 8 个问答讲清 CDN 防御 DDoS 的真实能力边界,以及正确的接入姿势。
Q:CDN 防御 DDoS 的原理是什么?
核心是分散攻击面。没套 CDN 时,全世界的攻击流量只需要打你一台服务器;套了 CDN 后,域名解析到 CDN 的边缘节点,攻击流量先到 CDN 的众多节点上,被分散吸收和清洗,真正穿透到源站的流量大幅减少。同时 CDN 节点本身带宽储备远大于普通服务器,配合 Anycast 调度,中小规模的流量型攻击(几 G 到几十 G)在边缘就被消化了。这也是为什么很多站长套上 CDN 后感觉网站更稳了——顺便挡掉了大量杂散攻击和扫描。
Q:CDN 能挡住哪些攻击,挡不住哪些?
先说能挡的:SYN Flood、UDP Flood 等流量型攻击的中小规模部分,会被 CDN 节点分散吸收;普通的 HTTP Flood,CDN 的缓存和请求频率限制能过滤相当一部分;零散的扫描和探测也基本进不来。
再说挡不住或者吃力的:超大流量的 DDoS(上百 G 的集群攻击)可能把 CDN 节点本身打胖,厂商可能限制你的流量或者要求升级到高防套餐;针对源站 IP 的直接攻击,CDN 完全管不着,这是最常见的情况;精准的 CC 攻击如果模拟正常浏览行为、每 IP 低频率,CDN 的基础规则很难区分,需要 WAF 层的智能识别。
Q:为什么开了 CDN 还是被打瘫了?
九成以上是因为源站 IP 泄露。CDN 只保护解析到它上面的域名,攻击者如果拿到了你源站的真实 IP,直接对 IP 发起攻击,CDN 形同虚设。常见的泄露途径包括:
- 历史 DNS 解析记录:套 CDN 之前的老 IP 还能查到(历史解析查询库很多);
- 子域名直连源站:主域名走 CDN,但 mail.xxx.com、api.xxx.com 等子域名还指向真实 IP;
- 服务器主动外联:源站发邮件、访问外部接口时暴露自己的 IP;
- SSL 证书信息、网络空间搜索引擎(FOFA、Shodan 等)按特征扫描到源站。
所以”套了 CDN 还被打瘫”几乎都不是 CDN 没用,而是防护链路绕过了 CDN。
Q:怎么防止源站 IP 泄露?
做完这几件事,源站藏住才有意义:
- 检查所有子域名:全部解析走 CDN,不留任何直连源站的记录,包括邮件服务器尽量用第三方企业邮;
- 源站防火墙白名单:服务器只允许 CDN 节点回源的 IP 段访问 80/443 端口,其他来源直接丢弃,即使 IP 泄露也打不到 80/443;
- 查历史解析:去历史解析记录站搜自己的域名,看老 IP 是否还在解析记录里,必要时换源站 IP;
- 不乱发网络特征:源站不对外发邮件,避免在空间测绘引擎里留下 HTTP 特征指纹。
iptables 白名单示例(以云厂商回源段为准,替换 IP 段):
iptables -A INPUT -p tcp --dport 443 -s 162.62.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j DROP
Q:CDN 和高防 IP 该怎么选?
两者定位不同:CDN 是”隐藏源站 + 边缘过滤”,适合长期在线的业务,顺带加速,对中小流量攻击够用,成本低;高防 IP 是”专职保镖”,把所有流量(包括超大攻击流量)引到高防机房清洗后再回源,能扛几百 G 的攻击,但平时没有加速作用,成本按防护带宽计费,明显更贵。
选择的判断标准:业务以内容展示为主、攻击多为中小规模杂散攻击,用 CDN 足够;业务价值高(金融、游戏、电商大促期)、明确会成为大流量攻击目标,或者已经被超大流量打过,上高防 IP。两者也可以叠加:CDN 负责日常,遭遇持续大流量攻击时再临时切高防。
Q:CDN 的流量费用被打爆了怎么办?
这是 CDN 防御的现实问题:攻击流量打在 CDN 上,即使防护成功,有的计费模式还是会把流量算到你头上。应对方法:
- 购买 CDN 套餐时优先选带 DDoS 防护额度的套餐,明确超出防护额度后的计费规则;
- 开启流量封顶或用量告警,超过阈值自动暂停服务或通知你,避免一夜欠费;
- 确认厂商的防护 SLA:正规厂商对”防护成功的攻击流量”不计费或计入套餐额度,这一点签约前要问清。
Q:被 DDoS 的当下,第一步该做什么?
按顺序做三件事:第一,确认攻击目标——是打 IP 还是打域名、流量多大、什么类型,先看监控和流量数据,别急着操作;第二,切换防护——如果源站 IP 已被打,先把域名解析切到 CDN/高防,让攻击流量进清洗通道;第三,源站止血——对已经穿透到源站的流量,用 iptables 限速和运营商牵制配合缓解:
# 限制单 IP 并发连接数
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 -j DROP
# SYN 参数缓解 SYN Flood
sysctl -w net.ipv4.tcp_syncookies=1
最后再复盘源站 IP 是怎么泄露的,把上一问答里的防泄露措施补齐。
Q:还有什么补充建议?
总结:CDN 能防 DDoS,但前提是源站 IP 藏得住。CDN 的价值是隐藏源站、分散流量、边缘清洗,对付中小流量攻击效果明显;防护体系应该是分层的——CDN 负责日常隐藏和过滤,WAF 负责 CC 和应用层攻击,超大流量攻击场景再上高防 IP。最后提醒一句:防护要平时做,等被打的那天再研究配置,黄花菜都凉了。建议站长每季度检查一次子域名解析和历史 IP 暴露情况,把”源站藏匿”当成 CDN 防护的前置必修课。