跳到内容

安全

节点间通信

多节点 vLLM 部署中,节点之间的所有通信默认为不安全,必须通过将节点放置在隔离网络上来进行保护。这包括

  1. PyTorch Distributed 通信
  2. KV 缓存传输通信
  3. 张量并行、流水线并行和数据并行通信

节点间通信配置选项

以下选项控制 vLLM 中的节点间通信

  1. 环境变量
  2. VLLM_HOST_IP:设置 vLLM 进程用于通信的 IP 地址

  3. KV 缓存传输配置

  4. --kv-ip:KV 缓存传输通信的 IP 地址(默认值:127.0.0.1)
  5. --kv-port:KV 缓存传输通信的端口(默认值:14579)

  6. 数据并行配置

  7. data_parallel_master_ip:数据并行主节点的 IP(默认值:127.0.0.1)
  8. data_parallel_master_port:数据并行主节点的端口(默认值:29500)

PyTorch Distributed 注意事项

vLLM 使用 PyTorch 的分布式特性进行部分节点间通信。有关 PyTorch Distributed 安全方面的详细信息,请参阅PyTorch 安全指南

PyTorch 安全指南要点:- PyTorch Distributed 特性仅用于内部通信 - 它们并非为在不受信任的环境或网络中使用而构建 - 出于性能原因,未包含授权协议 - 消息未加密发送 - 连接接受自任何地方,没有进行检查

安全建议

  1. 网络隔离
  2. 将 vLLM 节点部署在专用、隔离的网络上
  3. 使用网络分段来防止未经授权的访问
  4. 实施适当的防火墙规则

  5. 配置最佳实践

  6. 始终将 VLLM_HOST_IP 设置为特定的 IP 地址,而不是使用默认值
  7. 配置防火墙,仅允许节点之间必要的端口通信

  8. 访问控制

  9. 限制对部署环境的物理和网络访问
  10. 为管理界面实施适当的身份验证和授权
  11. 遵循所有系统组件的最小权限原则

安全与防火墙:保护暴露的 vLLM 系统

虽然 vLLM 的设计旨在将不安全的网络服务隔离到私有网络,但仍有一些组件(例如依赖项和底层框架)可能会在所有网络接口上开放不安全的监听服务,有时这超出了 vLLM 的直接控制范围。

一个主要问题是使用 torch.distributed,vLLM 利用它进行分布式通信,包括在单主机上使用 vLLM 时。当 vLLM 使用 TCP 初始化(参见PyTorch TCP 初始化文档)时,PyTorch 会创建一个 TCPStore,该 TCPStore 默认在所有网络接口上监听。这意味着除非采取额外的保护措施,否则这些服务可能对通过任何网络接口可以访问您的机器的任何主机都是可访问的。

从 PyTorch 的角度来看,任何使用 torch.distributed 的情况都应被视为默认不安全。 这是 PyTorch 团队已知且故意的行为。

防火墙配置指南

保护 vLLM 系统的最佳方法是仔细配置防火墙,仅暴露必要的最小网络表面。在大多数情况下,这意味着

  • 阻止除 API 服务器监听的 TCP 端口之外的所有传入连接。

  • 确保用于内部通信的端口(例如 torch.distributed 和 KV 缓存传输使用的端口)只能从受信任的主机或网络访问。

  • 切勿将这些内部端口暴露给公共互联网或不受信任的网络。

请查阅您的操作系统或应用平台文档以获取具体的防火墙配置说明。

报告安全漏洞

如果您认为在 vLLM 中发现了安全漏洞,请按照项目的安全策略进行报告。有关如何报告安全问题以及项目安全策略的更多信息,请参阅vLLM 安全策略