服务器被 DDoS 攻击,用 CDN 防护的正确姿势
为什么普通服务器怕DDoS,而CDN能顶住
DDoS攻击就像无数台电脑同时访问你的服务器,把带宽打满、CPU打爆。
CDN(内容分发网络)相当于在服务器前面修了一堵“分布式墙”:它把静态资源缓存到全球节点,同时智能清洗恶意流量。只要配置正确,大部分攻击流量根本到不了你的源服务器。
准备工作:确认你有这些条件
- 一个已备案的域名(国内CDN需要)
- 一台有固定公网IP的服务器(腾讯云、阿里云等均可)
- CDN服务商账号(推荐Cloudflare、腾讯云CDN、阿里云CDN,本文以Cloudflare为例)
- 服务器管理权限(能修改DNS解析和服务器防火墙)
第一步:把域名接入CDN,开启代理
以Cloudflare为例,操作路径:
- 登录Cloudflare,添加你的网站域名(例如
example.com) - 系统自动扫描DNS记录,确认后点击“下一步”
- Cloudflare会分配两个NS地址(如
dahlia.ns.cloudflare.com),去你的域名注册商后台把DNS服务器改成这两个 - 等待DNS生效(通常几分钟到1小时)
- 在Cloudflare DNS面板中,找到你的网站记录(如
@和www),确保橙色云朵图标是开启状态(表示代理已开启)
开启代理后,访客访问域名会先到CDN节点,再由CDN转发到你的服务器。这层转发就能过滤大量攻击。
第二步:配置安全规则,自动拦截恶意流量
接入CDN后,默认防护强度不够,需要手动优化:
开启“Under Attack”模式(紧急时用)
- 在Cloudflare仪表盘 -> Overview -> Quick Actions -> 点击“Under Attack Mode”开启
- 效果:所有访客必须通过JS质询才能访问,对CC攻击和DDoS非常有效
- 注意:可能导致部分普通用户暂时无法访问,攻击结束后关闭
设置防火墙规则
- 进入 Security -> WAF -> Create Firewall Rule
- 示例规则:
- 字段:
(ip.geoip.country eq "CN" and not http.request.uri.path contains "/api") - 动作:
Managed Challenge(正常用户通过验证,攻击会被拦截)
- 你也可以限制特定地区的IP访问(如只允许国内用户)
启用在“速率限制”(Rate Limiting)
- 路径:Security -> Rate Limiting -> Create rate limit
- 规则示例:任何IP在1分钟内请求超过100次,返回503错误
- 这个对CC攻击(慢速DDoS)特别有效
第三步:隐藏源站IP,防止CDN被绕过
很多DDoS攻击会直接扫源站IP打,所以一定要隐藏。
- 修改服务器防火墙,只允许CDN节点IP访问你的服务器80/443端口
- Cloudflare节点IP列表:https://www.cloudflare.com/ips/
- 示例iptables命令(在服务器上执行):
iptables -A INPUT -p tcp -s 173.245.48.0/20 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -s 173.245.48.0/20 --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
- 如果使用宝塔面板:登录后台 -> 安全 -> 添加防火墙规则,来源IP填CDN节点IP段,端口填80/443,动作放行
- 禁用服务器上的直接IP访问:Nginx或Apache中配置只允许通过域名访问
- 如果服务器本身还有公网IP,建议换一台只有内网IP+CDN转发的架构(较高阶,新手可先参考)
第四步:验证防护效果,查看攻击日志
部署完成后,可以这样检查:
- 在Cloudflare面板 -> Analytics -> Security Events,查看是否有攻击被拦截
- 使用在线DDoS压力测试工具(只测自己的服务器,且注意不要违法)如
https://www.check-host.net/测试网站是否正常 - 观察服务器CPU和带宽:如果CDN生效,服务器负载应该很低,即使CDN节点高负载
高频问题解答
Q:接入CDN后网站访问变慢了?
- 可能原因:CDN节点未缓存资源,首次访问慢。建议开启静态资源缓存(Caching -> Configuration -> Standard)
- 或者开启“Brotli”压缩
Q:攻击时CDN会收费很高吗?
- 大部分CDN有免费防护额度(如Cloudflare免费版可抵御普通级别DDoS),但大流量攻击会产生带宽费用。建议在CDN后台设置“带宽上限”或“请求上限”
Q:用了CDN还需要其他防护吗?
- 建议配合Web应用防火墙(WAF)、操作系统防火墙、定期更新补丁。CDN不是万能药,但能阻挡90%的DDoS攻击
避坑指南:新手最容易犯的错
- 忘记隐藏源站IP:攻击者扫描到源站IP后直接从IP攻击,CDN等于没用。务必限制只允许CDN节点IP访问服务器
- CDN代理模式未开启:DNS记录是灰色云朵(仅DNS)时,流量不经过CDN。检查橙色云朵
- 防火墙规则过于激进:用IP地区限制时,不要误封正常用户。建议先用“Managed Challenge”而不是“Block”
- 攻击结束后不关闭Under Attack:长期开启会影响访客体验,记得手动关闭
- 忽略CDN控制台的报警通知:建议在CDN后台设置邮件或企业微信通知,攻击时能及时响应
最后总结
服务器被DDoS攻击,用CDN防护的正确姿势就是三步:接CDN -> 配安全规则 -> 隐藏源IP。
对于零基础用户,推荐先使用Cloudflare免费版练手,验证效果后再考虑付费升级。
遇到异常时优先回看本文避坑和高频问题部分,大部分情况都能自己解决。
如果攻击量级超过CDN免费版上限,再考虑升级到高防IP或高防CDN。
牢记:防护的核心在于让攻击流量到不了你的服务器,而不是硬扛。