Cloudflare Tunnel
Overview¶
Cloudflare Tunnel 係一個安全嘅、純出站連接,位於你嘅伺服器同 cloudflare 邊緣之間。一個 cloudflared daemon 喺你嘅機器上運行,建立一個持久嘅出站隧道,令本地服務可以通過公開主機名暴露,而唔需要開放入站防火牆端口。佢取代咗自托管設置中傳統嘅反向代理同端口轉發,特別喺運行 docker 嘅 Oracle ARM VPS 上。
How it works¶
隧道喺 Cloudflare 控制台嘅 Networking → Tunnels 下配置。建立隧道之後,你添加 Public Hostname 條目,將子域名(例如 chrome.benhoweb.com)映射到使用 HTTP 類型嘅本地服務。與其輸入 localhost:3000,你使用 container name 同內部端口,例如 http://browserless:3000。
只有當服務容器同 cloudflared 容器共享同一個 Docker bridge 網絡時,呢個先至有效。喺典型設置中,所有面向 Web 嘅容器都加入一個名為 cf_network 嘅外部網絡:
networks:
cf_network:
external: true
一個嚴格嘅安全規則適用:cf_network 上嘅容器絕對唔可以向主機發布端口(唔可以 ports: - "8080:80")。呢個完全消除咗直接嘅外部攻擊面——Cloudflare Tunnel 成為唯一嘅入口點。
Security hardening¶
通過隧道公開暴露服務意味住你應該喺敏感主機名前面添加 Cloudflare Access 應用程式規則。例如,一個位於 pass.benhoweb.com 嘅自托管 vaultwarden 實例可以要求 Windows Hello / passkey 驗證,先至令請求到達密碼管理器。Browserless 可以執行任意 JavaScript,亦都應該用 MFA 保護,以防止佢被用作跳板機。
部分應用程式喺 Cloudflare Access 之上仲需要自己嘅身份驗證。當 browserless/chrome 設置咗 TOKEN 環境變量時,打開 URL 而冇 token 會返回 Unauthorized。你必須訪問 https://chrome.benhoweb.com/?token=YOUR_TOKEN 先至可以訪問 Playground。內部服務好似 n8n 可以通過 cf_network 直接調用 http://browserless:3000/content?token=YOUR_TOKEN,繞過公共互聯網並減少延遲。
Secrets and automation¶
隧道 token、Cloudflare API token 同 zone ID 係敏感值,唔應該存在純文本 .env 文件中。使用 infisical 作為中央秘密管理器——佢存儲 `CLOUDFLARE