# MCP 隧道安全

MCP 隧道部署的加固指南、凭据轮换、泄露响应和拆除。

---

<Note>
  MCP 隧道是一项研究预览功能。[申请访问权限](https://claude.com/form/claude-managed-agents) 即可试用。
</Note>

隧道架构提供了强大的默认值（仅出站连接、端到端加密和 IP 验证），但部署的整体安全性也取决于您如何配置和运维。本页涵盖推荐的加固措施、泄露响应以及如何拆除隧道。

## 最佳实践

- **在每个 MCP 服务器上要求 OAuth。**按照 [MCP 授权规范](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization) 中的描述配置每个上游服务器要求 OAuth。OAuth 在隧道的传输身份验证之上提供纵深防御，并在数据层实现用户级授权。
- **为组织启用 SSO。**隧道、联邦规则和服务账户在 Claude 控制台中管理。SSO 对可以更改它们的管理员强制执行身份提供商的会话控制。
- **限制 `upstream.allowed_ips`。**使用覆盖 MCP 服务器的最小 CIDR 范围。这是代理的主要 SSRF 防御。
- **监控日志。**对隧道技术栈的警告、错误和异常流量模式发出警报。
- **轮换凭据。**按固定计划轮换服务器证书和隧道令牌，如果怀疑泄露则立即轮换。
- **保持镜像更新。**跟踪新的代理版本发布，并通过 SHA-256 摘要固定镜像。
- **限制网络访问范围。**代理和 cloudflared 应该只能访问 [网络要求](/docs/en/agents-and-tools/mcp-tunnels/overview#network-requirements) 中列出的目标。使用 NetworkPolicy（Kubernetes）或主机防火墙规则（Compose）。
- **限制 MCP 服务器范围。**每个服务器应仅公开其目的所需的工具和数据。
- **保护静态凭据。**将组织的密钥管理实践应用于私钥和隧道令牌。

## 响应疑似泄露

如果您认为隧道令牌、TLS 密钥或代理主机已被泄露：

<Steps>
  <Step title="停止部署">
    <Tabs>
      <Tab title="Helm">
        ```bash
        helm uninstall mcp-tunnel -n mcp-tunnel
        ```
      </Tab>
      <Tab title="Docker Compose">
        ```bash
        docker compose down --timeout 0
        ```
      </Tab>
    </Tabs>
  </Step>
  <Step title="分离隧道服务器">
    从使用它们的任何 Managed Agent 会话中移除隧道 MCP 服务器，并停止在 Messages API 请求的 `mcp_servers` 块中传递其 URL。
  </Step>
  <Step title="归档隧道">
    归档会使隧道令牌失效并分离域名。在控制台中，从 **MCP tunnels** 列表中 [归档隧道](/docs/en/agents-and-tools/mcp-tunnels/console#archive-a-tunnel)。要改为通过 API 归档，请参阅 [归档隧道](/docs/en/api/admin/mcp_tunnels/archive)。
  </Step>
  <Step title="联系 Anthropic">
    向 Anthropic 支持报告疑似泄露。
  </Step>
  <Step title="轮换下游凭据">
    重新配置新隧道，并轮换受影响 MCP 服务器签发的任何 OAuth 令牌。
  </Step>
  <Step title="在恢复服务前审查日志">
    在新隧道上线之前，检查代理、cloudflared 和 MCP 服务器日志中疑似泄露时间段的记录。
  </Step>
</Steps>

## 拆除隧道

按照以下步骤拆除隧道并移除所有存储的凭据。

<Steps>
  <Step title="停止部署">
    <Tabs>
      <Tab title="Helm">
        ```bash
        helm uninstall mcp-tunnel -n mcp-tunnel
        ```
      </Tab>
      <Tab title="Docker Compose">
        ```bash
        docker compose down
        ```
      </Tab>
    </Tabs>
  </Step>

  <Step title="归档隧道">
    在控制台中，从 **MCP tunnels** 列表中 [归档隧道](/docs/en/agents-and-tools/mcp-tunnels/console#archive-a-tunnel)。
  </Step>

  <Step title="移除存储的凭据">
    <Tabs>
      <Tab title="Helm">
        使用编程访问时，setup Job 创建了一个以发布名称命名的单个 Secret。不使用编程访问时，您自行创建了 `mcp-tunnel-token` 和 `mcp-tunnel-cert`。删除适用的 Secret：

        ```bash
        kubectl -n mcp-tunnel delete secret \
          mcp-tunnel mcp-tunnel-token mcp-tunnel-cert \
          --ignore-not-found
        ```
      </Tab>
      <Tab title="Docker Compose">
        
        ```bash nocheck
        sudo rm -rf data
        ```
      </Tab>
    </Tabs>
  </Step>
</Steps>
