CDN、WAF 与源站隐藏:网站纵深防御实战 核心要点图解,CDN、WAF只是外围,源站IP一旦泄露,攻击者可绕过全部防护直打。;源站只放行CDN回源IP段,并开启回源鉴权头校验,是隐藏的核心。;WAF规则要分层:基础托管规则挡通用攻击,自定义规则挡CC与爬虫。;上线前用多地ping与DNS历史记录自查源站是否泄露,比事后补救便宜。
CDN、WAF 与源站隐藏:网站纵深防御实战 · 核心要点一图读懂(AegisX)

核心要点(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泄露自查和回源鉴权轮换。把检查项固化成清单,比临时救火更有效。