跳至内容

安全

节点间通信

在多节点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。这意味着除非采取额外保护措施,否则任何能通过网络接口访问您机器的其他主机都可能访问这些服务。

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

防火墙配置指南

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

  • 阻止所有传入连接,仅允许访问API服务器监听的TCP端口。

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

  • 切勿将这些内部端口暴露在公共互联网或不可信网络中。

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

报告安全漏洞

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

优云智算