用了CDN为什么还能看到源站IP?源站隐藏与防绕过检查指南
域名已经接入CDN,执行dig或nslookup时看到的也是CDN节点IP,可是在历史DNS记录、某个子域名、邮件配置或云平台地址中,仍然能找到源站IP。
这并不矛盾。
CDN代理能够让正常访客连接CDN节点,而不是直接访问源站,但它不会自动删除过去留下的DNS记录,也不会替你保护未接入CDN的子域名、邮件服务器、管理后台和其他公网入口。
更重要的是,“别人能不能查到源站IP”和“别人能不能绕过CDN访问源站”是两个不同问题。
真正可靠的源站保护标准应该是:
即使源站地址已经被知道,未经CDN转发或认证的公网请求仍然不能取得业务内容,也不能绕过CDN的WAF、限速和DDoS防护直接消耗源站资源。
因此,隐藏IP只能算第一层。限制访问和验证回源身份,才是源站保护的核心。
接入CDN后,正常DNS查询应该看到什么
对于反向代理型CDN,公开业务域名通常指向CDN提供的CNAME或边缘地址:
www.example.com
↓
www.example.com.cdn-provider.example
↓
CDN边缘IP用户连接的是CDN边缘节点:
访客 → CDN边缘节点 → 源站此时查询业务域名:
dig www.example.com A +noall +answer
dig www.example.com AAAA +noall +answer通常看到的是CDN入口地址,而不是源站地址。
但这只能证明当前业务域名的公开DNS已经指向CDN,不能证明源站没有通过其他路径暴露。
CDN节点IP、源站IP和测速探针IP的区别,可以先参考CDN节点IP和源站IP有什么区别?。
为什么接入CDN后还能查到源站IP
历史DNS记录已经留下源站地址
网站接入CDN之前,业务域名可能直接使用A或AAAA记录指向源站:
www.example.com → 203.0.113.10后来虽然改成了CDN:
www.example.com → CDN CNAME但旧记录可能已经被被动DNS、资产搜索平台、监控系统或第三方数据库保存。删除当前记录不能让这些历史数据自动消失。
如果旧IP仍然承载相同网站,并允许公网直接访问,攻击者仍可能绕过CDN。
这种情况下,最重要的不是继续要求第三方删除记录,而是让旧地址不再能够直接提供业务:
在源站防火墙或安全组限制访问来源;
启用认证回源或mTLS;
必要时更换源站公网地址;
确认旧地址已经停止监听或不再指向业务服务器。
仅更换IP而不增加访问控制,新的地址以后仍可能再次暴露。
有子域名没有接入CDN
主域名和www接入CDN,不代表所有子域名都已代理。
常见的遗漏包括:
origin.example.com
direct.example.com
api.example.com
admin.example.com
staging.example.com
download.example.com
mail.example.com其中某个子域名只要直接解析到源站,就可能暴露地址。
可以检查自己管理的域名:
dig www.example.com A +short
dig api.example.com A +short
dig admin.example.com A +short
dig mail.example.com A +short如果源站同时启用了IPv6,还要检查AAAA记录:
dig www.example.com AAAA +short
dig api.example.com AAAA +short不少网站只限制了IPv4,却忘记源站仍有一个可公网访问的IPv6地址。攻击者即使无法通过IPv4直连,也可能通过IPv6绕过CDN。
不建议依靠猜测子域名名称完成检查。更可靠的方式是维护完整的DNS资产清单,逐项确认哪些记录应该通过CDN、哪些应该迁移到独立服务、哪些不应继续存在。
邮件服务和网站共用同一个IP
如果网站和邮件服务器部署在同一公网IP上,MX、SPF或邮件传输记录可能间接公开源站地址。
检查MX和TXT记录:
dig example.com MX +noall +answer
dig example.com TXT +noall +answer需要关注:
MX目标是否最终解析到网站源站IP;
SPF记录中是否直接出现源站IP;
邮件头是否暴露与网站相同的公网出口地址;
mail.example.com是否与Web源站共用服务器。
更稳妥的做法通常是把邮件发送和接收迁移到独立邮件服务或独立IP,不让Web源站同时承担公网邮件入口。
需要注意,邮件中看到的出口IP不一定就是Web源站入口IP。如果网站和邮件通过同一个公网NAT或同一台服务器出网,才可能形成直接关联。
源站专用域名使用了公共解析
为了让CDN回源,管理员可能创建:
origin.example.com → 203.0.113.10这个域名如果能够被公网DNS解析,就会直接公开源站地址。
源站域名并不一定需要对全互联网公开。根据架构,可以考虑:
使用CDN厂商支持的私有源站;
使用内网DNS或私有托管区域;
通过专线、隧道或私有网络连接;
保留公网源站域名,但从网络层只允许CDN访问;
使用云负载均衡器域名,并对入口实施认证和访问限制。
把源站域名改得非常随机,只能降低被偶然猜到的概率,不能替代防火墙、mTLS或私有网络。
公共证书暴露了源站域名
如果为origin.example.com申请公共CA证书,该证书及其中的域名可能进入证书透明度日志。
RFC 9162定义的Certificate Transparency使用可审计的追加式日志记录已签发的TLS服务器证书。它的目标是发现错误或未经授权的证书签发,而不是替网站保密证书中的域名。
证书透明度日志通常不会直接写出源站IP,但如果证书中包含的源站域名仍然公开解析到源站,二者就可能被关联起来。
因此:
不要把“域名没有在网站页面中出现”当成保密措施;
不要为私有源站域名配置不必要的公共解析;
可以使用CDN厂商提供的源站证书或私有CA,但必须确认CDN信任方式;
即使使用私有证书,也仍要限制源站公网访问。
云负载均衡或托管平台入口仍然公开
使用AWS ALB、云服务器负载均衡、Kubernetes Ingress或托管应用时,源站可能不是固定IP,而是一个公开域名:
project.region.provider.example即使这个地址不直接显示真实服务器IP,只要外部用户可以通过它取得业务内容,就仍然存在绕过CDN的路径。
源站隐藏的目标不是一定要让所有基础设施都没有公网地址,而是确保公共入口不能未经授权地直接提供业务。
错误页、响应头或程序配置泄露地址
源站地址还可能出现在:
调试错误页;
应用日志下载;
HTML注释;
JavaScript配置文件;
API返回内容;
跳转地址;
Location响应头;邮件通知模板;
监控或状态页面;
WebSocket、上传和下载接口配置。
例如,错误跳转返回:
Location: https://203.0.113.10/login或者:
Location: https://origin.example.com/login都可能暴露源站入口。
处理这类问题时,应修改应用的外部URL、代理信任和跳转配置,而不是简单隐藏错误页面。回源Host与应用域名判断不一致,也可能生成错误跳转,具体可以参考回源HOST填错会发生什么?从404、证书到多站点逐项查。
只隐藏DNS记录够不够
不够。
可以把源站保护分成四个层次:
层次 | 已做到什么 | 是否足够 |
|---|---|---|
第一层 | 业务域名只解析到CDN | 只能防止普通DNS查询直接看到源站 |
第二层 | 清理未代理子域、邮件和配置泄露 | 降低源站被发现概率,但仍不是安全边界 |
第三层 | 源站只接受CDN或经过认证的请求 | 达到防止常规绕过的核心要求 |
第四层 | 使用私有网络、隧道、mTLS、监控和备用架构 | 适合高安全、高防和关键业务 |
普通企业网站至少应该做到第三层。
如果用户知道源站IP后仍能使用正确Host直接打开网站,那么CDN的WAF、Bot防护、访问控制和限速策略都可能被绕过。
怎样确认源站是否可以被绕过
不要直接在浏览器里访问:
https://203.0.113.10/这种测试可能使用错误的Host和TLS SNI。源站返回证书错误或默认404,并不能证明业务域名无法被绕过。
测试自己管理或已获授权的源站时,应保留正确域名:
curl -sS -D - -o /dev/null \
--resolve www.example.com:443:203.0.113.10 \
https://www.example.com/--resolve让curl连接指定IP,同时继续使用www.example.com完成TLS SNI、证书校验和HTTP Host发送,能够更真实地模拟绕过CDN直连源站。
结果可以这样判断:
测试结果 | 代表什么 |
|---|---|
连接超时 | 网络层可能已丢弃非CDN请求,也可能是路由或服务异常 |
| 目标端口未开放或被主动拒绝 |
TLS要求客户端证书 | 可能已经启用mTLS认证回源 |
返回403 | 源站可达,但应用或网关拒绝了请求 |
返回404或默认页面 | 仍然可达,只是当前虚拟主机未匹配 |
返回301、302 | 源站可达,且可能泄露其他域名 |
返回正常业务200 | 已确认可以绕过CDN |
返回正常API数据 | 风险更高,API入口同样被绕过 |
“返回403”比直接返回业务内容更安全,但它仍说明公网请求已经到达源站。如果目标是抵御大流量攻击,只在应用层返回403可能无法避免带宽、连接数和TLS计算资源被消耗。
测试时不要在文章、工单截图或聊天记录中暴露真实源站IP、私有域名、认证头和Cookie。
源站防火墙应该怎样限制
对于仍有公网地址的源站,最常见的做法是只允许CDN公布的回源地址范围访问80和443端口。
逻辑上可以表示为:
允许:CDN回源地址 → 源站80/443
允许:受控运维网络 → 管理端口
拒绝:其他公网地址 → 源站业务端口但实施时要注意:
CDN回源IP范围可能变化;
健康检查地址可能与业务回源地址不同;
IPv4和IPv6需要分别配置;
多CDN架构要允许所有当前有效厂商的回源范围;
不要把SSH、数据库和管理面板对整个CDN地址段开放;
应保留受控运维通道和回滚方案;
修改前确认当前请求来源,避免把CDN一起拦截;
最好自动同步厂商官方地址范围,而不是长期维护静态副本。
Cloudflare的源站保护官方说明将限制源站连接、认证请求以及使用出站隧道列为不同强度的保护方式。其中Cloudflare Tunnel通过源站主动建立出站连接,使源站不必具有可公开路由的入站地址。
不同CDN的回源地址、产品能力和配置方式不同,必须以当前厂商官方文档为准,不能直接复制其他厂商的地址段。
只验证一个秘密请求头够不够
CDN可以在回源请求中加入秘密请求头:
X-Origin-Verify: 随机且保密的值源站只处理携带正确值的请求,其他请求返回403。
这种方法部署相对简单,但不应被视为唯一防线:
源站仍然暴露在公网;
大流量仍然可以到达源站网络;
秘密值可能因日志、调试信息或错误配置泄露;
多层代理可能删除或覆盖请求头;
需要设计轮换和撤销机制。
AWS在限制CloudFront访问Application Load Balancer的官方方案中也使用自定义源站请求头,同时明确提醒必须保持请求头名称和值的机密性,并建议结合CloudFront托管前缀列表进一步限制网络来源。
更稳妥的做法是组合使用:
网络来源限制
+ HTTPS回源
+ 秘密请求头或签名
+ 源站日志与告警mTLS认证回源能解决什么
普通HTTPS只验证源站身份:
CDN验证:连接的是正确源站mTLS,也就是双向TLS,还要求CDN在回源时提供客户端证书:
源站验证:请求来自持有受信任客户端证书的一方如果源站只接受指定CDN或自有代理的客户端证书,即使攻击者知道源站IP和业务域名,也无法完成受信任的TLS连接。
Cloudflare的Authenticated Origin Pulls官方文档说明,该功能通过mTLS帮助源站确认回源请求来自Cloudflare网络,为普通HTTPS回源增加一层身份验证。
使用mTLS时仍要注意:
正确验证客户端证书链;
规划证书到期和轮换;
不要只判断“客户端提交了证书”,而要验证受信任签发者;
多CDN环境需要分别规划证书和信任关系;
健康检查与灾备通道也要使用兼容认证;
证书私钥不能写入公开代码仓库或日志。
私有源站比隐藏公网IP更彻底
如果架构允许,源站可以不对公网开放,而是通过以下方式连接CDN:
CDN到云VPC的私有源站功能;
源站主动建立的出站隧道;
专线或私有网络;
私有负载均衡器;
对象存储的私有访问控制;
CDN厂商提供的源站访问身份。
AWS的CloudFront VPC Origins文档允许将部分负载均衡器或EC2源站放在私有子网中,并由服务管理安全组控制访问。
这类架构的优势是公网无法直接向源站业务端口发起连接,不再依赖“源站地址没有被发现”。
但私有源站也会增加运维复杂度,需要提前处理:
CDN故障时的备用入口;
管理与部署通道;
健康检查;
多CDN接入;
日志与监控;
紧急回滚。
不能为了隐藏IP而在故障时临时把源站全部开放到公网。
默认站点返回404能不能算隐藏成功
不能。
如果使用正确Host直连源站时返回正常内容,默认站点返回什么都没有意义。攻击者或测试者可以主动发送业务域名作为Host。
即使正确Host直连也返回404,仍然只说明应用层没有找到内容,不能证明源站网络不可达。
默认虚拟主机拒绝未知Host仍然值得配置,因为它可以:
避免其他域名误绑定到业务站点;
减少默认页面泄露;
阻止部分Host头滥用;
降低错误站点被搜索引擎收录的概率。
但它只是附加措施,不是源站访问控制。
源站IP已经暴露后要不要立即更换
不一定要先换IP。
如果可以立即通过安全组、防火墙、私有网络或mTLS阻止公网直连,即使旧IP已经公开,攻击者也无法正常绕过CDN取得内容。
以下情况可以考虑更换源站地址:
旧IP持续遭受直接DDoS攻击;
上游网络在流量到达防火墙前已经拥塞;
无法在旧环境实施可靠来源限制;
历史服务和端口过多,难以确认是否清理完整;
正在迁移到私有源站或新的云网络;
需要让旧入口彻底退役。
正确顺序通常是:
建立新源站或新入口
→ 配置网络限制和认证回源
→ 验证CDN回源正常
→ 切换CDN源站配置
→ 关闭旧源站业务端口
→ 再处理旧地址退役如果先更换IP、后考虑保护,新IP仍然可能通过DNS、日志、证书域名或应用配置再次暴露。
防火墙限制后为什么仍要考虑上游DDoS
服务器本机防火墙可以丢弃不允许的请求,但攻击流量仍可能先经过机房或云厂商的公网链路。
如果攻击流量已经占满上游带宽,即使服务器最终丢包,正常CDN回源请求也可能无法到达。
因此,高风险业务还需要确认:
云厂商或机房是否提供上游清洗;
源站公网带宽是否会被直接打满;
是否能够使用私有源站或隧道;
旧源站IP是否仍在对外广播;
CDN回源是否经过独立链路;
遭受攻击时能否更换或撤销入口;
多源站是否具备隔离能力。
“服务器防火墙只允许CDN IP”主要解决直接访问和部分应用层绕过,并不等于自动获得上游大流量防护。
源站隐藏完成后怎样验收
可以按下面的顺序检查:
1. 公开业务域名只返回CDN入口
2. 所有A、AAAA、CNAME、MX和TXT记录完成审计
3. 未代理子域名不再指向Web源站
4. IPv4和IPv6都实施来源限制
5. 使用正确Host和SNI直连源站无法取得业务内容
6. 源站只接受CDN地址、mTLS或其他认证请求
7. 未知Host进入拒绝型默认站点
8. 管理端口不向CDN地址段或整个公网开放
9. 历史源站地址已经关闭或完成访问限制
10. CDN正常回源、健康检查和证书续期不受影响
11. 防火墙规则变更和认证失败都有监控
12. CDN故障时已有受控灾备方案还可以使用CDNChart的CDN检测工具确认业务域名当前的CNAME、响应IP、ASN及CDN厂商线索,并结合CDN节点查询方法检查不同地区看到的公开入口。
但外部CDN检测只能观察当前公开路径,不能证明源站防火墙、mTLS或私有网络已经正确配置。这部分必须通过自有源站测试、日志和云安全组配置验收。
常见问题
接入CDN后还能查到源站IP,说明CDN没有生效吗?
不一定。业务域名可能已经正常经过CDN,但源站地址通过历史DNS、未代理子域、邮件记录或云平台入口暴露。应分别检查当前访问路径和源站防绕过配置。
源站IP泄露后,CDN的缓存和加速还有效吗?
正常用户通过CDN访问时,缓存和加速仍可能有效。风险在于其他人可以绕过CDN直接访问源站,使WAF、限速、Bot防护和DDoS防护失去作用。
把源站域名改成随机字符串就安全了吗?
不够。随机域名只能降低被猜中的概率,无法阻止历史记录、证书日志、配置泄露或网络扫描。即使地址已知,源站也应该拒绝未认证的公网请求。
源站返回403,算不算隐藏成功?
说明应用层可能已经阻止访问,但源站网络仍然可达。对于防止普通绕过有一定作用,对带宽消耗和连接攻击的防护有限。更稳妥的方案是叠加网络来源限制或mTLS。
只允许CDN IP后,还需要秘密请求头吗?
建议作为纵深防护保留。IP限制解决来源范围,秘密请求头或mTLS进一步验证回源身份。多层措施可以降低单项配置失误带来的风险。
为什么不能直接用HTTPS访问源站IP测试?
HTTPS需要正确的TLS SNI和HTTP Host。直接访问IP可能得到证书错误或默认站点,不能模拟真实业务。应在已授权环境中使用curl --resolve保留正确域名。
源站隐藏后还能保留直接访问的灾备入口吗?
可以,但不能把一个完全公开、长期可用的直连域名当作灾备。更合理的方式是使用备用CDN、受控VPN、身份认证网关或临时启用且有严格授权的应急入口。
多CDN架构怎样限制源站访问?
需要允许所有当前使用的CDN回源网络,并尽量为不同CDN配置独立的mTLS证书、签名或秘密请求头。切换前还要确认备用CDN能够通过源站防火墙和认证规则,否则DNS切换成功后仍会回源失败。
- CDN源站IP暴露
- 用了CDN还能查到源站IP
- 源站防绕过
- CDN回源安全
- 隐藏服务器真实IP
- CDN源站保护
- 认证回源