前言¶
DeepSeek Harness(DSH)的沙盒機制主要約束文件的讀寫,對網絡流量缺乏控制。在源碼中,web_fetch 被描述爲一個帶有未實現私有網絡保護的 SSRF(服務端請求僞造)原語。dsh-netguard 插件旨在補充這一空白,提供 DSH 本身無法實現的網絡控制能力。
安裝與配置¶
安裝前需確保 Harness 版本在 0.1.0-rc.6 至 0.1.1 之間(0.1.2-alpha.* 版本不兼容)。
- 使用以下命令安裝插件:
dsh plugin --profile <name> add @deepseek-ai/dsh-headless@0.1.0-rc.6
dsh plugin --profile <name> add dsh-netguard
dsh --profile <name> --dump-config # 檢查 dsh-netguard 行是否出現
- 安裝後必須在
cordis.patch.yml中配置組件。由於ctx.web沒有優先級或最後獲勝規則,必須顯式指定fetchProvider爲dsh-netguard。
# $DSH_HOME/profiles/<name>/cordis.patch.yml
- id: web
config:
fetchProvider: dsh-netguard
searchProvider: deepseek-official
- id: dsh-netguard
config:
mode: audit
allow: []
deny: []
spoolPath: /var/log/dsh/netguard.ocsf.jsonl
核心功能¶
該插件提供三方面的控制能力:
- 連接時主機檢查:對
web_fetch和web_search工具的目標主機進行白名單/黑名單檢查。 - 參數預檢:在
bash、pwsh或run_code命令運行前,檢查其參數中是否包含目標主機名。 - 審計與記錄:默認採用審計模式,每做出一個決策都會記錄一條 OCSF Network Activity (4001) 數據。
典型用法¶
默認模式爲 audit,此時被拒絕的請求會被記錄但仍然通過。要實際阻斷流量,需設置 mode: enforce。
以下配置允許訪問 GitHub 和特定 npm 源,拒絕訪問內部域名:
- id: dsh-netguard
config:
mode: enforce
allow: ['**.github.com', 'registry.npmjs.org:443']
deny: ['*.internal.example']
spoolPath: /var/log/dsh/netguard.ocsf.l
shell:
enabled: true
readTextHosts: false
安裝完成後,使用 CLI 查看日誌:
dsh-netguard report # 查看所有日誌
dsh-netguard report --since 24h # 查看最近24小時的日誌
dsh-netguard report --suggest # 根據已觀察的主機生成允許列表建議
適用場景與注意¶
適用場景:
* 防止模型通過 web_fetch 發起未授權的網絡請求。
* 阻止模型在 bash、pwsh 等命令中注入惡意 URL。
重要限制:
* 非防火牆:插件無法看到子進程啓動後發送的字節流(例如 curl "$(cat url.txt)"),因此無法檢測通過變量傳遞的 URL。
* 非邊界:插件在代理的 uid 下進程內運行,無法阻止通過模型通道本身的潛在數據泄露。
* 審計優先:必須顯式配置 mode: enforce 才能產生阻斷效果,否則僅起到監控作用。
結語¶
dsh-netguard 是 DeepSeek Harness 插件生態中用於增強網絡控制的關鍵組件。它通過主機白名單和命令參數檢查,填補了 DSH 在網絡層面的空白。安裝時請務必檢查源碼與許可證,並根據實際需求調整審計與強制模式。