dsh-netguard:DeepSeek Harness 的出口策略与主机白名单插件

前言

DeepSeek Harness(DSH)的沙盒机制主要约束文件的读写,对网络流量缺乏控制。在源码中,web_fetch 被描述为一个带有未实现私有网络保护的 SSRF(服务端请求伪造)原语。dsh-netguard 插件旨在补充这一空白,提供 DSH 本身无法实现的网络控制能力。

安装与配置

安装前需确保 Harness 版本在 0.1.0-rc.6 至 0.1.1 之间(0.1.2-alpha.* 版本不兼容)。

  1. 使用以下命令安装插件:
    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 行是否出现
  1. 安装后必须在 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

核心功能

该插件提供三方面的控制能力:

  1. 连接时主机检查:对 web_fetch 和 web_search 工具的目标主机进行白名单/黑名单检查。
  2. 参数预检:在 bash、pwsh 或 run_code 命令运行前,检查其参数中是否包含目标主机名。
  3. 审计与记录:默认采用审计模式,每做出一个决策都会记录一条 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 在网络层面的空白。安装时请务必检查源码与许可证,并根据实际需求调整审计与强制模式。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜