如何用 Cloudflare Access 保護特定子網域:設定步驟與權限控管要點

Published on: | Last updated:

嗯...今天要來聊一個我自己覺得蠻實用,但可能有點冷門的東西:Cloudflare Access

你有沒有遇過一種情況?就是你弄了一個服務,可能是一個還在開發中的網站、一個給家人朋友用的私人相簿,或是一個小小的內部儀表板... 你想讓它上線,方便從任何地方連線,但又超級不希望路人甲乙丙丁都能隨便看到。🤔

以前可能就要搞什麼 IP 白名單、或是用 .htaccess 設個很醜的密碼輸入框,超麻煩。老實說,現在有更優雅的作法了,而且...還是免費的。

重點一句話

簡單講,就是用 Cloudflare 的免費功能,幫你任何一個子網域(subdomain)加上一個需要帳號密碼登入的保護頁,只有你允許的人才能進去看裡面的內容。

這整個東西背後的概念,Cloudflare 叫它「零信任」(Zero Trust)。聽起來很厲害,但說穿了就是「我誰都不信,每次都要檢查」。想像一下,以前用 VPN 像是有大門鑰匙,進去之後整棟樓隨便你逛。零信任就是,就算你進了大門,要去 A 房間要刷一次卡,去 B 房間又要再刷一次。它會在每個服務的門口都派一個警衛,檢查你的身份。說真的,現在網路攻擊這麼多,這種想法才是對的。

Cloudflare Access 運作原理示意圖
Cloudflare Access 運作原理示意圖

怎麼選:Cloudflare Tunnel 還是直接 DNS 設定?

在開始動手前,有個觀念要先釐清。要用 Cloudflare 保護你的服務,主要有兩種方式。很多人會搞混,我自己一開始也看很久... Orz。

一種是裝一個叫 `cloudflared` 的小程式(也叫 Cloudflare Tunnel)在你的伺服器上。另一種是我們今天要做的,完全不用在伺服器上裝任何東西,只要在 Cloudflare 的 DNS 後台設定就好。

這兩種差在哪?我弄了個簡單的比較表,讓你比較好懂。

比較項目 方法一:Cloudflare Tunnel (裝代理程式) 方法二:DNS-Only (只改設定)
設定複雜度 要進主機下指令,對新手來說有一點點門檻。 無腦,全部在網頁上點一點就好,超簡單。
安全性 更高。你的主機甚至可以完全不對外開放任何 port,它會自己建立一條通往 Cloudflare 的加密通道。 也算安全。雖然主機還是要開著 port,但所有流量都先經過 Cloudflare 過濾跟驗證。
適用情境 超適合藏在公司或家裡內網的服務,那種根本沒有對外 IP 的機器。 最適合已經在 VPS 或雲端主機上跑的服務,反正它本來就有對外 IP。
我的碎碎念 說真的,這個比較強大,但殺雞焉用牛刀?除非你真的要藏內網服務,不然有點大材小用。 今天的主角。對 90% 的個人專案或小型應用來說,這個就夠用了,又快又方便。

好,今天我們就專心講第二種,最簡單的那個。

步驟與要點

開始前,先確定你已經有這幾樣東西了:

  • 一個你自己的網域 (domain)。
  • 這個網域已經加到 Cloudflare 裡面管理了。(這也是免費的,還能防 DDoS,沒理由不用吧)
  • 你想保護的那個子網域,例如 `secret.example.com`,已經在 Cloudflare 的 DNS 裡設定好了。

什麼?你還沒設好 DNS?好吧,那我順便講一下...

第一步:確認 DNS 設定(如果還沒做的話)

假設你想保護的子網域是 `my.example.com`。

  1. 登入你的 Cloudflare 帳號。
  2. 去到你網域的 DNS 設定頁面。
  3. 新增一筆紀錄:
    • 類型 (Type): `CNAME` (或 `A` 紀錄也可以,看你主機情況)
    • 名稱 (Name): `my` (Cloudflare 會自動幫你補上 `.example.com`)
    • 目標 (Target): 指向你那台伺服器的 IP 位址或另一個主機名稱。
    • 代理狀態 (Proxy status): 這個最重要!一定要是橘色的雲 (Proxied)。這代表所有流量都會經過 Cloudflare。如果是灰色的,那就沒用了。

對,就像這樣。搞定這個才能繼續下一步。

Cloudflare Zero Trust 後台,準備新增應用程式
Cloudflare Zero Trust 後台,準備新增應用程式

第二步:在 Zero Trust 新增一個「應用程式」

DNS 好了之後,我們就要去 Cloudflare 的另一個地方設定了。它現在叫做「Zero Trust」儀表板,你從主選單的左邊就能找到。

  1. 進去之後,點左邊的 `Access` -> `Applications`。
  2. 勇敢地按下那個藍色的 `Add an application` 按鈕。
  3. 接著,它會問你是哪種類型,我們選 `Self-hosted`。嗯,就是「我自己架的服務」的意思。
  4. 再來要填一些基本資料:
    • Application name: 隨便取個你好記的名字,例如「我的秘密基地」。
    • Subdomain: 這裡就要填寫你剛剛設定的那個子網域,例如 `my`。
    • Domain: 選擇你的主網域,例如 `example.com`。
    • ...它下面還有個 `Path` 的選項,這蠻好用的。如果你不是要保護整個子網域,只是要保護 `my.example.com/admin/` 這個路徑底下的東西,就可以在這裡設定。很彈性。
  5. 外觀什麼的可以先跳過,直接按 `Next`。

第三步:設定「誰」可以登入

這一步是核心中的核心。你要告訴 Cloudflare,怎樣的身份才算是「合法」的。這東西他們叫「Identity providers」(身份提供者)。

你會看到很多選項,像是 Google WorkspaceAzure AD、GitHub...等等。原文的作者是用 Google Workspace,這在公司環境下非常合理,直接用公司帳號登入。這點在台灣很多用 Google Workspace 的新創或中小企業也很適用。

不過呢,我自己是覺得,如果你只是個人用戶,或是小貓兩三人的小團隊,根本不用搞這麼複雜。你可以直接用它預設的 `One-time PIN`(一次性密碼)。

它的運作方式是:當有人要登入時,在頁面上輸入他的 Email,Cloudflare 就會寄一封信給他,裡面有一組 6 位數的密碼,回來頁面輸入密碼就能登入。是不是超簡單?雖然安全性沒辦法跟綁定 Google 帳號比,但對於保護一些非金錢、非機密的服務,老實說,很夠用了。

好,在 `Configure an application` 這個頁面,你就可以幫你的應用程式設定規則了。

  1. Policy name: 再取個好懂的名字,像是「只允許我自己」。
  2. Action: 選擇 `Allow`(允許)。
  3. Session Duration: 就是登入一次可以維持多久,預設 24 小時我覺得差不多。
  4. 最重要的來了,底下的 `Configure rules`:
    • 這裡就是設定「條件」的地方。
    • 你可以新增一個 `Include` 規則。
    • 從 `Selector` 下拉選單中,選擇 `Emails`。
    • 在右邊的 `Value` 欄位,輸入你允許登入的 Email 地址,例如 `my.email@gmail.com`。可以輸入多個。
    • 你看,這樣就設定好了「只有這個 Email 可以透過一次性密碼的方式登入」。

當然,Cloudflare Access 的規則系統比這強大太多了。你可以參考他們的官方文件,裡面有教你怎麼設定更複雜的規則,例如「必須是 A 群組的成員、而且要從台灣的 IP 連線、而且不能用手機」。這些規則可以組合,真的非常強大。但我們今天先求有,再求好。

對了,順便分享一下,如果你真的想接 Google Workspace 或 GitHub 登入,你要先去左邊選單的 `Settings` -> `Authentication` 裡面,新增一個 Identity Provider,照著它的步驟跟 Google/GitHub 那邊的後台設定串接起來。Cloudflare 的文件寫得蠻清楚的,一步一步跟著做通常不會錯。設定好了之後,再回到剛剛應用程式的規則設定頁面,`Selector` 裡面就會多出 `Login method` 讓你選了。

第四步:測試!

全部設定完,按下儲存。等個大概... 30 秒到 1 分鐘讓設定全球生效。然後,打開你的瀏覽器,輸入你保護的那個子網域 `https://my.example.com`。

如果一切順利,你就不會直接看到你的服務內容了。你會被導到一個 Cloudflare 的登入頁面,上面寫著要你輸入 Email 來接收登入碼。

輸入你剛剛在後台允許的那個 Email,去收信,把收到的 PIN 碼填回去... 鏘鏘!你就被導回你原本的服務頁面了。🎉

成功啦!這就是訪客會看到的登入畫面。
成功啦!這就是訪客會看到的登入畫面。

小結... 嗎?

其實也沒什麼好總結的。我自己弄完這個之後,覺得真的蠻酷的。以前要實現類似的效果,都要自己寫程式、管 session、或是去弄很複雜的伺服器設定。現在只要在 Cloudflare 後台點一點滑鼠,就能幫任何一個 HTTP 服務加上企業等級的驗證大門。

重點是,這個核心功能,個人免費方案就玩得到。這讓很多個人開發者或小團隊,可以用幾乎零成本的方式,大幅提高一些內部工具或測試網站的安全性。我覺得這點 Cloudflare 真的很大方。

所以,如果你也有那種「想上線又不想給人看」的尷尬服務,不妨花個十分鐘試試看吧。應該是不會讓你失望的。

那你呢?你有用過 Cloudflare Access 嗎?或是有什麼其他保護私有服務的好方法?在下面留言分享你的經驗吧!

Related to this topic:

Comments

撥打專線 LINE免費通話