如果您使用 Magic Transit 和任播 IPsec 隧道,我们建议禁用防重放(anti-replay)保护。Cloudflare 默认禁用此设置。然而,对于不支持禁用该功能的设备(包括 Cisco Meraki、Velocloud 和 AWS VPN Gateway),您可以通过 API 或 Cloudflare 仪表板启用它。
有关如何设置重放保护的说明,请参阅 添加隧道。本页面解释了重放攻击、Cloudflare 为什么建议禁用 IPsec 防重放,以及相关注意事项。
重放攻击发生在恶意行为者拦截并记录数据包,随后出于对其有利的意图将记录的数据包再次发送给目标网络时。
假设有一个设计不良的物联网 (IoT) 车库门开启器。该设备的操作协议非常简单:用户数据报协议 (UDP) 数据包的数据段中包含车库门密码以及 open(开启)或 shut(关闭)。车库门的密钥对数据段进行加密,业主的手机发送该数据包来打开或关闭车库门。
攻击者可能无法通过猜测加密密钥和密码来打开或关闭车库门。虽然攻击者看不到记录的数据包的加密内容,但如果车库在他们的视线范围内,他们可能会通过关联并猜测哪些数据包负责打开车库门。当攻击者想要开门时,他们会发送记录的 open 数据包,由于记录的数据包包含密码且已经使用正确的密钥加密,车库门就会打开。
为了防止这种重放攻击,用户可以在发送给车库门的每个命令中添加一个数据包编号。第一个可以是 packet 1,第二个是 packet 2 等等,车库门每次只接受包含序列中下一个编号的数据包。例如,在车库门收到 packet 1 之后,它只接受 packet 2,如果攻击者试图重放 packet 1,车库门会忽略该请求。
IPsec 防重放保护的工作原理与上述场景中的预防示例类似。发送方为每个 IPsec 数据包分配一个序列号。接收方跟踪其已经看到的序列号,并且只接受接收方已见最大值附近的一个小窗口内的数据包,该窗口通常为 64-1024 个数据包。IPsec 使用窗口而不是严格的排序,因为有时数据包在互联网上会被重新排序或丢失 —— 拥有一个可接受的数据包序列号范围有助于缓解这些问题。
标准的 IPsec 防重放保护假定只有一个发送方和一个接收方。发送方将序列号存储在内存中,并针对每个数据包递增该序列号。接收方跟踪它已经处理了哪些序列号。
Cloudflare 的任播(anycast)架构不符合这种模型。因为 Magic Transit 使用任播(anycast),所以任何数据包都可以由数百个数据中心的数千台服务器中的任何一台处理。这种分布式处理为 Magic Transit 带来了性能和弹性优势 —— 但这也意味着没有单个服务器拥有序列号状态的完整视图。
如果为 Magic Transit IPsec 隧道启用重放保护,Cloudflare 会将单个隧道的物理数据包路由到一台负责跟踪序列号的服务器上。在此模式下,防重放机制可以正常工作,但您会失去将流量分布在 Cloudflare 全球服务器上的好处。此外,这仅适用于一个方向(Cloudflare 到客户网络)—— Cloudflare 不会将来自客户网络的数据包路由到单台服务器,并且不在该方向上应用重放保护。
IPsec 防重放保护对于传输模式(主机到主机甚至应用到应用的 IPsec)极为重要。在传输模式下,如果协议容易受到重放攻击,攻击者可以相对轻松地识别出加密协议并确定要重放哪些数据包。然而,Magic Transit 使用的是隧道模式,这在本质上要成功进行重放攻击要困难得多。
在隧道模式下,有几个原因使重放攻击难以得逞:
- IPsec 加密了整个内部数据包,这意味着对于其捕获的用户数据包,攻击者几乎一无所知,无法进行关联以发起重放攻击。攻击者唯一能获得的信息是加密数据包的外部站点网络、接收数据包的外部站点网络以及数据包的近似大小。然而,这些信息不足以识别特定的内部用户数据包流以进行关联和重放。
- 重放攻击仅在攻击者使用相同的加密密钥时起作用。在重新生成密钥(rekeying)之后,路由器将丢弃旧的重放数据包。
- 大多数协议在数据包级别不易受到重放攻击的影响。互联网可能会复制数据包,这意味着 TCP 和许多基于 UDP 构建的协议已经包含了序列号或类似机制,以处理从线路上接收到的重复数据包。对于这些协议,重放流量看起来只是一个重复的数据包,并能由终端主机正确处理。
- 在更高的开放系统互连 (OSI) 模型层上提供了防重放保护。许多现代应用程序使用安全通信协议,例如安全套接字层/传输层安全性 (SSL/TLS)、安全外壳 (SSH) 或 SSH 文件传输协议 (SFTP) 来传输应用程序数据。这些安全通信协议(在比网络层更高的 OSI 层上)原生支持防重放保护。
- 减少的攻击面降低了数据包被拦截的概率。IPsec 隧道是用户站点路由器与 Cloudflare 全球网络之间的站点到站点 VPN 隧道,通过专用的互联网服务提供商 (ISP) 网络连接,这些连接通常非常安全。此外,Cloudflare 的 IPsec 实现具有任播特性,可将 IPsec 隧道终止于最靠近客户边缘路由器的 300 多个 Cloudflare 数据中心之一,从而将加密数据包必须传输的物理距离和范围降至最低。
如果您遇到与防重放保护相关的隧道不稳定或数据包丢失问题,请参阅排除隧道健康故障。