很多站长以为接入 CDN 就万事大吉,却忽略了一个致命细节——源站 IP 泄露。攻击者只要通过历史 DNS 记录、子域名探测或证书透明度日志找到源站真实 IP,就能绕过 CDN 和 WAF 直接打源站,你的所有防护全部白费。
本文讲清楚源站 IP 泄露的常见途径,并给出一套完整的隐藏源站、加固回源的实战配置。
一、源站 IP 是怎么泄露的?五个常见途径
- 历史 DNS 记录:接入 CDN 之前,源站 IP 可能直接暴露在 DNS 解析记录中,攻击者用 SecurityTrails 等工具即可查到
- SSL 证书扫描:攻击者扫描全网 IP 的 443 端口,通过证书指纹反查源站
- 子域名绕过:只给主域名接 CDN,二级、三级子域名直连源站,成为突破口
- 邮件与文件泄露:服务器发送的邮件头、网站报错页面、备份文件都可能包含真实 IP
- 主动探测:利用 SSRF 漏洞或特定接口(如 phpinfo)让服务器主动请求攻击者服务器,暴露出口 IP
二、隐藏源站 IP:六步加固方案
第一步:源站只允许 CDN 回源 IP 访问
在源站防火墙(宝塔面板 → 安全 → 系统防火墙,或云厂商安全组)中,仅放行 CDN 回源 IP 段,其余 IP 全部拦截 80/443 端口。以 Nginx 为例,可在 server 块中增加访问控制:
# 仅允许 CDN 回源 IP 访问
location / {
allow 120.48.0.0/16; # 替换为你的 CDN 回源 IP 段
allow 129.211.0.0/16;
deny all;
}
第二步:关闭源站非必要端口
只开放 22(SSH,建议改端口)、80、443、3306 仅限内网访问。在云控制台安全组中,把 SSH 端口限定为你的办公 IP,MySQL、Redis 一律不暴露公网。
第三步:子域名统一接入 CDN
检查所有子域名解析记录,凡是不需要直连源站的子域名(如 www、m、api),全部解析到 CDN 分配的 CNAME。单独留下用于管理的子域名,也要做好访问控制。
第四步:关闭目录遍历与敏感文件访问
在 Nginx 配置中禁止访问备份文件、日志文件和版本控制目录:
location ~* \.(bak|sql|log|tar|gz|zip)$ {
deny all;
}
location ~* /\.(git|svn|env) {
deny all;
}
第五步:定期检测源站 IP 是否泄露
每月用以下方法自查:查询历史 DNS 记录(SecurityTrails、DNSDumpster)、搜索站点 IP 是否出现在证书日志中、通过 shodan 等搜索引擎检索域名相关资产。发现泄露立即更换源站 IP,并重新绑定 CDN。
第六步:配置回源鉴权
在 CDN 控制台开启「回源鉴权」或「回源 SNI 校验」,配合源站 Nginx 校验回源请求头,确保只有真实 CDN 节点能拿到源站内容。例如在源站 Nginx 中校验自定义请求头:
# 校验 CDN 回源请求头,防直接访问
if ($http_x_cdn_secret != "你的随机密钥") {
return 403;
}
三、攻防验证:如何确认源站已隐藏
配置完成后,用以下方式验证效果:
- 使用在线工具(如 fofa、zoomeye)搜索你的域名,确认无源站 IP 直接关联
- 在未接 CDN 的网络环境下,ping 域名应返回 CDN 节点 IP 而非源站 IP
- 尝试直接访问「疑似源站 IP + 域名 Host 头」,应返回 403 或被防火墙拦截
四、常见问题解答
Q:已经泄露了源站 IP,怎么办?
立即更换源站 IP(云服务器可购买弹性 IP 解绑后重新绑定),同时按上述六步完成加固,否则新 IP 很快会再次泄露。
Q:更换 IP 会影响网站访问吗?
更换后需在 CDN 控制台重新配置回源地址,并等待 DNS 生效(一般 5-10 分钟),期间建议在低峰期操作。
Q:所有网站都适合隐藏源站吗?
只要使用 CDN 的网站都建议配置,尤其是面向公网的核心业务。纯内网系统可不配置。
总结
隐藏源站 IP 是 CDN 防护体系中成本最低、收益最高的一环。按本文六步操作,普通服务器配置 30 分钟即可完成。如果你需要专业的 CDN 接入与源站加固服务,「速度网络」提供从源站隐藏、WAF 策略配置到抗 DDoS 的一站式防护方案,欢迎咨询。
