考慮以下場景: 你想要 SelfHost 一個在線協作平台/私有雲/Git倉庫供團隊使用, 或者想要和別人分享服務器 SSH 權限; 但是直接把應用暴露在互聯網上感覺實在不放心, 團隊規模又沒有大到非要使用 VPN 組網的地步, 亦或許你的團隊成員技術都很拉胯, 根本沒有什麼安全意識…
或者你就想要單純的保護一下 WordPress 的後台, 除了你自己其他人都不許碰. 但是你的 IP 天天都在變, 使用固定 IP 肯定不合適. 有什麼簡單的方法可以做到只允許自己訪問?
碰到這種情況, 第一個想到的當然又是去白嫖 CF 乾爹了.
Cloudflare Access 其實就是一個帶非常強大的驗證功能的反向代理. 可以把這個玩意想像為一道門加一隻看門狗, 你的應用就是被它保護著. 要讓 Cloudflare Access 生效, 有一個大前提是用戶能且只能通過 Cloudflare 連接到你的應用, 這就得用到 Cloudflare Argo Tunnel 來完成 (以 WordPress 舉例, 看這篇文章 ). 剩下的就是按部就班了.
準備
首先先去註冊 Cloudflare Teams , 註冊這個玩意之後才能解鎖 Cloudflare Access. 使用以下鏈接註冊 Cloudflare Teams (有免費方案, 但是得先綁定信用卡)
Cloudflare Teams 註冊入口
https://dash.cloudflare.com/sign-up/teams
添加 Login Method
註冊完畢後點進 Settings -> Authentication -> Login Methods -> Add New 添加登錄方案. 所謂的驗證方案就是字面意思: 證明你自己是誰, 然後 Cloudflare 才能看看放不放你進去. 如果不添加 Login Methods , 默認就只有發郵件, 煩得要死.
Login Method 這裏就先選擇 Github 好了, 設置非常方便. 點擊選擇 Github 然後按照屏幕右邊的提示操作.
Create New Github Application
https://github.com/settings/applications/new

要記住, 所謂的 Github 登錄其實就是讓 Cloudflare 驗證註冊 GitHub 帳戶時使用的郵箱. 所以之後調規則的時候允許放行還是要根據郵箱來.
添加 Group
我一個人可能會用到幾個郵箱, 不同的驗證方式… 為了避免每一次創建應用時都手動設置, 這裏創建一個名為 “Myself” 的 Group 並勾選 “Default Group” 來默認將我放行.

到此為止, 為設置 Access 所做的準備就完成了. 下面就開始介紹如何使用 Access 保護你的應用程序.
保護 WordPress 後台
最基礎的 Case 就拿 WordPress 舉例. 比如說, 我看防火牆紀錄就能看到整天都有吃飽了沒事幹的 Hack Boy 訪問 /wp-login.php 暴力試密碼. 雖然我的密碼強度足夠, 但是還是感覺很煩. 之前在 例行安全檢測-加固 WordPress 裡面給出的方案是通過編輯 .htaccess 文件額外加一個口令 (HTTP Auth). 其實這樣就足夠好了, 但是看上去不是很炫酷, 具體效果看下面兩張圖:
什麼鬼啊? 這麼醜不拉機的介面感覺自己回到了零零年!
如果你以前做過類似的操作, 先把它關掉.
然後在 Cloudflare for Teams -> Access -> Applications 介面狂戳 “Add an Application”, 然後因為 WordPress 在這個 Case 裡就是 Self Hosted, 所以選擇 Self Hosted.
然後 App Name 自己填, Duration 看你需求, 我填了 24hr, domain, path 之類的, 看下圖就是了.
往下翻, Identity Provider 選擇 One Time Pin 和 Github, 點擊 Next.
Policy 就勾選前面創建的 Group : Myself 就可以了, 點擊 Next ( 這張圖我是創建完成之後加進去的, 所以 Next 按鈕變為 Add policy )
這樣就添加完成了! 之後訪問 wp-login.php, 都會被定向到以下介面要求登錄. 炫瞎狗眼吧!

保護 Code Server
如果說之前那個有點畫蛇添足的意思, 那麼下面這個就很必要了.
比如說, 我現在跑著一個 Code-Server ( VSCode 網頁版 ), 或者我的一個個人網盤, 或者 Jupyter Notebook , 現在我想要隨時隨地在有互聯網接入的地方都可以使用 Code Server 敲代碼, 應該怎麼辦? 當然 Jupyter 和 Code-Server 都有一個簡單的驗證機制, 但是畢竟實現很簡單, 說不定有漏洞, 而這兩個都是擁有 sudo 權限可以直接操作硬盤上的文件的, 就算是跑在 Docker 裡面也不是不能提權, 萬一出了什麼問題爆個漏洞, 那我硬盤上的其他文件不都得完蛋? 這個風險也太大了.
主要就是考慮到這個, 我才會想要去嘗試 Cloudflare Access 的. 具體配置和前面沒太大區別,也非常的簡單.
這篇博文就是一個實驗性質的, 紀錄一下 Cloudflare 這個玩具的新玩法, 所以比較水. 如果你碰敲讀到這裡而且感覺很氣, 那麼抱歉啦 🙂