
導入 Cloudflare Zero Trust 以防範 OSINT 洩漏
概述
雖然使用了 Cloudflare Proxy,但仍存在 Origin IP 與連接埠資訊暴露在 Censys、Shodan 等 OSINT(開源情資,Open Source Intelligence)搜尋引擎上的問題。
在確認原因後,我們實作了封鎖直接存取 Origin、隱蔽管理連接埠,以及基於 Cloudflare Tunnel 的 ZTNA。
問題狀況分析
雖然透過 Cloudflare 營運服務,但在 OSINT 搜尋引擎中卻能查到 Proxy IP 以外的 Origin IP。
原因分析
伺服器 IP 洩漏的原因如下:
- TLS 憑證外洩
- 像 Censys 這樣的掃描器會持續掃描網際網路的 Public IP。
- 當直接連線至 Origin IP 的 443 連接埠時,Nginx 會回傳實際的服務憑證。
- 透過憑證的 SAN 等欄位,可以將該 IP 與網域產生關聯。
- Inbound 防火牆政策不足(未設定 80 與 443 連接埠的防火牆規則,導致能夠繞過 Proxy 進行連線)
Nginx 安全強化
設定以避免在基於 IP 的直接連線時,不必要地回傳實際憑證。
拒絕 SSL Handshake 設定
ssl_reject_handshake 支援 Nginx 1.19.4 及以上版本。
首先確認版本。
File: /etc/nginx/sites-available/default
此設定是用來拒絕傳入 Default Server 的 TLS Handshake。
由於當攻擊者將實際網域指定為 SNI 時,仍可能會選擇到正常的 Server Block,因此僅靠這個設定並無法完全阻止對 Origin 的存取。
變更防火牆政策
為了因應 Cloudflare IP 區段的變更,自動更新 Inbound Access List 清單。
File: cloudflare_ip_update.sh
由於腳本可能會發生錯誤或其他不得已的原因導致無法存取伺服器,建議直接在執行個體管理儀表板中管理 22 號 SSH 連接埠。
這年頭不只洗人設,連電腦也一起洗了

@Binci
更換 Public IP
歸還現有的 Public IP 並配置新的 Ephemeral IP。
重新產生 SSH Host Key
如果沒有實際的密鑰外洩,這並非必須執行的操作,但為了防止 Fingerprinting(指紋識別),我們進行了變更。
Zero Trust Network Access
現在不再直接暴露於 Public Internet,而是透過 Cloudflare Tunnel 進行存取。
安裝 cloudflared

在 Cloudflare One 儀表板中建立 Tunnel 並取得 Token。
安裝後進行確認。
設定 Split Tunnel 與 Private Network

首先確認伺服器的 IP。
範例:
Private IPv4 區段如下:
Private IP 區段
10.0.0.0/8172.16.0.0/12192.168.0.0/16
Team & Resources/Devices > Devices > Device profiles > Profile > Split Tunnels

如果想要存取的 Private Network 區段包含在 Exclude 中,請調整該範圍。

Networks/Routes > Routes > CIDR Routes
新增 Private Network。

連線
安裝 Cloudflare One Agent (WARP Client) 後,登入設定時使用的 Team Domain。
