OpenFang 安全最佳實踐:16 層安全防護詳解
Slug: openfang-security-best-practices
分類: usage-guides (使用指南)
目標關鍵字: OpenFang 安全, OpenFang 安全配置, Agent 安全最佳實踐
搜尋意圖: 資訊型(使用者想安全部署 OpenFang)
目標字數: ~2000 字
語言: tw
為什麼 Agent 安全至關重要?
自主 AI Agent 擁有執行指令、存取網路、讀寫檔案的能力——這些能力如果不加限制,就是安全災難的配方。一個沒有安全防護的 Agent 可能被 Prompt Injection 攻擊誘導執行危險指令、洩漏敏感資料,或被濫用為攻擊跳板。
OpenFang 從設計之初就將安全作為核心架構的一部分,提供了 16 層安全防護機制。本文將從淺入深地介紹每一層的配置方法和最佳實踐。
安全架構概覽
OpenFang 的 16 層安全防護分為四個大類:
| 類別 | 層級 | 防護目標 |
|---|---|---|
| 沙箱隔離 | 1–4 層 | 限制 Agent 的執行環境 |
| 網路安全 | 5–8 層 | 控制 Agent 的網路存取 |
| 資料安全 | 9–12 層 | 保護敏感資料不被洩漏 |
| 審計與合規 | 13–16 層 | 記錄和審計 Agent 行為 |
第一類:沙箱隔離
第 1 層:檔案系統沙箱
限制 Agent 可存取的檔案系統路徑:
[security.sandbox.filesystem]mode = "strict" # off / basic / strictallowed_paths = [ "./workspace/", "/tmp/openfang/",]denied_paths = [ "/etc/", "~/.ssh/", "~/.aws/",]read_only_paths = [ "./config/", "/usr/share/openfang/",]strict 模式下,Agent 無法存取任何 allowed_paths 未列出的路徑。建議始終為 Agent 建立專用的工作目錄。
第 2 層:行程沙箱
限制 Agent 可以執行的系統指令:
[security.sandbox.process]allow_shell = false # 禁止直接 Shell 存取allowed_commands = [ "git", "curl", "python3", "node",]denied_commands = [ "rm", "sudo", "chmod", "wget",]command_timeout = 30 # 指令最長執行時間(秒)allow_shell = false 是生產環境必須開啟的配置。Agent 只能透過 allowed_commands 清單中的指令與系統互動。
第 3 層:記憶體限制
防止 Agent 因記憶體洩漏或惡意程式碼耗盡系統資源:
[security.sandbox.memory]max_memory_mb = 512 # Agent 記憶體上限max_per_hand_mb = 128 # 每個 Hand 的記憶體上限oom_policy = "kill_hand" # kill_hand / restart / notify第 4 層:CPU 限制
[security.sandbox.cpu]max_cores = 2 # 最多使用 2 個 CPU 核心priority = "low" # low / normal / highcfs_period_us = 100000cfs_quota_us = 50000 # 50% CPU 配額第二類:網路安全
第 5 層:網路隔離
控制 Agent 的出站網路存取:
[security.network]mode = "allowlist" # allowlist / blocklist / unrestrictedallowed_domains = [ "api.anthropic.com", "api.openai.com", "github.com",]allowed_ports = [443, 80]block_ip_ranges = [ "10.0.0.0/8", # 阻止存取內網 "172.16.0.0/12", "192.168.0.0/16",]dns_over_https = true # 使用加密 DNS第 6 層:流量加密
[security.network.tls]min_version = "1.2"verify_certificates = truecertificate_pinning = [ { domain = "api.anthropic.com", pin = "sha256/..." },]第 7 層:速率限制
防止 Agent 被濫用發送大量請求:
[security.network.rate_limit]requests_per_minute = 60tokens_per_minute = 100000burst_multiplier = 2cooldown_after_exceeded = "5m"第 8 層:代理與出口控制
所有 Agent 流量透過企業代理出口:
[security.network.proxy]http_proxy = "${HTTP_PROXY}"https_proxy = "${HTTPS_PROXY}"no_proxy = ["localhost", "127.0.0.1"]enforce_proxy = true # 強制所有流量經過代理第三類:資料安全
第 9 層:輸入清理
防禦 Prompt Injection 攻擊:
[security.data.input_guard]enabled = truemode = "strict"[security.data.input_guard.rules]detect_jailbreak = truedetect_prompt_leak = truedetect_code_injection = truemax_input_length = 8000sanitize_markdown = true輸入清理器會在 Agent 處理使用者輸入之前掃描潛在的注入攻擊,包括越獄提示詞、提示詞洩漏嘗試和程式碼注入。
第 10 層:輸出過濾
防止敏感資料透過 Agent 回覆洩漏:
[security.data.output_guard]enabled = true[security.data.output_guard.patterns]credit_cards = trueapi_keys = true # 偵測並遮蔽 API key 格式emails = "mask" # mask / block / allowphone_numbers = "mask"custom_patterns = [ "\\b(?:sk|pk)_[a-zA-Z0-9]{32,}\\b", "\\bAKIA[A-Z0-9]{16}\\b", # AWS Access Key]第 11 層:敏感資料加密
[security.data.encryption]encrypt_workspace = trueencrypt_logs = truekey_derivation = "argon2id"rotation_days = 30第 12 層:資料最小化
[security.data.minimization]log_user_inputs = false # 不記錄使用者輸入log_agent_outputs = false # 不記錄 Agent 輸出retention_days = 7 # 日誌保留 7 天strip_pii = true # 自動移除 PII第四類:審計與合規
第 13 層:操作審計
[security.audit]enabled = truelog_level = "info"[security.audit.events]command_execution = truefile_access = truenetwork_request = trueconfig_change = truehand_start_stop = true審計日誌為 JSON 格式,包含時間戳記、操作類型、操作者、操作詳情和結果:
{ "timestamp": "2026-07-10T08:30:15.123Z", "event": "command_execution", "hand": "researcher", "command": "git clone https://github.com/...", "sandbox": "strict", "result": "allowed", "duration_ms": 1240}第 14 層:異常偵測
[security.audit.anomaly_detection]enabled = truebaseline_days = 7sensitivity = "medium" # low / medium / highalert_on = ["unusual_command", "off_hours_activity", "unusual_destination"]第 15 層:合規報告
[security.compliance]generate_reports = trueschedule = "0 0 1 * *" # 每月生成frameworks = ["SOC2", "ISO27001"]export_format = "pdf"第 16 層:安全事件回應
[security.incident_response]auto_contain = true # 偵測到異常自動隔離 Agentcontainment_action = "pause_all_hands"notify_channels = ["slack:#security", "email:[email protected]"]forensic_snapshot = true # 觸發時儲存現場快照快速安全配置模板
根據你的部署場景,選擇對應的預設安全配置:
開發環境(低安全要求)
openfang security preset development生產環境(標準安全要求)
openfang security preset production高安全環境(金融/醫療/政府)
openfang security preset hardened三種預設的關鍵差異:
| 配置項 | Development | Production | Hardened |
|---|---|---|---|
| 檔案系統 | basic | strict | strict |
| Shell 存取 | 允許 | 禁止 | 禁止 |
| 網路模式 | blocklist | allowlist | allowlist |
| 輸出過濾 | 關閉 | 開啟 | 開啟 |
| 審計日誌 | 關閉 | 開啟 | 開啟 |
| 資料加密 | 關閉 | 開啟 | 開啟 |
| 異常偵測 | 關閉 | medium | high |
| 自動隔離 | 關閉 | 關閉 | 開啟 |
安全檢查清單
部署到生產環境前,使用 openfang security audit 指令逐項驗證:
openfang security audit# 輸出範例:# ✅ [1/16] Filesystem sandbox: strict# ✅ [2/16] Process sandbox: no shell access# ✅ [3/16] Memory limit: 512 MB# ✅ [4/16] CPU limit: 2 cores# ✅ [5/16] Network: allowlist mode# ⚠️ [6/16] TLS cert pinning: not configured# ✅ [7/16] Rate limiting: enabled# ...# Score: 14/16 — 2 recommendations pending常見問題
安全配置太嚴格導致 Agent 無法正常工作怎麼辦?
hardened 預設開始,觀察 Agent 的行為。對於被阻止的必要操作,使用審計日誌定位具體被攔截的項目,然後針對性地新增到允許清單。Prompt Injection 真的能防禦嗎?
如何在容器化環境(Docker/K8s)中疊加安全層?
安全事件發生了怎麼辦?
2. 如果配置了
auto_contain = true,Agent 已自動隔離3. 下載取證快照:
openfang security forensics download --run-id xxx4. 分析根因,修補漏洞
5. 從快照恢復或重新初始化 Agent
下一步
- OpenFang 安裝與初始化指南:從零開始安全部署
- OpenFang 自動化工作流程建置指南:建構安全的自動化流程