
引入 Cloudflare Zero Trust 以防范 OSINT 泄漏
概述
虽然使用了 Cloudflare Proxy,但源站 IP 和端口信息却被暴露在了 Censys、Shodan 等 OSINT(开源情报)搜索引擎中。
在确认原因后,我实施了阻止源站直接访问、隐藏管理端口以及配置基于 Cloudflare Tunnel 的 ZTNA 等措施。
问题情况分析
尽管通过 Cloudflare 运营服务,但在 OSINT 搜索引擎中却查到了源站 IP(Origin IP),而非代理 IP(Proxy IP)。
原因分析
服务器 IP 泄漏的原因如下:
- TLS 证书泄漏
- 类似 Censys 的扫描器会持续扫描互联网的公共 IP (Public IP)。
- 当直接连接到源站 IP 的 443 端口时,Nginx 会返回实际服务的证书。
- 通过证书的 SAN 等信息,可以将该 IP 与域名关联起来。
- 入站(Inbound)防火墙策略不足(未对 80 和 443 端口进行防火墙设置,导致可以直接绕过代理进行访问)
Nginx 安全加固
进行基于 IP 的直接访问时,配置为不必要地返回实际证书。
设置拒绝 SSL 握手 (SSL Handshake)
ssl_reject_handshake 在 Nginx 1.19.4 及以上版本中受支持。
首先检查版本。
File: /etc/nginx/sites-available/default
此设置用于拒绝进入 Default Server 的 TLS 握手。
如果攻击者将实际域名指定为 SNI,则可能会选择正常的 Server Block,因此仅靠这一点无法阻止对源站的访问。
更改防火墙策略
为了应对 Cloudflare IP 网段的变化,自动更新入站访问列表 (Inbound Access List)。
File: cloudflare_ip_update.sh
由于可能会出现脚本出错或出于其他不得已的原因导致无法访问服务器的问题,建议直接在实例管理仪表板中管理 22 SSH 端口。
现在不光洗角色,连电脑也一起洗了

@Binci
更换公网 IP (Public IP)
退回现有的公网 IP,并分配一个新的临时 IP (Ephemeral IP)。
重新生成 SSH 主机密钥 (SSH Host Key)
如果没有发生实际密钥泄漏,这并非必须执行的操作,但为了防止指纹识别 (Fingerprinting),我进行了更改。
Zero Trust Network Access
现在不直接将其暴露在公共互联网 (Public Internet) 中,而是通过 Cloudflare Tunnel 进行访问。
安装 cloudflared

在 Cloudflare One Dashboard 中创建 Tunnel 并获取 Token。
安装后进行检查。
配置 Split Tunnel 及私有网络 (Private Network)

首先检查服务器的 IP。
示例:
私有 IPv4 网段如下:
私有 IP 网段 (Private IP)
10.0.0.0/8172.16.0.0/12192.168.0.0/16
Team & Resources/Devices > Devices > Device profiles > Profile > Split Tunnels

如果您要访问的私有网络网段包含在 Exclude(排除)中,请调整相应范围。

Networks/Routes > Routes > CIDR Routes
添加私有网络。

访问
安装 Cloudflare One Agent (WARP Client) 后,登录配置时使用的 Team Domain。
