Ban 掉來自中國 IP 的流量

前言

隨著我博客來自大陸的流量越來越多, 我逐漸開始有一點擔心. 雖然我已經屏蔽了國內搜索引擎的 Spider, 但是來源於大陸的流量還是和來源於美帝的不相上下. 從各個地方 Ping 的結果也不樂觀, 大陸地區已經出現隨機丟包的現象, 而且很嚴重. 我暫時沒有搞清楚這是針對我的域名還是針對 Cloudflare CDN 的流量.

目前正值建襠百年特別時期, 地鐵站的安檢人員都肉眼可見的增加了數量, 更別說在線管控了. 更加誇張的是, 著名反動博主編程隨想都在5月中旬被消失 ( 我為此傷心了真的非常久 ), 論技術, 我肯定都配不上給編程隨想提鞋, 況且我在用 BugPress 作為博客程序; 要是誰哪天看我不爽來搞我, 我肯定分分鐘去吃國家飯.

然而從我的角度來說, 我肯定不會因為局勢 intense 而乖乖閉嘴: 要我閉嘴不如先去叫我死. 但是隨著我的成長和文章數量的增多, 日後我肯定要浪費大量時間在安全防範上, 而且我目前肉身還在牆內, 物理安全得不到保障.

綜上所述, 雖然我真的很不捨得放棄將近一半的流量, 我還是得這麼做, 幹掉所有來自大陸的流量 (不包括香港, 以及本來就不包括台灣) . 這樣, 至少在我肉身在牆內的階段應該不會有人來找我麻煩 — 這只是一個戰略讓步, 一旦我肉身過牆, 我會立即取消這個設定.

設置

根據國家地區自動 Ban 流量

我目前在使用 Cloudflare 作為我的域名提供商和 CDN. Cloudflare 是有設定可以幹掉來自某些地區的流量的 (在防火牆設定裡) , 但是很不幸, 如果要顯示一個頁面說明為什麼無法訪問 , 這是要收錢滴. (所以不在考慮範圍內)

所以我只好曲線救國. Cloudflare 有一個大家都不怎麼用的 Tab 叫轉換規則, 可以在滿足特定條件重寫路徑. 這樣的話, 只要對那個路徑重定向, 就可以達成我的目的.

我同時 Ban 掉了一批極權國家
(ip.geoip.country in {"KP" "CG" "CD" "CF" "SY" "TD" "TM" "LA" "GQ" "TJ" "YE" "SA" "UZ" "BI" "ER" "IR" "CN" "BH" "SD" "BY" "GW" "AZ" "AE" "DJ" "VE" "CM" "TG" "CU" "AF" "EG" "VN" "OM"} and not ip.geoip.country in {"TW" "HK" "T1"} and http.host eq "justin.education")

因為我不太確定 Cloudflare 有沒有把香港、台灣算作中國區, 所以我特別設置了兩地的白名單. 另外, 如果有 Tor 出口節點在大陸的網友, 訪問我的博客也不會成問題. (真的會有嗎)

最後, 我再設計一個轉發 URL 就完成了. 現在只要被檢測到來自大陸的流量, 在源服務器有任何 contact 之前就會被 Cloudflare CDN 定向到 ban.justin.education.

ban.justin.education

這個頁面是託管在 pages 上的. 因此如果你是從大陸地區訪問, 流量都不會到達我的服務器, 全部在 CF 的網絡中導來導去, 因此應當可以立刻看到這個頁面.

切換到 VPN 之後立刻解除 Ban

首先我要聲明, 除了我自己, 我是不會奢望任何人為了我的博客費勁吧哈的去裝一個 VPN 然後再去刷新頁面的, 所以現在要配置的功能基本是雞肋之至, 除了心理安慰以外不能給予任何實際好處, 我要實現這個功能完全是沒事幹, 完畢.

好, 那麼怎樣在訪客切換了 VPN 之後跳回主站點呢…? 其實大致的方法還是和上一個是一模一樣的. 當滿足 (主機名 = ban.justin.education) && (國家 != any 不民主國家) 的時候, 首先執行 redirect to "/removed", 然後設置一個頁面規則, 當滿足 path = ban.justin.education/removed, 就 redirect to justin.education, 這樣不就圓滿了嗎!

理想很豐滿啊, 但是瀏覽器緩存的問題還是不能忽視. 我分別拿手頭有的 safari 和 firefox 做了測試. 測試內容都是先用牆國的網絡訪問一遍博客 -> 被 Ban, 然後再切到美帝的線路刷新頁面.

Safari 的表現很不錯, 總體跳轉順序如下:

(中華網絡打開)
justin.education -> ban.justin.education
(切換到美帝線路, 刷新)
ban.justin.education
-> ban.justin.education/removed
-> justin.education

隱身模式下的 safari 有一點迷惑性, 我觀察到跳轉順序是這樣的, 不知道是不是個例

(中華網絡打開)
justin.education -> ban.justin.education
(切換到美帝線路, 刷新)
ban.justin.education
-> ban.justin.education/removed
-> justin.education
-> ban.justin.education
-> ban.justin.education/removed
-> justin.education

對於上面的觀察, 我的理解是, safari 緩存了 justin.education -302-> ban.justin.education 的邏輯, 然後無腦重做了一遍, 然後又給整回來了, safari 於是將緩存過期, 不再跳轉.

Firefox 就又點差強人意, 切到美帝線路 Ctrl+R 之後愣是啥都沒動. 非要我 Ctrl+Shift+R 清楚緩存刷新之後才給我跳了回去.

總之, 這個配置現在也不成問題了.

結語

有個社會學家曾經說過, 如果你來到一個國家, 看到報紙上都是好消息, 那麼這個國家的好人其實都在監獄裡. 現在本該自由的網路也被籠罩在言論審查的陰影下, 不得不說是民族的巨大不幸.

我並不會因為 Ban 掉大陸流量而停止寫博文, 相反, 知道創作內容不會被大陸網警看到反而去掉了我的枷鎖, 讓我不用再斟字酌句的避免敏感詞了. 我對這個博客的未來很有信心, 我也會不斷的向其中添磚加瓦!

(另: 為了安全性考慮, 我之後有很大可能性把博客做成靜態頁面打包上傳到 cloudflare pages 上, 或者嘗試一些去中心化方案, 比如 zeronet+tor.)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *