
核心要点(TL;DR)
- CDN、WAF只是外围,源站IP一旦泄露,攻击者可绕过全部防护直打。
- 源站只放行CDN回源IP段,并开启回源鉴权头校验,是隐藏的核心。
- WAF规则要分层:基础托管规则挡通用攻击,自定义规则挡CC与爬虫。
- 上线前用多地ping与DNS历史记录自查源站是否泄露,比事后补救便宜。
很多站长以为买了 CDN、开了 WAF 就高枕无忧,直到源站 IP 被扫出来,攻击者绕过全部防护直打源站,带宽瞬间打满、数据库连接爆掉。问题不在产品,而在防护是单层的。本文面向要动手的运维和站长,把 CDN、WAF 与源站隐藏组合成真正的纵深防御,给出可复制的命令、配置和检查清单。
一、为什么单层防护形同虚设
CDN 和 WAF 的价值建立在「流量必经它们」这个前提上。一旦源站 IP 暴露,攻击者可以直接对源站发起 CC 或 DDoS,CDN 缓存和 WAF 规则全部失效。常见泄露途径包括:历史 DNS 解析记录、邮件服务器同 IP、子域名未接入 CDN、SSL 证书透明度日志、扫描器全网段探测。
纵深防御的目标很明确:让源站只信任 CDN 回源流量,其余一律拒绝。这需要三层配合——CDN 承接与缓存、WAF 规则拦截、源站网络层与应用层双重收口。
二、第一步:确认源站是否已经泄露
动手前先自查,别在已泄露的 IP 上做无用功。
- 用多地 ping 与 DNS 历史解析查询,看域名是否曾直接解析到源站 IP。
- 在源站抓包,观察是否有非 CDN 网段的直接连接:
tcpdump -nn -i eth0 'tcp port 80 or tcp port 443' | grep -v 'CDN网段' - 检查子域名:
for d in $(cat subs.txt); do dig +short $d; done,找出未接入 CDN 的解析。
确认泄露就更换源站 IP,并在新 IP 上线前完成下一节的收口配置,否则很快会再次暴露。
三、第二步:源站网络层只放行 CDN 回源段
这是源站隐藏的核心。云厂商安全组或本机防火墙只允许 CDN 厂商公布的回源 IP 段访问 80/443,其余全部丢弃。
# 示例:iptables 仅放行 CDN 回源段 for ip in $(cat cdn_ips.txt); do iptables -A INPUT -p tcp -s $ip --dport 443 -j ACCEPT iptables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT done iptables -A INPUT -p tcp --dport 443 -j DROP iptables -A INPUT -p tcp --dport 80 -j DROP
CDN 回源 IP 段会变更,建议用定时任务每周拉取官方列表并更新安全组,同时保留一个应急管理 IP 用于 SSH 运维,避免把自己锁在门外。
四、第三步:回源鉴权,挡住「猜到 IP」的攻击
网络层收口后,再加一道应用层校验:CDN 回源时携带自定义请求头,源站校验不通过直接 403。即使攻击者拿到源站 IP,没有密钥也无法访问。
# Nginx 校验回源鉴权头
map $http_x_origin_auth $origin_ok {
default 0;
"你的随机长密钥" 1;
}
server {
listen 443 ssl;
if ($origin_ok = 0) { return 403; }
...
}密钥用 32 位以上随机串,定期轮换,禁止写进前端代码或公开仓库。轮换时先加新值再删旧值,避免回源中断。
五、第四步:WAF 规则分层配置
WAF 不要只开默认托管规则,按攻击面分层:
| 层级 | 规则类型 | 作用 |
|---|---|---|
| 基础层 | 托管规则集 | 挡 SQL 注入、XSS、常见漏洞利用 |
| 业务层 | 自定义规则 | 限制登录、下单等接口频率,防 CC |
| 行为层 | 人机校验/爬虫管理 | 挡批量爬取与自动化工具 |
CC 防护重点配置单 IP 速率限制与 URL 维度限速,阈值先观察日志再收紧,避免误伤正常用户。上线后每天看拦截趋势,误报规则及时加白。
六、上线检查清单与行动建议
- 源站安全组仅放行 CDN 回源段与应急管理 IP。
- 回源鉴权头已开启并校验,密钥已轮换一次。
- 所有子域名已接入 CDN,无直连解析。
- WAF 托管规则 + 自定义限速规则均已生效。
- 源站日志确认无非 CDN 网段直连。
建议把上述检查固化为每周巡检项,并在防护体系中自然引入 AegisX 的源站隐藏与回源鉴权能力,减少手工维护 IP 段的成本。纵深防御不是买一个产品,而是让每一层都假设上一层会被绕过——现在就从确认源站是否泄露开始动手。
常见问题(FAQ)
我的源站IP好像泄露了,怎么确认?
先用多地ping工具和DNS历史解析记录查询域名是否曾直接解析到源站IP,再在源站抓包看是否有非CDN网段的直接连接。若确认泄露,立即更换源站IP,并在安全组只放行CDN回源IP段,同时开启回源鉴权头,避免新IP再次暴露。
只上WAF不开CDN,能防住CC攻击吗?
很难。WAF部署在源站前,攻击流量仍会打到你的带宽和连接数上,大流量CC会先打满源站出口。正确做法是CDN在前承接流量并缓存静态资源,WAF在CDN层做规则拦截,源站只接受回源请求,形成三层纵深,单层WAF无法替代。
回源鉴权头怎么配置才安全?
在CDN回源配置里加一个自定义请求头,值为随机长字符串,源站Nginx用if或map校验该头,不匹配直接返回403。密钥定期轮换,且不要写进前端代码或公开仓库。这样即使攻击者猜到源站IP,没有鉴权头也无法直接访问。
安全组只放行CDN IP段会不会误伤?
需要把CDN厂商公布的回源IP段全部加入白名单,并定期同步更新,否则CDN节点变更会导致回源失败。建议用脚本定时拉取官方IP列表更新安全组,同时保留一个应急管理IP用于运维登录,避免把自己锁在外面。
纵深防御上线后还要做哪些日常检查?
每周检查源站访问日志中非CDN网段的请求、WAF拦截趋势与误报、证书与回源IP段是否过期;每月做一次源站IP泄露自查和回源鉴权轮换。把检查项固化成清单,比临时救火更有效。