自宅伺服器公開的現實

對於在自宅架設伺服器的人來說,想必會有共鳴。「為了讓外部可以存取」有很多麻煩的障礙,我想這是通過許多面對必須克服的。

我整理了一些自宅伺服器初學者的試行錯誤。可能會有錯誤的認知或建議的地方,若有此情況,請悄悄地告訴我,我會非常感激...!

首先嘗試的方法

  1. 在路由器上設定端口轉發,使外部的 TCP 80/443 能夠轉發到伺服器。
  2. 將 ISP 分配的全球 IP 登記至 DNS。
  3. 家庭網路的 IP 會變動,使用DDNS 客戶端不斷更新最新的 IP。(※有些家庭網路提供 IP 固定化的服務)
  4. 結合 Let's Encrypt 等自動化證書更新

實運行中面臨的痛苦與艱辛

  • 剛開放端口就遭遇大量的掃描日誌
    • 包括來自國外的通信及知名路徑的存取……
  • 即使使用 fail2ban 等手段處理,但仍需「以被攻擊為前提」(不斷支付日誌監控的心理成本)
  • DDNS 更新一停止就會無法運作
  • 路由器的設定與雙重 NAT 讓我苦不堪言的經驗。(老實說這讓我感到相當困惑……寸步難行)

這些運維的樂趣可能是其魅力所在,但在安全性方面,我決定將其交給雲端業者來處理。
Cloudflare 對我來說實在是太感謝了...

2. Cloudflare Tunnel 的機制

官方文件的說明

Cloudflare Tunnel 為您提供了一種安全的方式,將資源連接到 Cloudflare,而無需公共路由 IP 地址。
一個輕量級的守護程式(cloudflared)創建出站連接到 Cloudflare 的全球網路。
(Cloudflare 文件)

大致解釋

  • 在伺服器上運行 cloudflared
  • 這僅使用外向通信來與 Cloudflare 的邊緣連接。
  • 外部用戶首先訪問 Cloudflare → 通過隧道轉發到自宅伺服器。

特點

  • 不需要在路由器上開放端口。
  • 全球 IP 變動也不成問題。
  • 外部僅能看到 Cloudflare 的邊緣,因而無法直接訪問自宅伺服器的 IP 或端口

換句話說,這不是「打開大門等待」,而是「自己在 Cloudflare 那裡開個後門,安全地接待訪問」的機制(這樣的比喻是否正確呢)。

3. IP 變動及 DDNS 不必要的原因

對於「如果 IP 變更,會不會無法連接?」的疑慮,做個整理如下。

全球 IP 變動的情況

  • 在家庭網路中,ISP 分配的 全球 IP 可能在幾天到幾週內會變動。
  • 傳統的方法需要使用 DDNS 服務,不斷更新 DNS,否則無法從外部連接。
  • 然而在 Cloudflare Tunnel 中,伺服器端的 cloudflared 是主動與 Cloudflare 連接,因此外部用戶只需訪問 Cloudflare 的邊緣即可。
  • 即便全球 IP 發生變化,只要 cloudflared 重新連接,仍可正常使用。

結論:不需要 DDNS,無需擔心全球 IP 變動。(欣喜若狂)


私有 IP 變動的情況

  • 另一方面,如果伺服器自身的私有 IP(例如:192.168.0.10)發生變化,那就是另一回事了。
  • 這一變化會導致即使隧道仍存在,也無法到達應用程式。

重點:伺服器必須分配固定的私有 IP。
如果運行 Raspberry Pi 或 NUC,請手動設定固定 IP,而不是依賴 DHCP。

4. 安全性

使用 Cloudflare Tunnel 之後,「外部僅能看見 Cloudflare 的邊緣」,因此不會直接訪問自宅伺服器。
此外,能夠直接享受 Cloudflare 方面的安全功能也是一大優勢。以下是根據官方文件整理的 免費方案能涵蓋的範圍


4.1 永久開啟的 DDoS 防護

Cloudflare 在所有方案中均提供 DDoS 攻擊防御。

“自動檢測和減輕分散式拒絕服務(DDoS)攻擊。
適用於所有方案
Cloudflare 自動檢測及減輕分散式拒絕服務(DDoS)攻擊,透過我們的自動化 DDoS 系統。”

(Cloudflare DDoS 文件)

重點

  • 免費方案也包含 L3 到 L7 的 DDoS 防禦。
  • 攻擊首先會在 Cloudflare 的邊緣被吸收。
  • 因此,「ISP 網路被壓垮(由大量流量使自宅回線崩潰)」的風險大幅降低。

4.2 WAF(網頁應用防火牆)

Cloudflare 的 WAF 基本功能已包含在免費方案中。

“自動保護免於漏洞,並可以創建自定義規則的靈活性。
適用於所有方案
Cloudflare 網頁應用防火牆(Cloudflare WAF)檢查傳入的網頁和 API 請求,並根據一組叫做規則集的規則過濾掉不必要的流量。負責 WAF 規則的匹配引擎支持使用規則語言的 wirefilter 語法。”

(Cloudflare WAF 文件)

重點

  • 對於 SQL 注入、XSS 等代表性攻擊模式,可透過 Cloudflare 免費管理的規則集進行基本的封鎖(應該是如此)。

4.3 TLS/HTTPS 自動化

Cloudflare 為所有方案免費提供 Universal SSL

“對您的網路流量進行加密,以防止數據竊取及其他篡改。
適用於所有方案
通過 Universal SSL,Cloudflare 成為第一家提供免費 SSL/TLS 保護的網路性能和安全公司。Cloudflare SSL/TLS 還提供許多其他功能以滿足您的加密需求和證書管理需求。可參考開始使用了解更多。”

(Cloudflare SSL/TLS 文件)

重點

  • 自動發行和更新證書。
  • 不再需要在自宅伺服器端運行 certbot。
  • 即使是免費方案,也能擺脫證書到期管理(欣喜若狂)。

4.4 機器人管理(免費方案的範圍)

Cloudflare 有高級的收費機器人管理功能,但在免費方案中也能進行簡易檢測。

“識別和減輕自動流量,以保護您的域名不受惡意機器人的攻擊。
適用於所有方案”

(Cloudflare 機器人管理文件)

重點

  • 除了自動識別已知的惡意爬蟲和垃圾郵件機器人,系統會回傳計算量高的挑戰來阻擋這些流量。

4.5 請求限制(收費功能)

Cloudflare 擁有可以限制請求數的 請求限制 功能,但這不包括在免費方案內。

“請求限制適用於收費方案。”
(Cloudflare 請求限制文件)

補充

  • 雖然「請求限制」(請求控制規則)可以在免費方案中使用(無需額外計費),但最多僅能設定 1 條規則。
  • 若想設定多條更靈活的規則,必須升級至收費方案(Pro/Business)。

5. 總結

對我而言,透過自我摸索及使用雲端業者的服務,能感受到「他們能幫我做到那麼好的事情?!」所帶來的驚喜與快樂,並讓我更加深入學習。(這次正是如此)

每個人享受自宅伺服器的方式都不同,但我會在體驗雲端業者的優秀之際,繼續努力,並在能夠依賴的地方好好依賴,讓我繼續享受快樂的自宅伺服器生活!


原文出處:https://qiita.com/keke21/items/efaa2b2c35dfb646a43e


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝10   💬8   ❤️12
427
🥈
我愛JS
📝1   💬6   ❤️4
90
🥉
酷豪
📝1   ❤️1
52
#4
AppleLily
📝1   💬4   ❤️1
41
#5
💬3  
10
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次