前言¶
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 在网络层面的空白。安装时请务必检查源码与许可证,并根据实际需求调整审计与强制模式。