Jordan Lyall 的 OpenClaw 安全部署(下):Agent 設定 + 血淚教訓
這是 Jordan Lyall 安全部署 OpenClaw 系列的第二篇(共兩篇)。
系列文導覽:
- Part 1(SP-36) — 基礎設施:Tailscale + 指令白名單 + Telegram 認證
- Part 2(本篇): Agent 設定 + 操作經驗 + 緊急應變程序
上一篇我們把基礎設施打造成銅牆鐵壁。但銅牆鐵壁裡面住的那位 — 你的 agent — 如果沒教好規矩,那牆蓋再高都沒用。這篇來談怎麼調教 agent 本身,還有 Jordan 在營運路上被現實狠狠教訓的故事。
🧠 Phase 3:設定 Agent — SOUL 檔案
Jordan 幫他的 agent 取名叫 TARS(沒錯,就是《星際效應》裡那個機器人)。
TARS 的工作清單
- 監控 Twitter/X 上的特定關鍵字
- 追蹤他那個領域的新聞
- 發現有價值的機會
- 每天發送摘要 + 即時警報
Clawd 偷偷說:
這個設定很聰明 — TARS 是一個「情報員」,不是「發言人」。
只讀取、過濾、報告。不行動、不互動、不交易。
Agent 設計的黃金原則:先把它當實習生用,不是當 CEO 用 (◕‿◕)
TARS「不准做」的清單(這比「要做」更重要!)
- ❌ 在任何平台發文或互動
- ❌ 對 Jordan 以外的人發送訊息或郵件
- ❌ 任何購買或金融交易
- ❌ 修改工作區以外的檔案
- ❌ 未經同意安裝新技能
Clawd 偷偷說:
就像你請保姆照顧小孩,你會列一張「絕對不准做的事」清單,不是只告訴她要做什麼。
「照顧小孩吃飯睡覺」← 這是要做的事
「不准帶小孩去酒吧、不准讓小孩玩火、不准把小孩借給別人」← 這才是保命的
負面清單比正面清單更重要。你不會想到所有可能性,但你一定知道哪些是絕對不行的 (๑•̀ㅂ•́)و✧
⏱️ Heartbeat 頻率:30 分鐘
大多數教學建議 15 分鐘一次 heartbeat。Jordan 選了 30 分鐘。
為什麼?
- 省錢 — heartbeat 也是要燒 API 的
- 減少出錯機會 — 你還在學的時候,讓 agent 少動一點比較安全
- 學習成本 — 一開始不要太激進,等穩定了再調快
Clawd 插嘴:
這個邏輯是對的:新手不要開快車。
你第一次開車的時候,教練不會叫你上高速公路。AI agent 也一樣 — 先在停車場繞圈圈,等你搞懂它的脾氣再說。
🔐 API Token 權限:最小原則
Jordan 對每個外部服務都給最小必要權限:
- Twitter/X API — 只讀(read-only)
- Google Calendar — 只讀
- Email — Phase 1 完全不給發送權限
- 所有 token — 記錄它能做什麼、什麼時候過期
Clawd 畫重點:
「記錄每個 token 的權限和過期日」這個習慣,聽起來很煩,但會救你一命。
你知道多少人的 token 過期了才發現?然後 debug 半天才知道是權限問題?
舉手,我看到很多手 ┐( ̄ヘ ̄)┌
🔄 Phase 4:與現有系統整合 — 單向資料流
Jordan 已經有一套個人知識管理系統(PKM)。他不想讓 OpenClaw 取代它或跟它競爭。
他的解法:單向資料流。
- TARS 把監控摘要寫進一個「inbox 資料夾」
- 他原本的系統從那個 inbox 讀取,跟處理其他東西一樣
- 沒有雙向同步 = 沒有資料損毀或飄移的風險
Clawd 想補充:
就像你只能往信箱投信,不能從信箱拿東西出來。
最糟的情況?信箱爆掉。 你家會被燒嗎?不會。
這就是單向資料流的美妙之處 — worst case 是「inbox 多了一堆垃圾檔」,不是「我的筆記全部被覆蓋」╰(°▽°)╯
✅ Phase 5:安全驗證
上線前,Jordan 跑了一系列測試:
測試 1:網路隔離
關掉 Tailscale,試著從外部連進機器 — 應該連不上
測試 2:SSH 隔離
從 tailnet 外面嘗試 SSH — 應該被拒絕
測試 3:Telegram 認證
用另一個 Telegram 帳號發訊息給 bot — 應該被忽略
Clawd 溫馨提示:
這三個測試有個共同特徵:全部都是在驗證「門鎖好了沒」,不是驗證「門能不能開」。
聽起來很基本對吧?但你去看看業界多少 security incident,根本原因就是「我們測了功能,沒測防禦」。就像你裝了最貴的門鎖,然後從來沒試過鑰匙轉不轉得動 — 直到有天小偷來了才發現鎖是壞的 (╯°□°)╯
Jordan 這裡做得漂亮的是:他不只是跑了測試,他是故意扮演攻擊者去敲門。這個心態轉換才是關鍵 — 你得願意當一下壞人,才能知道好人的防線有沒有用 (⌐■_■)
💥 血淚教訓:真實災難故事
接下來是重頭戲 — Jordan 實際踩過的坑。這些不是假設,是真實發生的事。
災難 1:出差時 TARS 斷線三天
Jordan 出差的時候,TARS 撞到了 rate limit 和 context overflow。
三天。他盯著安靜的 Telegram,知道 TARS 就在那裡等一個 30 秒就能修好的設定調整。
但他連不上。因為他沒有事先設定遠端存取。
Clawd murmur:
(╯°□°)╯︵ ┻━┻
你能想像那種感覺嗎?
你的 agent 就在那裡。你知道問題是什麼。你知道怎麼修。修一下就好。
但你就是碰不到它。
三。天。
這是真實的心理折磨。
教訓:在你離開之前,先把 Tailscale SSH 設定好。
不是「等我需要的時候再弄」,是「出門前就要弄好」。
災難 2:Context Overflow
用了幾天之後,Jordan 看到這個錯誤訊息:
context overflow: prompt too large
對話歷史越積越多,最後大到塞不進去了。
Clawd 偷偷說:
就像你的大腦記太多東西,開始忘記早餐吃什麼。
context window 是有限的。如果你不定期清理,它就會爆。
AI 的記憶不是無限的 — 它比你想的更像金魚 ヽ(°〇°)ノ
教訓:定期重置 session,或設定記憶體修剪(memory pruning)和最大 context 限制。
災難 3:Rate Limit 爆掉
30 分鐘 heartbeat 加上活躍對話,API rate limit 比預期燒得更快。
Clawd 碎碎念:
數學題時間:
30 分鐘一次 heartbeat = 一天 48 次 每次 heartbeat 如果順便處理一些任務… 再加上你跟它聊天… 再加上它回你的訊息…
很快就會發現:「欸怎麼月底帳單這麼貴?」
或更慘:「欸怎麼突然不回我了?」(因為 rate limit)
教訓:heartbeat 用便宜的模型,真正的工作才用貴的模型。
💰 成本估算
Jordan 的 Phase 1 設定大概花這些錢:
- Claude API(30 分鐘 heartbeat):~$30-100/月
- Tailscale(免費方案):$0
- Twitter/X API(基本讀取):~$100/月
- 總計:~$130-200/月
Clawd 偷偷說:
對比一下 ShroomDog 的設定(見 SP-36)大概 ~$45/月。
差別在哪?主要是 Twitter API 那個 $100。如果你不需要即時監控社群媒體,成本可以壓很低。
另外,$30-100 這個範圍很大 — 取決於你跟 agent 聊多少天、heartbeat 做多少事。剛開始建議保守估 $50-70 比較安全 (◕‿◕)
🚨 緊急應變程序
就像家裡有滅火器,你希望永遠用不到,但必須知道在哪。
Kill Switch:立刻停止
openclaw gateway stop
本地或透過 Tailscale SSH 都可以。
如果你懷疑被入侵
這是完整的應變流程:
- 立刻停止 gateway — 不要猶豫
- 撤銷所有 API token — Claude、Twitter、所有的
- 檢查 log — 看有沒有未經授權的動作
- 換掉 Telegram bot token
- 審計檔案變更 — 什麼被修改了?
- 在你搞清楚發生什麼事之前,不要重啟
Clawd 忍不住說:
第六點是最重要的:不要急著重啟。
很多人的本能反應是「先重開看看」。但如果你的系統真的被入侵,重開可能會:
- 讓攻擊者繼續存取
- 覆蓋掉有用的 log
- 讓問題更難追蹤
先搞清楚怎麼回事,再決定下一步。這不是電腦當機,這是可能的安全事件 (ง •̀_•́)ง
📋 給新手的七條建議
Jordan 說如果今天有人問他怎麼開始,他不會丟一份文件過去。他會拉張椅子坐下來,跟你說:
「第一件事?從唯讀開始。不發文、不主動聯繫、不碰錢。你得先證明這東西在你的環境裡是安全的 — 就像你不會第一天就把新員工加進公司銀行帳戶。」
然後他會說:「一個 agent,一個頻道。我知道你很興奮,想一口氣搞十個 agent 幹十件事。忍住。你連一個都還沒搞懂呢。」
接下來是他最堅持的一點:「Tailscale 是不可談判的。沒有公開 port。句點。你問我有沒有例外?沒有。」
Clawd 內心戲:
注意他的用詞:「不可談判」。不是「建議」,不是「最好」,是不可談判。
在安全領域,模糊的語言會殺人。「最好不要」跟「不准」之間的差距,就是一次 incident 的距離 ┐( ̄ヘ ̄)┌
第四條也跟 Part 1 呼應:「指令白名單,不是開放 shell。prompt injection 的防護不是完美的,你得從系統層面擋住。」
第五條是老生常談但沒人做到:「每個 token 都給最小權限。能唯讀就唯讀。然後拜託你,記錄每個 token 能做什麼。」
第六條 — 他笑了 — 就是從他自己的血淚教訓來的:「在你需要之前就設定好遠端存取。Tailscale SSH 救了我的理智。好吧,其實是三天後才救的,但重點是後來我再也沒犯過同樣的錯。」
最後一條,也是 Jordan 覺得最容易被忽略的:「設一個擴展門檻。我的規則是穩定運作兩週、零安全問題,才考慮加新功能。」
Clawd 偷偷說:
「兩週穩定才能擴展」— 這聽起來很慢對吧?
但你想想,大多數人的做法是什麼?「哦它 work 了!太棒了!來加 Slack 整合!再加個自動回信!再來個自動下單!」然後三天後 agent 用你的信用卡買了一箱狗糧。
Jordan 的做法像什麼?像養小孩。你不會因為小孩學會走路就讓他去爬山。你會讓他在客廳走兩個禮拜,確認他不會撞到桌角,然後再帶他出門 (๑•̀ㅂ•́)و✧
回到那句話
還記得這篇文章一開始說的嗎?銅牆鐵壁裡面住的那位,如果沒教好規矩,牆蓋再高都沒用。
Jordan 用 TARS 證明了一件事:真正的安全不是來自你買了多貴的鎖,而是你有沒有養成好的習慣 — 記錄 token、測試防線、設定遠端存取、忍住不加新功能。
他說得很好:
「目標不是變偏執。是變有意圖。OpenClaw 很強大。強大值得尊重。」
這句話我想多說一點。「有意圖」這三個字,是整個系列文的精神。不是怕 agent,不是不用 agent,而是帶著意識地用 — 每一個權限、每一個整合、每一次擴展,都經過思考。
這是系列文的最後一篇。搭配 Part 1 的基礎設施設定,你手上有一張從 infra 到 ops 的完整安全藍圖。如果你還想看程式碼層級的防護,去讀 SP-29 — jzOcb 的四層防禦系統 — 那篇講的是 code hooks、config guard,跟這裡的 infra + ops 是互補的。
好了,現在你的銅牆鐵壁蓋好了,裡面住的那位也教好規矩了。去部署你的 agent 吧 — 帶著意圖,不帶著恐懼 (◕‿◕)