使用 Cloudflare Access 保護在線應用

考慮以下場景: 你想要 SelfHost 一個在線協作平台/私有雲/Git倉庫供團隊使用, 或者想要和別人分享服務器 SSH 權限; 但是直接把應用暴露在互聯網上感覺實在不放心, 團隊規模又沒有大到非要使用 VPN 組網的地步, 亦或許你的團隊成員技術都很拉胯, 根本沒有什麼安全意識…

或者你就想要單純的保護一下 WordPress 的後台, 除了你自己其他人都不許碰. 但是你的 IP 天天都在變, 使用固定 IP 肯定不合適. 有什麼簡單的方法可以做到只允許自己訪問?

Cloudflare Access

碰到這種情況, 第一個想到的當然又是去白嫖 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 的. 具體配置和前面沒太大區別,也非常的簡單.

Code Server 的配置

這篇博文就是一個實驗性質的, 紀錄一下 Cloudflare 這個玩具的新玩法, 所以比較水. 如果你碰敲讀到這裡而且感覺很氣, 那麼抱歉啦 🙂

無題

某天晚飯後, 我媽和我出門遛彎. 空氣很乾爽, 一陣一陣往臉上招呼總算比較愜意.

我於是前思古人, 後望來者, 被一種指點江山、激昂文字的哲學情感包圍. 我說, Musk、Zuckerberg 等輩都太遜了, 空有千億美刀, 不懂得享受生活.

我媽問, 何出此言?

我說, 買來一個月都開不上一回的遊艇、私人飛機根本沒有任何意思. 他們帶來的快感也就消費的一瞬間而已, 對於他們來說是賣完就忘的東西. 慾望就像個無底洞一樣, 永遠都填不滿還會感到空虛. 而 Trump 雖然成功的進軍了政治圈很 Excited, 但是搞政治太累, 四年下來 Trump 起碼老了十歲.

要我看來, 真正理想的生活是去非洲 (比方說, 贊比亞) 圈塊地. 然後先去北京跑一趟, 說你要麼給我點好處要麼我去和台灣建交, 那麼就可以吃上北京支援第三世界的社會主義皇糧, 沒差吧?

等我站穩腳跟了, 最好能從北京那邊要一支醫療團隊 (跟三胖一樣的那種) 來治一下水土不服; 我就去教唆非洲同胞們, 黑是最優秀的顏色, 什麼白黃紅都 Out 了, 都是劣勢人種. 非洲之所以混的這麼差, 是因為千百年來受西方列強的壓榨導致, 特別是美國, 這個帝國主義國度大大滴壞. 現在非洲在我 Justin 的領導下終於站起來了! 這也沒差, 對吧?

然後我就故意整點事情, 給非洲好好滴經濟整垮掉. 誰要是餓著肚子還有力氣抗議的, 喔吼, 不是, 我領導這麼優秀怎麼可能有問題, 有問題就是人民中出了內鬼, 出了境外反動勢力集團, 這不, 誰叫得最歡的, 我看你那就不是好東西, 通通給我清理掉. 這樣一來, 會叫的給整沒了, 不會叫的也給整怕了. 期間我還可以訓練一些紅小將, 什麼少年先鋒隊啦來去加大點力度.

然後等所有人都徹底服貼了, 我就在小範圍試點一下自由經濟, 順便拉點美爹贊助 (之後立馬翻臉) 什麼的. 最終要的是, 我要宣稱之所以非洲 (贊比亞) 強起來了, 全是因為我英明的領導, 要你們團結在以我 Justin 為中心的檔中央周圍, 東南西北中、檔政軍民學, 都要聽我話. 誰不聽我話, 通通去吃國家飯. 最終產物就是一條 (有贊比亞特色的) 特色社會主義道路、Justin 新新時代 (贊比亞) 特色社會主義. 我還可以讓我的漁民滿世界跑, 要是不爽還可以聲明隔壁 (剛果共和國的) 那塊土地自人類從樹上爬下來就在我國版圖之內. 什麼時候我國屁民去吃老鼠、吃蝙蝠改善生活吃出個 (贊比亞) 病毒出來, 我還可以說這是美國搞出來的嘛, 奧運會也照樣參加. 豈不美滋滋?

我媽說, 你想得美呢你, 去那圈一塊地不到第二天當地人就把你零割碎削做成菜了.

我說, 不會啊. 我身邊有一堆黨衛軍, 都是吃我飯的, 他們沒有理由來削我啊.

我媽說, 他們才不會管這麼多. 而且你要是真這麼幹估計早就被美國定點清除炸到只剩一根手指了.

我沈思片刻, 只好承認: 還是天朝的韭菜比較好割.

解決 Openwrt 隨機重啟/死機 問題

在裝完 Openwrt 之後, 隨機重啟的問題就一直如影隨形. 經常在 大半夜/看 Youtube 看到一半 這種尷尬的場合聽到它 滴滴滴滴滴 重啟的聲音. 嘗試過很多種辦法, 無果.

每次重啟都會導致運行在 Openwrt 下的一堆設備停擺 5 – 10 分鐘. 期間 Wifi 無法使用, 博客也無法訪問. 幸而 Openwrt 可以自動重啟, 因此問題不算太大.

JetPack 毫不留情的轟炸我的郵箱
閱讀全文 解決 Openwrt 隨機重啟/死機 問題