1605 字
8 分钟
2026-04-06
为什么套了 CDN 还是会被 DDoS 源站?如何正确隐藏源站 IP
加载中...
加载中...

为什么套了 CDN 还是会被直接 DDoS 源站?#

不少人建站遇到攻击时,第一反应就是去接入 Cloudflare、腾讯云EdgeOne 者阿里云ESA 等CDN 来进行防护。直觉上,流量都经过 CDN 节点转发,真正的服务器 IP 藏在最后面,似乎已经很安全了。

但往往现实是,源站机器依然会遭受大流量 DDoS 导致被云服务商断网隔离。为什么套了 CDN 后,真实 IP 还是会被轻易发现?

源站 IP 是怎么暴露的?#

原因通常出在一些我们容易忽略的细节上。你的服务器如果在公网上不做限制,任何人都可以进行探测。下面这几种情况最容易导致 IP 泄露:

  1. 历史解析记录残留:很多人习惯先将域名解析到真实 IP 进行测试,确认没问题后再套 CDN。各类空间测绘平台(比如 FOFA、ZoomEye 或者 SecurityTrails)早已经把你的历史记录抓取并存档,别人查一下域名的历史解析就能翻出你的源站 IP。
  2. 全网大规模扫盘:攻击者可以直接开着扫描器扫遍整个云服务器的 IP 段。如果你的源站 80/443 端口随便让人访问,一旦被扫出响应的网页标题、内容或 robots.txt 和你套了 CDN 的网站一模一样,你的源站也就曝光了。
  3. HTTPS 证书与 CT 日志泄露:扫描器通过 IP 直连发起 HTTPS 握手时,如果你的 Nginx 默认返回了业务域名的真实 SSL 证书,这就等于主动告诉对方“我就是这个网站”。此外,申请的证书还会被记录在公开的证书透明度(CT)日志中,黑客很容易借此将你的域名与 IP 关联起来。

应对策略:Nginx 默认站点返回 444#

就算你迫不得已换了个新 IP,如果源站依然对全网的请求来者不拒,那被再次扫出来也就是一两天的事情。

核心的防线逻辑是:除了经过 CDN 节点发来的正常请求外,任何直接通过 IP 访问服务器的请求,我们都不予理睬,连一个字节都不返回。

在 Nginx 里,我们可以利用“默认站点(Default Server)”、配合一张无意义的自签证书,再加上 444 状态码(Nginx 特有的状态码,能直接掐断 TCP 连接),来实现拦截恶意扫描的效果。

第一步:准备一张伪造的自签证书#

千万不要把真实的业务证书绑定在默认站点上,那样握手时还是会泄露域名。我们需要用 OpenSSL 生成一张无意义的自签证书,专门用来应答这些直接用 IP 找上门的探测请求。

在服务器终端找个目录执行这行命令即可(仅供参考,路径也可依实际情况修改):

Terminal window
# 生成一张有效期 100 年、颁发给 localhost 的无效证书
openssl req -x509 -newkey rsa:2048 -keyout /etc/nginx/ssl/dummy.key -out /etc/nginx/ssl/dummy.crt -days 36500 -nodes -subj "/CN=localhost"

生成的 dummy.crtdummy.key 先放好,之后的 Nginx 配置或宝塔操作中会用到。

第二步:原生 Nginx 配置方案#

打开你的 nginx.conf 或者对应的站点配置文件。在处理正常业务逻辑之前,我们先添加一个默认服务器块来拦截非常规请求。

注意:以下配置代码仅供参考,请根据你实际的 Nginx 安装路径、证书路径和业务环境进行调整,一切以实际情况为准。

server {
# 设定为默认站点,负责接收没有匹配到域名的请求
listen 80 default_server;
listen 443 ssl default_server;
server_name _;
# 用刚才生成的证书来应付扫描器的 TLS 握手
ssl_certificate /etc/nginx/ssl/dummy.crt;
ssl_certificate_key /etc/nginx/ssl/dummy.key;
# 直接断开连接,不返回任何数据
return 444;
}
# 下面才是你真正的业务配置
server {
listen 80;
listen 443 ssl;
server_name yourdomain.com; # 只有客户端乖乖带上正确的域名访问时才处理
# ... 省略正常的业务和证书配置 ...
}

宝塔面板(BT-Panel)操作流程#

如果你平时习惯使用宝塔面板,可以直接在图形界面上完成同样的配置。思路是一致的:建立一个空站点作为拦截器,所有直接按 IP 访问的请求全抛给它处理。

1. 新增一个 IP 默认站点#

在宝塔面板进入 【网站】 -> 【添加站点】。 在“域名”栏直接填上你当前服务器的 公网 IP 地址。不需要创建数据库或 FTP,点击提交。

2. 配置自签证书#

执行前面第一步那条 openssl 命令,获取到自签证书的文本内容(或者自行找个在线工具生成也行)。 然后找到刚建好的 IP 站点,进入 【设置】 -> 【SSL】 -> 【其它证书】。 把那堆毫无意义的证书内容和私钥分别填入,保存并开启 SSL。

3. 配置伪静态返回 444#

接着,点击该 IP 站点的 【伪静态】 设置卡片,写上一行代码:

return 444;

宝塔站点伪静态设置 保存后,任何人直接访问这个 IP 都会被 Nginx 立刻掐断连接。

4. 设为默认站点(最关键)#

来到网站列表页面,点击顶部的 【高级设置】(如果界面版本不同,请留意“默认站点”的相关选项)。 将刚才创建的那个 IP 站点 指定为默认站点,然后生效配置。

宝塔默认站点设置

这么设置完之后,但凡请求没带上你真实的域名(不管是由于乱输 Host 还是直接拿 IP 探测),都会被分配到这个阻断站点,并吃到一个 444 连接重置。


如果追求更高的安全性,建议再搭配系统自带的防火墙或者云厂商的安全组(以实际云厂商配置为准),直接限制 80/443 入站,仅允许 CDN 节点 IP 段通过。这样即使源站 IP 偶尔泄露,也不会受到实质性流量冲击。


参考与扩展阅读#

为什么套了 CDN 还是会被 DDoS 源站?如何正确隐藏源站 IP
https://www.zhuqiy.com/posts/prevent-ddos/
作者
ZHUQIY
发布于
2026-04-06
许可协议
CC BY-NC-SA 4.0