# 安全強化

強化 Netstamp 部署、保護密鑰與探測器、減少公開資料，並在憑證外洩時正確應變。

Netstamp 會處理監控目標、網路位置、使用者身分、探測器憑證、通知密鑰與長期時間序列資料，應將控制器視為正式環境基礎設施。

## 部署邊界

- 只對外公開 HTTPS 反向代理。
- 將 PostgreSQL 留在私有 Docker 網路或主機網路。
- 依部署環境使用防火牆與身分政策限制控制器存取。
- 設定精確的 trusted proxy CIDR。
- 持續更新主機、Docker、反向代理、資料庫映像檔及 Netstamp 映像檔。
- 監控健康狀態與資源耗盡問題。

## 密鑰清單

下列資料都必須妥善保護及備份：

- 資料庫密碼；
- 日誌去識別化金鑰；
- 系統設定加密金鑰；
- 工作階段雜湊金鑰；
- API 權杖雜湊金鑰；
- OAuth/OIDC 用戶端密鑰；
- SMTP 密碼；
- 探測器密鑰；
- 個人 API 權杖；
- Webhook URL 與 Telegram bot 權杖。

每項用途都使用獨立的隨機值。限制 `.env` 的檔案權限，且不要提交到 Git。也不要讓密鑰進入 shell 歷史紀錄或系統記錄。

## 身分驗證

- 從可信任的網路建立第一位系統管理員。
- 新增第二位系統管理員，以便復原。
- 不需要公開註冊時就將它關閉。
- 確認 SMTP 穩定後，才要求驗證電子郵件。
- 除非身分提供者中的所有身分都是刻意信任的對象，否則保持外部身分提供者的 JIT 帳號建立功能關閉。
- 定期檢查使用中的工作階段與已連結的外部身分。
- 為 API 權杖設定合理的到期時間與最小權限範圍。

## 探測器信任

每部探測器都有自己的唯一憑證，不要將 `/etc/netstamp/probe.env` 複製給另一部探測器。主機重建、移交、疑似外洩或憑證意外寫入記錄後，都應輪替密鑰；暫時不應接收工作時，請停用探測器。

systemd 服務單元會限制權限，但 ICMP 仍需要原始網路存取能力。只有系統管理員能寫入代理程式執行檔及 root 擁有的設定檔。

## HTTP 檢查中的秘密值

HTTP 標頭、內容、查詢參數值與回應內容判定條件都可能包含憑證或敏感資料。請使用專門建立、權限最小化的權杖，不要用正式使用者憑證監控端點。能管理檢查的編輯者可能接觸敏感設定，因此也要審慎控管編輯者權限。

## 公開狀態頁隱私

狀態頁不需要登入即可存取。公開前請檢查目標、探測器名稱、座標、事件摘要、橫幅圖片 URL、頁尾文字與自訂 CSS；不需要精確座標時，優先使用較粗略的地點名稱。

## 外洩後的處理

| 外洩資料              | 立即處理方式                                         |
| --------------------- | ---------------------------------------------------- |
| 工作階段              | 撤銷該工作階段或所有工作階段                         |
| API 權杖              | 建立替代權杖、更新使用端，再撤銷舊權杖               |
| 探測器密鑰            | 在探測器詳細資料輪替密鑰，並重新安裝服務憑證         |
| OAuth/OIDC 密鑰       | 在身分提供者端輪替，再更新控制器設定                 |
| Webhook/bot/SMTP 憑證 | 在目的地輪替，並更新儲存的通知或系統設定             |
| 資料庫密碼            | 限制存取，並同步輪替資料庫與控制器的設定             |
| 雜湊／加密金鑰        | 輪替前評估憑證失效與資料復原影響，再透過受控程序進行 |

## 回報安全漏洞

不要在公開 issue 張貼漏洞利用細節、密鑰或個人資料。請遵循程式碼儲存庫的[安全政策](https://github.com/yorukot/netstamp/blob/main/SECURITY.md)，並在功能可用時透過 GitHub 私人漏洞回報功能通報。
