Agent 與 SSH 登入記錄
Zenavo agent
初始化會在每台伺服器上安裝 Zenavo agent,執行在它自己的 zenavo-system 名稱空間中。Agent 透過 HTTPS 主動向外連線控制面,把控制面的 Kubernetes 請求轉交給本機叢集:部署、日誌、終端機、檔案和狀態檢查。因為連線是從伺服器向外發起的,所以不需要為 Zenavo 開放任何連接埠,Zenavo 也不儲存叢集的任何憑據。Agent 能做什麼、不能做什麼,見防火牆與安全。
伺服器的 伺服器資訊 分頁顯示 agent 是否已連線,連線線路 顯示它是直接連線控制面,還是經過 Zenavo 的某個中繼。agent 停止回應幾分鐘後,伺服器會顯示 離線;上面的專案會繼續執行(管理伺服器)。
更新 agent
設定 中顯示 agent 的版本。有新版本時,團隊管理員點選 更新 agent。Agent 會把自己更新到 Zenavo 的 agent 映像檔(固定到 digest),不需要 SSH 或重新初始化。新的 agent 連線上之前,當前的 agent 會繼續執行,所以不會有任何中斷。如果更新沒有完成,設定中會提示,並連結到任務日誌。
伺服器處於執行狀態、並且上面沒有其他任務在執行時,才能開始更新。
在 agent 之前新增的伺服器
在 agent 出現之前新增的伺服器會自動遷移到 agent。設定 → 連線方式 顯示遷移狀態,也可以立即開始遷移(在 agent 之前新增的伺服器)。需要 agent 的功能(例如 SSH 登入記錄)會在遷移後開始工作。
SSH 登入記錄
伺服器的 SSH 分頁列出誰透過 SSH 登入過這台伺服器,團隊成員及以上可以檢視:
- 來源 IP:每個登入過的位址,以及它的國家和城市、使用的使用者和方式(密碼或金鑰)、成功登入次數和失敗嘗試次數,以及首次和最近一次出現的時間。在所選時間段內新出現的位址會標記為 新。
- 時間範圍:最近 24 小時、7 天、30 天或 90 天。
- 包含失敗的登入嘗試:預設關閉,列表只顯示登入成功過的位址。開啟後還會顯示只有失敗嘗試的位址,這些大多是全網範圍的密碼掃描。
當某個位址第一次成功登入團隊的伺服器時,Zenavo 會發郵件通知團隊:即 新的 SSH 登入來源 通知。如果你剛從新的網路連線過,這是正常的;否則是一個警告訊號。Zenavo 第一次看到時已經超過一天的登入(例如控制面曾經中斷),不會傳送告警。
收集方式
Agent 不以 root 執行,無法讀取伺服器的日誌,所以初始化會安裝一個可以讀取日誌的小型收集器。一個 systemd 定時器每五分鐘以 root 身份執行它。它唯讀取 journal 中新增的 sshd 記錄,按來源 IP、使用者和方式儲存最近七天的每小時彙總,放在一個只有 agent 所在使用者組可以讀取的目錄中。Agent 永遠看不到原始日誌,收集器本身沒有網路存取,也不傳送任何內容。
控制面每隔幾分鐘透過 agent 複製這些彙總,並保留 90 天。位址的位置用離線的城市資料庫查詢,從不傳送給其他服務。一次連線只計一次:被接受就算一次登入,否則算一次失敗嘗試。不是普通名稱的使用者名稱記為 ?。
如果分頁提示還沒有上報,說明這台伺服器是在登入記錄功能推出之前初始化的:設定 → 執行初始化 會安裝收集器。沒有透過 agent 存取的伺服器,在遷移到 agent 之前不會顯示記錄。
API
| 方法 | 路徑 | |
|---|---|---|
GET | /api/servers/{sid}/ssh-logins?hours=&failed= | 登入記錄(成員):hours 為 24、168、720 或 2160(預設 168);failed=1 時還會列出只有失敗嘗試的位址。返回收集器的狀態(active、waiting 或 unsupported)、彙總以及每個來源 IP 一行 |
POST | /api/servers/{sid}/agent/update | 把 agent 更新到當前映像檔(管理員;返回一個任務) |
POST | /api/servers/{sid}/agent | 立即把在 agent 之前新增的伺服器遷移到 agent(管理員;返回 202 和伺服器,遷移以任務的形式執行) |