跳到内容

安全性

节点间通信

多节点 vLLM 部署中节点之间的所有通信默认情况下都是不安全的,必须通过将节点置于隔离网络中来保护。这包括

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

节点间通信的配置选项

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

1. 环境变量:

  • VLLM_HOST_IP:设置 vLLM 进程进行通信的 IP 地址

2. KV 缓存传输配置:

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

3. 数据并行配置:

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

关于 PyTorch 分布式的注意事项

vLLM 使用 PyTorch 的分布式功能进行部分节点间通信。有关 PyTorch 分布式安全考虑的详细信息,请参阅 PyTorch 安全指南

PyTorch 安全指南中的要点

  • PyTorch 分布式功能仅用于内部通信
  • 它们不适用于不受信任的环境或网络
  • 出于性能考虑,未包含授权协议
  • 消息以未加密方式发送
  • 连接从任何地方接受,未经检查

安全建议

1. 网络隔离:

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

2. 配置最佳实践:

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

3. 访问控制:

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

安全性与防火墙:保护暴露的 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 安全政策