21 10 月 2026
本文由财富云计算提供,我们提供高防服务器、CDN 与 NAT 型云服务器,NAT 型无独立公网 IP 价格比独立 IP 省一半以上,源站隐藏是我们的标准交付动作,见文末。

一、为什么源站暴露 = 防护归零

高防/CDN 的逻辑是「对外只暴露防护入口,源站藏在后面」:

正确架构:  用户 → 高防/CDN(清洗)→ 源站
            攻击者 → 只能看到高防 IP → 打不动

源站 IP 一暴露:

被绕过:    攻击者 → 直接打源站 IP → 高防形同虚设
            你的源站在普通机房 → 几 G 攻击就瘫痪

高防洗得再干净,洗不了不打它的流量。源站隐藏不是可选项,是买了防护之后第一件必须做的事。

二、攻击者找源站的六种手段(逐个拆招)

2.1 DNS 历史解析记录

原理:你的域名以前裸奔过(没用 CDN),历史解析记录里全是源站 IP。查 DNS 历史(各种在线工具、被动 DNS 数据库)就能翻出来。

自查:

# 主动 DNS 现在指向哪
dig +short 你的域名 A
dig +short www.你的域名 A
# 历史记录要查被动 DNS 数据库(在线工具搜「域名历史解析」)

对策:

  • 源站 IP 进过历史解析的,换 IP 或换域名——被动 DNS 数据库删不掉
  • 新业务一开始就套 CDN/高防,别先裸奔再补救
  • 企业域名所有历史记录清理一遍,冷门的老域名也查

2.2 子域名爆破(最常见的漏点)

原理:主站 www.z0w.cn 套了 CDN,但 admin.z0w.cn、test.z0w.cn、mail.z0w.cn、api.z0w.cn 没套——解析直接到源站 IP。攻击者爆破子域名列表,命中一个就全盘皆输。

自查:

# 常见子域名挨个查(对比:套 CDN 的解析到 CDN 段,裸奔的解析到源站段)
for sub in www mail admin test dev api app cdn img static blog bbs m; do
    ip=$(dig +short $sub.z0w.cn | head -1)
    echo "$sub.z0w.cn → $ip"
done
# 套了 CDN 的应该解析到 CDN CNAME;直接 A 记录到某个固定 IP 的 = 高危

专业爆破(攻击者视角,你也要知道):

# 子域名枚举(用工具,示例思路)
subfinder -d z0w.cn          # 被动来源
amass enum -passive -d z0w.cn

对策:

  • 所有子域名要么套 CDN,要么不存在——test 这种内部子域名删掉 DNS 记录,用 hosts 或内网 DNS 访问
  • 必须保留的子域名(如管理后台)单独套 CDN + IP 白名单(只放你的办公 IP)
  • 泛域名证书场景注意:*.z0w.cn 的 CDN 要开泛域名支持

2.3 证书透明度日志(CT Logs)

原理:所有公开信任的 SSL 证书都记录在 CT 日志里,crt.sh 等网站可查。源站证书(或给源站签过的证书)会暴露 IP。

自查:

curl -s "https://crt.sh/?q=z0w.cn&output=json" | python3 -c "
import json,sys
data = json.load(sys.stdin)
for d in data:
    print(d.get('name_value'), '|', d.get('issuer_name', '')[:40])
" | sort -u

对策:

  • 源站证书用自签名——回源 TLS 是私有链路(CDN/高防到你的服务器),不在乎证书可不可信,CDN 商家都支持「忽略回源证书校验」
  • 或者源站用内网 CA 签的证书(不进 CT 日志)
  • 对外证书只在 CDN 商家处管理

2.4 邮件服务器(MX 记录)

原理:企业邮箱 @z0w.cn 的 MX 记录指向邮件服务器,这个 IP 常和源站同机或同段。查 MX → 反查同段 IP → 找到你的源站。

自查:

dig MX z0w.cn +short           # 邮件服务器
dig A mail.z0w.cn +short       # 它的 IP
# 这个 IP 和你的 Web 源站是什么关系?同段?同机?

对策:

  • 邮件和 Web 彻底分离——用第三方企业邮箱(腾讯/阿里/网易企业邮),自己服务器不跑邮件
  • 自建邮件服务器的,独立 IP、独立机器,别和 Web 源站混

2.5 客户端泄露(APP/小程序/桌面端)

原理:

  • APP 里写死了源站 IP(早期版本、配置文件、旧 SDK)
  • 小程序的 request 合法域名要配 IP 时泄漏
  • 桌面客户端更新检查、崩溃上报直连源站

对策:

  • APP 所有网络请求走域名(DNS 层可切),代码里不出现任何 IP
  • 崩溃上报、统计走第三方 SDK,不直连自己源站
  • 历史版本泄露过 IP 的——换源站 IP 或加一层只放行 CDN 回源的校验

2.6 社交工程与历史痕迹

原理:

  • 你在论坛/群聊晒过服务器 IP(游戏服主高发:贴过 connect 1.2.3.4:28015)
  • Whois 历史、网站备案信息、招聘信息的技术栈描述
  • 源码仓库里泄漏的配置(GitHub 搜域名/IP)

对策:

  • 游戏服公开连接地址只用高防 IP,源站 IP 永不外露
  • 代码仓库配 .gitignore + 上线前扫敏感信息(gitleaks、trufflehog)
  • 内部文档用域名不用 IP

三、源站加固:即使 IP 泄露也打不动

隐藏是「不被找到」,加固是「找到了也白费」——双保险。

3.1 回源白名单(核心)

# /etc/nginx/conf.d/whitelist.conf
# 只允许 CDN/高防回源 IP 段
server {
    listen 80;
    server_name z0w.cn;
    
    allow 203.0.113.0/24;        # CDN 回源段 1(商家文档查)
    allow 198.51.100.0/24;       # CDN 回源段 2
    deny all;                    # 其他全拒——包括源站 IP 直连
    
    location / { proxy_pass http://127.0.0.1:8080; }
}
# iptables 双保险
iptables -A INPUT -p tcp --dport 80 -s 203.0.113.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -s 198.51.100.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

3.2 只认域名(Host 校验)

server {
    listen 80 default_server;
    server_name _;
    return 444;              # 裸 IP 访问、错误 Host 直接断
}
server {
    listen 80;
    server_name z0w.cn *.z0w.cn;
    ...正常业务...
}

3.3 防火墙最小化

# 源站只开回源端口,其他全关
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -s CDN段 -j ACCEPT      # 回源
iptables -A INPUT -p tcp --dport 443 -s CDN段 -j ACCEPT     # HTTPS 回源
iptables -A INPUT -p tcp --dport 22 -s 你的管理IP -j ACCEPT  # SSH 只放行你
# 其他全 DROP(默认策略)

模板见iptables 抗 DDoS 配置,改造成回源专用。

3.4 封禁探测

# 发现攻击者直连源站 IP(日志里出现非 CDN 段的访问)
grep -v -E '203\.0\.113\.|198\.51\.100\.' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
# 这些就是绕过 CDN 直连的——白名单应该已经拦了,查日志确认

四、终极方案:NAT 型源站(没有公网 IP)

以上都是「藏 IP」,NAT 型是「没有 IP 可藏」——源站本身没有独立公网 IP,只有 NAT 网关的一个映射端口:

传统源站:  源站有公网 IP → 藏不好就暴露 → 被打
NAT 源站:  源站无公网 IP → 攻击者扫遍全网也找不到 → 无从打

架构:

用户 → 高防/CDN(对外唯一入口)
         ↓ 回源
       NAT 网关(公网 IP:映射端口)
         ↓ 内网转发
       源站(内网 IP,如 10.0.0.5,无公网)

为什么 NAT 型适合做源站:

维度传统源站NAT 源站
公网暴露面一个 IP(可能泄露)零(网关是共享出口)
被直连风险有无(网关不转发陌生流量)
高防回源配公网 IP配网关 IP + 端口映射
成本独立 IP 机型贵一半以上NAT 型省一半以上
适用必须直连的业务挂 CDN/高防后面的源站

NAT 型 + 高防/CDN 是源站隐藏的性价比之王——省下的 IP 费用买防护,安全性和成本双赢(这就是我们的主推架构,见文末)。

NAT 型做源站的配置要点

# 1. 源站只监听内网 + 网关转发(或直接听网关映射)
# 2. HTTPS 回源要开通网关 443 映射(默认可能只有 80)
# 3. 高防回源填「网关公网 IP:映射端口」
# 4. 网关防火墙只放行高防/CDN 回源段

五、排查清单:一张表验完全部暴露面

DNS 暴露面
□ 主域名/所有子域名解析指向(无裸奔 A 记录)
□ DNS 历史解析记录查过(被动 DNS 工具)
□ 内部子域名(test/dev/admin)DNS 记录已删或用 CDN

证书暴露面
□ crt.sh 查自己域名(无暴露 IP 的证书)
□ 源站证书自签或内网 CA

邮件暴露面
□ MX 记录指向第三方(非自己服务器)
□ 邮件服务器与源站不同机不同段

客户端暴露面
□ APP/客户端代码无硬编码 IP
□ 崩溃上报/统计走第三方
□ 历史版本无泄漏(泄漏过就换源站 IP)

社交暴露面
□ 论坛/群聊无晒过源站 IP
□ 代码仓库无泄漏配置(gitleaks 扫)
□ Whois/备案信息不含源站 IP

加固面
□ 回源白名单(Nginx + iptables 双层)
□ Host 校验(裸 IP 访问 444)
□ SSH 只放行管理 IP
□ 日志监控非回源段访问

这张表建议每季度过一遍——业务变更(新子域名、新 APP 版本)随时引入新暴露面。

六、被绕过打了怎么办

日志发现「非 CDN 段的 IP 在访问源站」= 源站已暴露,攻击者正在绕过防护:

  1. 确认白名单生效:没配回源白名单的立刻配(3.1),配了的查是不是有漏洞(子域名旁路、其他端口)
  2. 找暴露点:拿第三节的清单过一遍,多半是某个子域名或邮件
  3. 换 IP / 切架构:紧急情况下源站换 IP(云控制台操作),同时查暴露点是否跟着域名走(域名解析到新 IP = 换了也白换)
  4. 切 NAT 型:从根上没有公网 IP,一劳永逸
  5. 引流:攻击进行中,先把域名切高防/CDN 顶住(迁移实操)

七、小结

源站隐藏的完整体系:六个暴露面逐个查(DNS 历史、子域名、证书、邮件、客户端、社交痕迹)+ 三层加固(回源白名单、Host 校验、防火墙最小化)+ NAT 型终极方案(没有 IP 可暴露)。核心认知:买了防护不等于安全,防护的强度和源站的隐蔽性成正比——攻击者找不到你,300G 和 30G 没区别;找得到你,1T 也白搭。每季度拿第五节的清单过一遍,把隐藏当成和备份一样重要的日常运维。


相关阅读:


本文由财富云计算整理,我们提供高防服务器、CDN 防护与 NAT 型云服务器,NAT 型无独立公网 IP 是源站隐藏的性价比方案,价格比独立 IP 省一半以上,需要架构设计的咨询我们。更多教程见端口速查表。
延伸阅读
  1. 高防误区与避坑清单:25 个坑+下单前必问 14 问+到货验货流程
  2. DNS 攻击防护专题:劫持、隧道、投毒、放大四类攻击与 DNSSEC
  3. 电商大促防攻击预案:T-14 到当天的分级响应与降级开关
  4. 日志分析找攻击源:Nginx 日志三维度分析法与证据固定
  5. 攻击应急响应手册:六阶段响应流程,从确认到复盘的照做清单
  6. iptables 抗 DDoS 配置模板:状态过滤+SYN 防护+防扫描+游戏服版
  7. OpenResty Lua 自研 WAF:动态限流+攻击特征检测+Redis 黑名单
  8. Nginx 进阶防护:连接层、请求层、行为层三层生产级配置
更多阅读
  1. 上一篇:日志分析找攻击源:Nginx 日志三维度分析法与证据固定
  2. 下一篇:电商大促防攻击预案:T-14 到当天的分级响应与降级开关
发表评论 2