iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0

https://ithelp.ithome.com.tw/upload/images/20260815/20181284HwAFR43r6J.png

我們已經成功連線 hq.iron30.com 網站,憑證也是綠的。接下來,我們來建置這個網站。

先問自己:
我想從這個控制中心,看到甚麼?

因為對外開放了,所以要有帳號,密碼登入的保護。

  1. 有那些機器在跑,跑甚麼?目前狀況? 是不是有機器停了,出問題了?
  2. 每台機器的細節,從控制中心,是否就可以指揮遠端的機器?
  3. 版面配色,是不是可以隨我喜好改變?
  4. 有個日誌,紀錄相關的事件。

首先,從這裡開始,做一個策略調整:
Fable 設計整個工作的框架,任務, sonnet 執行,Fable 負責:驗證,稽核。這樣可以省 token。

ssh 連到 hq,切換到 /opt/claude-working,執行 claude code:
告訴 claude code :

hq 網站,要增加下面的東西:

一、增加登入管理,
    - 帳號密碼登入,密碼存雜湊,不要存明碼。
    - 預設帳號 admin,密碼 admin。測試用,我上線前會換掉。
    - 同一個來源連續, x 分鐘內登入失敗 y 次,就擋 z 分鐘。
      擋來源不要鎖帳號 —— 鎖帳號會變成別人可以把我關在外面的開關。
    - 擋之前先確認你拿到的是「真的來源」:這台在反向代理後面,
      沒處理的話每個請求看起來都來自代理那一台,
      代理要把原始來源傳過來,而且只認代理傳的那一個,
      不要相信請求自己帶進來的 —— 那個誰都能偽造。
    - 沒登入的請求一律導回登入頁,直接打網址進來的也一樣。

二、建立四個頁面:
    1. 儀表板:機器一台一列,名字、位址、角色、cpu、記憶體,硬碟使用量,現在活著沒有,
       後面一定要有「最後一次檢查是什麼時候」。整頁自己會更新,不用我按。
    2. 遠端:左側主機列表,標明是否上限及 ip,點選主機,右側會顯示:主機詳情,可以查看系統負載,查看系統服務,可以送一個指令過去,把輸出印回來。
    3. 日誌:系統裡發生過的事,可以照時間和等級篩。
    4. 管理:
    	1.使用者的新增、修改、刪除,
    	2. 機器清單的維護。
    	3. 設定封鎖的 x  y  z 值。
   
三、日誌要記的每一筆都要有:時間、等級、做了什麼、誰做的、
    對哪一台、以及細節。遠端執行那一筆,把指令原文也記進去。
    會改變系統狀態的動作一件都不要漏。

四、機器清單就接 machines.md 那份,不要另外開一份新的來源。

規則:
- 整件事你做完,不要把步驟列給我叫我自己去點。
- 每個頁面做完自己開來看一次,不要用「應該可以了」回報我。
- 密碼和金鑰不寫進程式碼,也不進版控。
- 用fable 規劃工作項,交付給 sonnet 執行,opus 負責驗證,稽核。

登入這件事,一般最常見的處理方式是「先把功能做出來,之後再補」。但是,對一個已經對外開放的網址來說,沒有「之後」這個東西。網路爬蟲不會等你補完,它們在憑證簽發的當天就會找上來 —— 新網域被記錄在憑證透明度紀錄裡面,那份紀錄是公開的,每一個新申請的憑證都等於對外廣播「這裡有一個新的網站」。所以順序應該是登入先做,功能後補。

測試階段用一組好記的帳號密碼沒問題,反正上線前會換掉。真正要注意的是那組預設密碼寫在哪裡:寫死在程式碼裡是最糟的選項,因為它會跟著版控散出去,而且散出去之後你不會知道它到過哪些地方。比較好的做法是第一次啟動的時候隨機產生一組,印在啟動訊息裡讓你抄走,或是從一個不進版控的檔案讀進來。自己的系統被自己的預設密碼打開,是一件很難跟人解釋的事。

擋暴力猜密碼有兩種做法,方法選錯會反過來咬你。鎖帳號聽起來很直覺:同一個帳號連續錯幾次就把它停掉。問題是別人只要一直用你的帳號去打錯的密碼,就能讓你自己登不進去 —— 那不再是防護,那是一個開給外面的開關。擋來源就沒有這個問題:錯太多次的是那個連線來源,不是那個帳號。被擋的人換一條線就能再試,但這樣的處理,會讓攻擊方被拖到不划算。

儀表板上每一台機器旁邊那顆燈,是整個控制中心最容易做錯的地方。綠色的意思應該是「剛剛才確認過它活著」,不是「上次確認的時候它活著」。如果背景那支檢查程式自己死了,燈會停在最後一次的狀態 —— 整片綠油油的,而底下的機器可能已經倒了半天。所以每一台後面都要有「最後一次檢查是什麼時候」,而且那個時間要看得見。一個永遠不會變紅的儀表板,跟沒有儀表板是一樣的,差別只在於前者會讓你睡得比較好。

這是儀錶板:

https://ithelp.ithome.com.tw/upload/images/20260816/20181284fvNqKar7GM.png

機器清單要接上一篇建好的那份文件,不要在資料庫裡另外開一份新的。如果是兩份清單,一開始都是對的,但你只會維護其中一份 —— 通常是你當下正在看的那一份。過三個星期,網頁上少了一台、文件裡多了一台已經砍掉的,而你分不出哪一份才是真的。同一件事實只能有一個地方寫。

四個頁面裡面,遠端那一頁的權限最大:它可以對任何一台機器送任何一個指令。這一頁的價值也最高 —— 沒有它,你還是得一台一台連進去。所以它不是「要不要做」的問題,是「做了之後怎麼看得住」的問題,唯一看得住它的東西是日誌。一個能執行任意指令、又沒有留下紀錄的介面,比沒有那個介面更糟。

這是遠端管理:
https://ithelp.ithome.com.tw/upload/images/20260815/20181284DKknD080Og.png

這是日誌,眼尖的可以看到:用 line, telegram 及 email 發通知。
https://ithelp.ithome.com.tw/upload/images/20260815/20181284WxcvAdwOkn.png

讓 claude 跑,好了之後,連到 hq.iron30.com,會出現登入要求。登入後,檢查一下頁面,看看有沒有不滿意,不對的地方,截圖給 claude code,叫他改。

四個頁面都出來了,我們來修整一下配色。

告訴 claude code:

提供六組配色:綠、藍、翡翠、銀、金黃、粉紅。可以在畫面上切換 light/dark。

三個要求:
1. 成功:綠、警告:黃、危險:紅這三個固定,不跟著主色變。
   綠色那組特別注意,不要讓人分不出「這是主色」還是「這是一切正常」。
2. 深色不是把淺色整組反轉:底不要用純黑,主色要提亮一點。
3. user 可以選擇主色切換及明暗。

顏色組合隨個人喜好,我還弄過仿 iphone 的水晶螢幕效果。愛怎麼完就怎麼玩。

https://ithelp.ithome.com.tw/upload/images/20260818/20181284Jvr7aqScWk.png

最後是驗收。
告訴 claude code:

一項一項驗,逐項回報結果,不要只回我「已完成」:

1. 開一個乾淨的瀏覽器,不登入直接打每一個頁面的網址,
   有沒有哪一頁看得到內容?
2. 用錯的密碼連續試幾次,會不會被擋?擋多久?
3. 在遠端那頁對一台機器執行一個指令,然後去日誌那頁看:
   有沒有記到是誰、在哪一台、執行了什麼?
4. 新增一個使用者、改密碼、再刪掉,三個動作在日誌裡都找得到嗎?
5. 六組配色各切一次淺色深色,有沒有哪一塊沒跟著換?
6. 從外面連 hq.iron30.com,看到的第一頁是登入,不是儀表板。

如果有錯誤,找到原因,修正,直到正確為止。

⛔ 第 1 項不要用你已經登入的那個瀏覽器測,你會得到一個假的通過。

檢查無誤後,過關。

好啦,我們的控制中心雛型完成。

明天換一台機器,把LLM模型裝進自己家裡。

後面補充:
有關: 同一個來源連續, x 分鐘內登入失敗 y 次,就擋 z 分鐘
查到:
有來自韓國的 IP ,每小時測試我的網站4次,連續130幾個小時。完美規避我的限制!
有相同設置的朋友,檢查一下,現在的攻擊者,也變聰明了。
我改成:每小時,錯誤超過3次。 看看接下來他會如何應對 ..... 

上一篇
Day 07 反向代理
下一篇
D09 本地端 LLM Service
系列文
一個人的 IT 部門:用 Claude Code 從裸機到一整座 AI 機房11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言