Cloudflare Zero Trust 安全性總覽:自架服務該設定的那幾道防線

上一篇我用 Cloudflare Tunnel 把家裡的 Mac mini 變成正式伺服器,三步就讓本地服務掛上正式網址對外服務。但文章最後我留了一句提醒:服務是真的暴露在公網上,網址猜得到就連得到。部落格、作品集這種「本來就要給所有人看」的站沒差,可是後台管理介面、資料庫工具、n8n、內部 dashboard 這些東西,被陌生人連到就麻煩了。
這篇就接著把那道防線補上。用的工具叫 Cloudflare Zero Trust——而且核心功能在免費方案就有,個人和小團隊完全夠用。
先搞懂 Zero Trust 在講什麼
傳統的網路安全是「城牆思維」:拉一條 VPN、設一圈防火牆,進到內網的人就預設可信。問題是只要有一個人的帳密外洩、或一台裝置中標,攻擊者一旦進到牆內就幾乎暢行無阻。
Zero Trust(零信任) 的原則正好相反,一句話概括就是:「從不信任,每次都驗證」(never trust, always verify)。沒有「內外網」的差別,每一次存取、每一個請求都要重新證明「你是誰、你有沒有權限」,不會因為你「已經在裡面」就放行。
Cloudflare 把這套原則做成一整組雲端服務,管理介面集中在 Zero Trust 後台(one.dash.cloudflare.com,第一次進入會請你取一個 team name,方案選 Free 即可)。對自架族來說,它最實際的價值是:不用自己架 VPN、不用維護一台跳板機,就能幫任何一個網址加上「登入後才看得到」的保護。

後台能設定哪些安全功能(總覽)
進到 Zero Trust 後台,左側那排選單就是它的能力地圖。挑幾個自架最用得到的講:
| 模組 | 一句話用途 | 自架情境 |
|---|---|---|
| Access | 在網址前面加一層身分驗證,登入通過才放行 | 保護後台、內部工具、預覽環境 |
| Networks → Tunnels | 把本地服務安全地接上公網(上一篇主題) | 家用機器對外服務 |
| Gateway | DNS / 網路層過濾,擋惡意網域與不該連的流量 | 裝置上網保護、阻擋釣魚域名 |
| Service Auth | 發給機器(非真人)的存取憑證 | API、CI、webhook 互相呼叫 |
| Logs | 每一次存取與驗證的稽核紀錄 | 事後追查「誰、何時、連了什麼」 |
其中 Access 是這篇的主角——它直接解決「自架服務被陌生人連到」這個最常見的痛點。其餘模組後面再點到。
重點實作:用 Access 幫網址加一道登入
Cloudflare Access 的運作方式很單純:它是一個架在你網址前面的身分感知代理(identity-aware proxy)。訪客連到受保護的網址時,流量會先被 Access 攔下來,驗證身分通過後才會真正送到你的服務;沒通過就連你的伺服器都碰不到。
設定大致三步:
1. 建立一個 Access 應用程式
到 Access → Applications,點 Add an application,類型選 Self-hosted(保護一個你自己的網址)。填入要保護的子網域,例如把上一篇建立的 n8n.example.com 填進去——這樣這個網址就被 Access 接管了。
2. 設定誰能進來(Policy)
這是最關鍵的一步:定義「什麼條件的人放行」。免費方案最常用的兩種組合:
- 限定 Email:只允許名單上的特定 Email(例如只有你自己的
you@gmail.com),其他人一律擋掉。 - Email OTP(一次性驗證碼):訪客輸入 Email 後,Cloudflare 寄一組驗證碼到信箱,輸入正確才放行——不需要事先註冊任何帳號,對「只有我自己要用」的後台超方便。
當然也可以接 Google、GitHub 等第三方登入(IdP),用「只有我的 Google 帳號」當條件。政策可以疊加多條規則,例如「Email 屬於公司網域 @yourteam.com 才放行」。

3. 訪客的實際體驗
存檔之後再打開那個網址,你(和任何人)看到的不再是服務本身,而是一張 Cloudflare Access 的登入頁。輸入授權的 Email、收驗證碼、填回去,驗證通過才會進到真正的服務;驗證不過,連伺服器的門都摸不到。
更貼心的是它有 session(工作階段) 概念:驗證一次後,在你設定的有效期間內(例如 24 小時)同一台裝置不用一直重登,到期才需要再驗一次——安全和方便之間抓得剛好。

其他值得順手開的安全設定
Access 解決了最大的問題,但既然進了 Zero Trust 後台,幾個低成本、高效益的設定也建議一起做:
- Service Token 給機器用:如果有 API 或 webhook 需要存取受 Access 保護的網址,不要為了它把整個應用開放。改用 Service Auth 發一組 token,讓那支程式帶著 token 通過驗證,真人入口仍然鎖著。
- Gateway 擋惡意網域:在 Gateway 開啟 DNS 過濾,可以擋掉已知的釣魚、惡意軟體網域。搭配 WARP 用戶端,連你自己裝置的日常上網都多一層保護。
- 縮短 session 有效期:越敏感的服務,session 設越短(例如資料庫工具設 1~8 小時)。裝置遺失或 Email 外洩時,暴露的時間窗就越小。
- 善用 Logs 稽核:Access 會記錄每一次登入嘗試——誰、什麼時候、從哪、連了哪個應用、過或沒過。定期看一眼,異常存取一目了然。
開始之前該知道的幾件事
- 免費方案的範圍:Cloudflare Zero Trust 免費方案涵蓋最多 50 位使用者,Access、Gateway、Tunnel 等核心功能都能用,個人與小團隊綽綽有餘(實際席次與功能以官方當前公告為準)。
- 網域要託管在 Cloudflare:跟 Tunnel 一樣,Access 要能攔截某個網址的流量,這個網域的 DNS 必須由 Cloudflare 代管。
- Access 保護的是「入口」,不是「漏洞」:它擋的是「沒授權的人連到你的服務」,但服務本身的程式漏洞、弱密碼還是要自己顧好。Zero Trust 是多一層防線,不是萬靈丹。
- 別把自己鎖在外面:設 Policy 時務必確認你自己的 Email 在放行名單裡,並先用無痕視窗測一次登入流程,再把服務正式交出去。
結語
回頭看這兩篇的組合技:Tunnel 負責「安全地把服務接上線」,Zero Trust(Access)負責「只讓對的人連進來」。一個解決「連得到」,一個解決「不該被亂連」,剛好補成一套完整的自架方案——而且兩個加起來,月租是零。
家裡那台機器、那些 side project 的後台,值得花十分鐘把這道門裝上。設定完第一次看到陌生網址跳出登入頁、把不速之客擋在門外的那一刻,安心感是很實在的。
有問題歡迎留言,我們下篇見!