惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
TaoSecurity Blog
TaoSecurity Blog
H
Heimdal Security Blog
Help Net Security
Help Net Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
N
News | PayPal Newsroom
V2EX - 技术
V2EX - 技术
博客园 - 【当耐特】
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
有赞技术团队
有赞技术团队
S
Schneier on Security
S
SegmentFault 最新的问题
Google Online Security Blog
Google Online Security Blog
H
Hacker News: Front Page
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
PCI Perspectives
PCI Perspectives
IT之家
IT之家
Project Zero
Project Zero
博客园 - 司徒正美
P
Privacy International News Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Jina AI
Jina AI
Security Latest
Security Latest
Hacker News - Newest:
Hacker News - Newest: "LLM"
腾讯CDC
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
V
Vulnerabilities – Threatpost
W
WeLiveSecurity
NISL@THU
NISL@THU
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
L
Lohrmann on Cybersecurity

人生這部戲

學車記 出門在外,用 Tailscale 遠程連回家中 Mac 跑 Claude Code AI 程式碼助手深度對比:OpenClaw vs Claude Code vs Codex(2026) OpenClaw Multi-Agent 系統實戰:sessions_spawn、sessions_send 與持久化代理的完整解析(升級版) 週三夜裡,跑馬地的燈亮起來了 夜深人靜,螢幕裡的精靈世界 Tavily Search 介紹:AI 時代的搜尋引擎 為你的 OpenClaw 配備擬人化的卡通界面 新 Mac Mini 到手第一天的悲劇:一場沒有鍵盤引發的災難 OpenClaw 升級後回滾完整指南:從備份到恢復的實戰教程
使用 Cloudflare Tunnel 安全遠端存取 OpenClaw 控制台
Frank · 2026-03-12 · via 人生這部戲

OpenClaw 今年開始在 AI 的浪潮下變得很流行。從科技愛好者到普通用戶,越來越多人開始在本地架設這個 AI 助手——它確實很方便,可以幫你整理新聞、監控股票、記錄日記、甚至管理你的日程。某種程度上,它已經從一個「技術玩具」變成了許多人日常生活中的數位小幫手。

但這類工具都有一個共同的限制:當你不在電腦旁邊的時候,該怎麼辦?當然,絕大多數的 OpenClaw 設定都可以透過 Telegram、WhatsApp 或 Discord 這類聊天應用來互動,但如果你想要查看系統狀態、調整某個定時任務,或是修改某個設定參數,單靠文字對話就變得很困難。這時候,能夠直接存取那個瀏覽器裡的 Web Control 介面,就變得非常重要。

既然需要遠端存取 Web 介面,最直覺的解決方案似乎很簡單:修改 OpenClaw 設定讓它監聽 0.0.0.0:18789,然後透過路由器的 port forwarding 把這個端口暴露到公網。這樣無論在哪裡,只要知道 IP 和端口就能存取。

但是,千萬不要這麼做。

讓我認真地說明這個問題的嚴重性——因為這不只是「技術上的小細節」,而是可能讓你的整個系統暴露於風險之中的致命錯誤。

2024 年 8 月,資安研究人員揭露了一個被稱為「0.0.0.0 Day」的重大漏洞(Oligo Security 研究報告)。這個漏洞影響了所有主流瀏覽器——Chrome、Firefox、Safari——允許惡意網站繞過瀏覽器的安全限制,直接與你本地網路中的服務互動。

具體來說,如果你在一台有漏洞的作業系統上(是的,macOS 也在受影響名單中),開啟一個惡意網頁,那個網頁就能向 0.0.0.0:任意端口 發送請求。這意味著什麼?任何綁定在 0.0.0.0 上的本地服務,都可能被遠端的攻擊者直接存取。

這不是理論上的威脅。看看 Ollama——這個流行的本地 AI 模型伺服器——的真實案例:

  • 2024 年 11 月,Trend Micro 的研究發現有超過 3,000 台 Ollama 伺服器暴露在公網上且沒有任何認證
  • 到了 2025 年,這個數字飆升到 超過 10,000 台
  • 這些暴露的伺服器成為攻擊者的獵物,導致資料外洩、模型被竊取,甚至是遠端程式碼執行(Wiz Research 發現的 CVE-2024-37032

NSFOCUS 在 2025 年 3 月發布的警示(CNVD-2025-04094)更直接指出:Ollama 預設沒有認證和存取控制功能,一旦配置不當暴露在公網,就等同於把家門鑰匙留在門外。

或許你會想:「OpenClaw 又不像 Ollama 那麼複雜,能有多大的風險?」

讓我說明如果一個服務被攻破,攻擊者能做些什麼:

  1. 資料竊取:你的 API keys、設定檔、本地檔案都可能被讀取
  2. 橫向移動:從一個暴露的服務進入你的內網,再攻擊其他設備
  3. 植入後門:在你的系統上安裝惡意軟體,長期監控
  4. 加密勒索:這已經是最「文明」的攻擊方式了

Cisco 的研究團隊在 2025 年 9 月透過 Shodan 掃描發現,大量暴露的 LLM 伺服器都面臨「未經授權的提示注入攻擊」風險(Cisco 研究)。這不只是數字上的威脅,而是真實發生、每天都在上演的攻擊。

結論很簡單:永遠不要把本地服務綁定到 0.0.0.0 並暴露到公網。永遠不要。

既然直接暴露端口這條路走不通,那我們需要一個既能遠端存取、又能保證安全的方案。這就是 Cloudflare Tunnel 登場的時候。

Cloudflare Tunnel 的核心概念非常巧妙:與其讓外部流量「進入」你的網路(這需要開放端口),不如讓你的 Mac mini「主動連出」到 Cloudflare 的網路。這個連線是加密的、出站的,不需要任何端口轉發。然後 Cloudflare 會給你一個 HTTPS 網址,無論在哪裡都能安全存取。

這有幾個巨大的優勢:

  • 不需要開放任何端口:你的路由器不需要做任何 port forwarding
  • 自動 HTTPS:Cloudflare 提供免費的 SSL 憑證
  • 可選的 Zero Trust 認證:可以設定只有特定 Email 才能存取
  • 即使 IP 變動也沒問題:不需要動態 DNS

讓我們一步步來設定。

在開始之前,你需要準備:

  1. 一個 Cloudflare 帳號(免費版即可)
  2. 一個你擁有的網域名稱(可以是任何域名,透過 Cloudflare 管理)
  3. 你的 Mac mini 已經安裝了 Homebrew

如果你還沒有把網域加入 Cloudflare,請先完成這個步驟。Cloudflare 會引導你修改 DNS 設定,通常幾分鐘就能生效。

在你的 Mac mini 上開啟終端機,安裝 Cloudflare 的命令列工具:

安裝完成後,確認版本:

執行以下命令來認證:

這會在瀏覽器中開啟一個登入頁面。選擇你想要使用的網域,授權完成後回到終端機,你會看到一個憑證檔案已經被下載。

現在建立一個新的隧道,我們把它命名為 openclaw-macmini(你可以改成任何你喜歡的名稱):

cloudflared tunnel create openclaw-macmini

執行後會顯示類似這樣的輸出:

Tunnel credentials written to /Users/YOUR_USERNAME/.cloudflared/xxxxx-xxxx-xxxx-xxxx-xxxxxxxx.json
Tunnel ID: xxxxx-xxxx-xxxx-xxxx-xxxxxxxx

重要:請記下這個 Tunnel ID,我們稍後會用到。

建立設定檔案:

nano ~/.cloudflared/config.yml

貼入以下內容(記得替換 <YOUR_TUNNEL_ID><YOUR_DOMAIN>):

tunnel: <YOUR_TUNNEL_ID>
credentials-file: /Users/YOUR_USERNAME/.cloudflared/<YOUR_TUNNEL_ID>.json

ingress:
  - hostname: openclaw.yourdomain.com
    service: http://localhost:18789
  - service: http_status:404

說明:

  • hostname:你想要使用的子網域名稱,例如 openclaw.example.com
  • service:指向 OpenClaw 在本機的位址,這裡是 http://localhost:18789
  • 最後一行的 http_status:404 是為了處理不符合任何規則的請求

儲存檔案(Ctrl+O 然後 Enter,再按 Ctrl+X 離開)。

進階:同一隧道服務多個應用

如果你想透過同一個隧道暴露多個本地服務(例如同時暴露 OpenClaw 和另一個本地應用),可以在 ingress 中添加多個規則:

tunnel: <YOUR_TUNNEL_ID>
credentials-file: /Users/YOUR_USERNAME/.cloudflared/<YOUR_TUNNEL_ID>.json

ingress:
  - hostname: openclaw.yourdomain.com
    service: http://localhost:18789
  - hostname: app2.yourdomain.com
    service: http://localhost:8080
  - service: http_status:404

重要規則:

  • 順序很重要:Cloudflare 會按照從上到下的順序匹配,第一個匹配的域名會被使用
  • 每個 hostname 都需要執行 cloudflared tunnel route dns 來設定 DNS
  • 最後一條 service: http_status:404 是必須的 catch-all 規則,處理不匹配的請求

告訴 Cloudflare 把這個子網域指向你的隧道:

cloudflared tunnel route dns openclaw-macmini openclaw.yourdomain.com

這會在 Cloudflare 的 DNS 設定中自動建立一個 CNAME 記錄,指向你的隧道。

先不要急著設定開機啟動,讓我們先測試一下:

cloudflared tunnel run openclaw-macmini

如果一切正常,你會看到類似這樣的輸出:

2026-03-12T00:00:00Z INF Starting tunnel tunnelID=xxxxx-xxxx-xxxx-xxxx-xxxxxxxx
2026-03-12T00:00:00Z INF Connected to Cloudflare edge

現在,在任何裝置的瀏覽器中開啟:

https://openclaw.yourdomain.com

你應該能看到 OpenClaw 的控制台介面了!

測試沒問題後,讓我們把隧道設定為系統服務,這樣 Mac mini 重開機後會自動連線:

sudo cloudflared service install

重要:為了避免配置檔案路徑混亂,建議明確指定 --config 參數。檢查並修改 plist 檔案:

# 查看 plist 內容,確認是否已指定 --config
cat /Library/LaunchDaemons/com.cloudflare.cloudflared.plist | grep -A 10 "ProgramArguments"

# 如果沒有指定 --config,手動修改
sudo nano /Library/LaunchDaemons/com.cloudflare.cloudflared.plist

找到 <array> 部分,確保格式如下(明確指定 config 路徑):

<array>
    <string>/opt/homebrew/bin/cloudflared</string>
    <string>--config</string>
    <string>/Users/YOUR_USERNAME/.cloudflared/config.yml</string>
    <string>tunnel</string>
    <string>run</string>
    <string>--token</string>
    <string>YOUR_TOKEN</string>
</array>

然後載入服務:

sudo launchctl load /Library/LaunchDaemons/com.cloudflare.cloudflared.plist

驗證服務是否正常運作:

sudo launchctl list | grep cloudflared

如果看到類似 PID 的數字,表示服務正在運行。

如果你希望更進一步保護這個存取點,可以啟用 Cloudflare Access(Zero Trust)。這樣即使有人知道網址,也需要通過身份驗證才能存取。

  1. 登入 Cloudflare Zero Trust
  2. 進入「Access」→「Applications」
  3. 點擊「Add an application」
  4. 選擇「Self-hosted」
  5. 設定:
    • Application name: OpenClaw Remote Access
    • Session duration: 24 hours(或你偏好的時間)
    • Domain: openclaw.yourdomain.com
  6. 在「Policies」新增一個規則:
  7. 儲存設定

現在每次存取 https://openclaw.yourdomain.com 時,都會先跳轉到登入頁面,只有你的 Email 能通過驗證。

某種程度上,我們在追求便利的同時,常常忽略了安全的代價。把本地服務綁定到 0.0.0.0 看似是個「快速解決方案」,但背後的風險是真實且巨大的——從「0.0.0.0 Day」漏洞到成千上萬台被暴露的 AI 伺服器,這些都不是遙遠的威脅,而是每天都在發生的現實。

Cloudflare Tunnel 提供了一個優雅的替代方案:不需要開放任何端口、自動獲得 HTTPS 加密、可以隨時隨地安全存取。更重要的是,它遵循「最小權限」原則——你的服務只對你開放,而不是對整個網際網路。

說不定,這種「主動連出」的架構會成為未來遠端存取的標準模式。畢竟,在這個資安威脅日益複雜的時代,防禦的最佳方式有時候不是建立更高的牆,而是根本不要開那扇門。

診斷流程:

步驟檢查指令預期結果
1. 本地服務是否正常curl http://localhost:18789應返回 OpenClaw 頁面內容
2. 隧道是否在線cloudflared tunnel listHEALTH 應顯示為 healthy
3. Ingress 規則是否匹配cloudflared tunnel ingress rule openclaw.yourdomain.com應顯示對應的 service
4. DNS 是否生效dig openclaw.yourdomain.com應顯示 CNAME 到 *.cfargotunnel.com
5. 查看日誌sudo log show --predicate 'process == "cloudflared"' --last 5m查看錯誤訊息

最常見原因:配置檔案路徑不一致

手動執行 cloudflared tunnel run 時,預設讀取 ~/.cloudflared/config.yml,但系統服務(launchd)可能讀取不同路徑。

解決方案: 始終明確指定 --config 參數,如步驟七所示。

正確流程:

# 1. 編輯配置
nano ~/.cloudflared/config.yml

# 2. 驗證配置語法(手動測試)
cloudflared tunnel --config ~/.cloudflared/config.yml run openclaw-macmini
# 按 Ctrl+C 停止

# 3. 重啟系統服務
sudo launchctl unload /Library/LaunchDaemons/com.cloudflare.cloudflared.plist
sudo launchctl load /Library/LaunchDaemons/com.cloudflare.cloudflared.plist

# 4. 驗證狀態
cloudflared tunnel info openclaw-macmini
用途指令
查看所有隧道cloudflared tunnel list
查看隧道詳情cloudflared tunnel info openclaw-macmini
檢查 Ingress 規則cloudflared tunnel ingress rule openclaw.yourdomain.com
查看所有路由cloudflared tunnel route list
手動執行隧道cloudflared tunnel run openclaw-macmini
查看服務狀態sudo launchctl list | grep cloudflared
查看日誌sudo log show --predicate 'process == "cloudflared"' --last 10m
驗證 DNSdig openclaw.yourdomain.com
測試本地服務curl http://localhost:18789

問題描述:

  • 手動執行:cloudflared tunnel run 讀取 ~/.cloudflared/config.yml
  • 系統服務:可能讀取 /usr/local/etc/cloudflared/config.yml 或其他路徑

解決方案: 始終明確指定 --config 參數,確保一致性。

檢查當前服務使用的配置:

cat /Library/LaunchDaemons/com.cloudflare.cloudflared.plist | grep -A 10 "ProgramArguments"

確保輸出中包含 --config /Users/YOUR_USERNAME/.cloudflared/config.yml

問題: Ingress 規則必須使用空格縮排(2 或 4 個空格),不能使用 Tab。

錯誤示例:

ingress:
  - hostname: openclaw.yourdomain.com
    service: http://localhost:18789  # 縮排不一致會導致解析失敗

正確示例:

ingress:
  - hostname: openclaw.yourdomain.com
    service: http://localhost:18789
  - service: http_status:404

每新增一個 hostname,都需要執行:

cloudflared tunnel route dns openclaw-macmini newhostname.yourdomain.com
  1. 統一配置路徑:始終使用 ~/.cloudflared/config.yml
  2. 明確指定參數:在 plist 中明確 --config 路徑
  3. 驗證再重啟:修改配置後先用 tunnel run 手動驗證,再重啟服務
  4. 使用絕對路徑:避免使用 ~ 簡寫,使用完整路徑 /Users/使用者名稱/...
  5. 保持日誌開啟:出現問題時第一時間查看日誌

參考資料: