前言

「從外部連回內部系統的方式只有 VPN」「一直在追著 VPN 裝置的漏洞修補跑」——這是中小規模資訊部門很常見的煩惱。

本文將整理如何使用 Cloudflare Zero Trust,在不使用 VPN 的情況下,從外部安全存取內部資源(內部 Web、RDP 等)的 ZTNA(Zero Trust Network Access) 建置步驟。內容以實際導入自家環境,並確認可從外部連線到 RDP 的結果為基礎。

重點有以下 3 點:

  • 最多 50 位使用者免費(Free 方案)即可開始
  • 內部側不需要開放埠號(由 cloudflared 隧道以 outbound 建立連線)
  • 核心概念是「預設全部拒絕,只增加允許」。以應用程式為單位定義「誰、在什麼條件下」可存取

前提

  • Cloudflare 帳號(在 one.dash.cloudflare.com 啟用 Zero Trust)
  • IdP:Microsoft Entra ID(也可使用其他 IdP,本文以 Entra ID 為前提)
  • 想要對外公開的內部資源(如內部 Web 應用或 RDP 對象電腦)
  • 內部可常駐 cloudflared 的一台機器(建議 Linux 伺服器,也可用 Windows)

整體架構

[外部端點] --WARP--> [Cloudflare 邊緣] <--Tunnel(Outbond)-- [內部 cloudflared]
                          |                                            |
                     Access(Entra ID + MFA 驗證授權)            內部 Web / RDP / 檔案伺服器

使用者透過 WARP 用戶端連線,並以 Entra ID + MFA 進行驗證。只有 Access 原則允許的應用程式與 IP 範圍才能到達。

Step 1. 初始化 Zero Trust

  1. 開啟 one.dash.cloudflare.com,設定 team name(團隊名稱)
  2. 方案選擇 Free(最多 50 位使用者)

團隊名稱會成為 https://<團隊名稱>.cloudflareaccess.com使用者登入網址,也會用在後續 Entra ID 串接的重新導向 URI。這個名稱之後不太容易更改,建議以組織名稱為基礎謹慎決定。

確認: Zero Trust 儀表板可正常開啟,左側選單會顯示 Settings / Access / Networks 等項目。

Step 2. 串接 IdP(Entra ID)

Entra 端:應用程式註冊

  1. 進入 Entra 管理中心 → 應用程式註冊 → 新增註冊
  2. 在重新導向 URI 設定以下內容(Web)
https://<團隊名稱>.cloudflareaccess.com/cdn-cgi/access/callback
  1. 建立 用戶端密碼
  2. 在 API 權限中加入 openid / profile / email。如果想把 Entra 的群組作為原則條件,也請再加入 GroupMember.Read.All(需要管理員同意)

Cloudflare 端

  1. Zero Trust → Settings → Authentication → Login methods → Add new → Azure AD(Microsoft Entra ID)
  2. 輸入 應用程式(用戶端)ID/用戶端密碼/目錄(租戶)ID 這 3 項
  3. 若要使用群組條件,請啟用「Support Groups」
  4. Test 按鈕確認連線

確認: Login methods 中會顯示 Entra ID,且按下 Test 後可完成 Entra 登入並看到成功畫面。

Step 3. 註冊裝置(WARP)

  1. Settings → WARP Client 的裝置註冊原則(Device enrollment permissions)中,設定允許註冊的條件(例如:公司電子郵件網域)
  2. 在使用者端安裝 WARP 用戶端,並從設定畫面中 登入 Zero Trust(輸入 Step 1 的團隊名稱 → 以 Entra ID + MFA 驗證)

確認: WARP 會顯示「已連線」,且儀表板的 My Team → Devices 會出現該裝置。

Step 4. 準備到內部資源的路徑(隧道)

在內部架設 cloudflared 隧道。因為儀表板管理型(遠端管理)比較容易維運,所以這裡採用此方式。

  1. 透過 Networks → Tunnels → Create a tunnel → Cloudflared 建立隧道
  2. 在內部機器上執行畫面顯示的連接器安裝指令(例如 Ubuntu)
# 直接執行儀表板上顯示的含 token 指令
sudo cloudflared service install <隧道 token>

# 確認運作
systemctl status cloudflared
  1. 對於 RDP、檔案伺服器等需要透過 IP 存取的項目,請在隧道設定的 Private Network 分頁中註冊內部 IP 範圍(例如:192.168.10.0/24

確認: Tunnels 清單中的狀態顯示 HEALTHY,且 Private Network 中可看到內部 IP 範圍。

因為是透過 outbound 443 建立連線,所以不需要在內部防火牆開埠或做 NAT 設定。

Step 5. 建立存取原則

Access → Applications → Add an application 進行註冊。

  • 內部 Web 應用 → Self-hosted(指定公開主機名稱)
  • RDP、SMB 等以 IP 直接存取 → Private Network(指定目標 IP/CIDR)

Allow 原則的條件範例如下:

  • 對象:公司電子郵件網域或 Entra 的特定群組
  • Require:必須 MFA(Authentication Method)、已註冊裝置(WARP enrolled)

原則是「預設全部拒絕,只增加允許」。一開始先整理「哪些應用程式、誰、在什麼條件下可用」,再進行設定會比較不容易混亂。比起做全公司一體適用的大範圍允許,更應該以應用程式為單位縮到最小,這就是 ZTNA 的重點。

Step 6. 動作確認(從外部)

使用外部網路(例如手機熱點)的裝置進行確認。

  1. 連上 WARP → 透過瀏覽器進行 Entra + MFA 登入
  2. 確認已允許的應用程式能夠存取,未允許的使用者/應用程式會被阻擋

RDP 範例(不使用 VPN,從外部連到內部電腦):

rem 連上 WARP 後,直接連到內部電腦的私有 IP
mstsc /v:192.168.10.21

登入時的使用者名稱,在未加入網域的電腦上請輸入以下格式:

電腦名稱\使用者名稱

卡關重點與處理方式

1. 根本無法到達內部 IP(Split Tunnels)

WARP 預設會將 RFC1918 的私有 IP 範圍排除(Exclude)。需要到 Settings → WARP Client → Device settings profile → Split Tunnels,把目標內部 IP 範圍(例如:192.168.10.0/24)從排除清單移除,或縮小排除範圍。這是最容易卡住的地方。

2. RDP 驗證失敗

未加入網域的電腦請輸入 電腦名稱\使用者名稱 格式。同時也請確認目標電腦已啟用 RDP。

3. 無法登入/裝置無法註冊

請確認 Step 2 的 IdP 串接 Test 是否成功,以及 Step 3 的裝置註冊原則(允許的電子郵件網域等)是否符合。用戶端密碼過期也是常見原因之一。

4. 明明在公司內部,WARP 卻斷線或誤判

如果有設定受管理網路(例如偵測到公司 Wi-Fi 時自動關閉),請重新檢查偵測條件(例如 TLS 憑證指紋等)。

完成檢查清單

  • 已初始化 Zero Trust,並設定團隊名稱(Free 50 席)
  • 已串接 Entra ID 作為 IdP,且 Test 成功
  • 已透過 WARP 註冊裝置(出現在 Devices)
  • cloudflared 隧道狀態為 HEALTHY,且已註冊 Private Network
  • 已設定以應用程式為單位的存取原則(例如必須 MFA)
  • 已確認從外部可存取已允許的應用程式,且未允許項目會被阻擋

總結

在擺脫 VPN 裝置維運與漏洞修補壓力的同時,還能在免費額度內實現「不是整體大開,而是以應用程式為單位僅允許最小必要範圍」的架構。建議先從 1 個應用程式(例如 1 個內部 Web,或 1 台 RDP 目標電腦)小規模開始,確認可正常運作後再逐步擴大。


株式会社ブレインディレクション是一家位於大阪、提供 IT 解決方案、生成式 AI 應用、雲端/資安支援的 IT 公司(已取得 ISMS)。 https://www.brain-d.jp


原文出處:https://qiita.com/BrainDirection/items/5215ea3cd1ec635a1636


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
352
🥈
我愛JS
💬1  
3
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登