网络主机的一种越来越常见的配置是通过多个网络接口实现多宿主化。多宿主主机可同时连接多个网络,如 Intranet 或 Internet,从而提供增强的连接性。但是,由于它们既可连接到 Intranet,又可连接到
Internet,因此在多宿主主机上运行的服务容易受到攻击。为了帮助您阻止攻击并了解如何处理多宿主主机的 IP 通信,我将介绍多宿主主机的强弱主机模式,然后讲述 Windows® 如何支持这些模式。
RFC 1122 规范描述了不作为路由器使用且仅发送和接收单播 IP 通信的多宿主主机的两种模式。这两种模式,就是通常所说的强主机和弱主机,指定了发送或接收的单播通信是否必须与通信传输所经的网络接口相关联。这些模式确定主机如何发送和接收数据包,以及主机如何影响在其上运行的服务的易受攻击性。
虽然 RFC 1122 是为 IPv4 定义了这些模式,但这些模式同样适用于 IPv6。IPv6 的一个多宿主主机示例是一台同时使用 IPv4 和 IPv6 的计算机,该计算机具有一个连接 Intranet 的网络适配器和一个 IPv6 隧道接口。
弱主机模式
在弱主机模式下,IP 主机(IPv4 或 IPv6)可在未分配正处于发送状态的数据包的源 IP 地址的接口上发送数据包。这称为弱主机发送行为。IP 主机还可在未分配处于接收状态的数据包的目标 IP 地址的接口上接收数据包。这称为弱主机接收行为。
当您使用具有多个接口的多宿主 IP 主机时,在接口上启用弱主机接收行为有时可使主机容易受到多宿主攻击。例如,图 1 显示了同时连接 Internet 和 Intranet 的主机 A。主机 A 具有分配给其 Internet 接口的公共 IPv4 地址 131.107.89.211,以及分配给其 Intranet 接口的专用 IPv4 地址 192.168.17.48。
图 1 多宿主计算机示例
如果主机 A 在其 Internet 和 Intranet 接口都启用弱主机发送行为,则它可在其 Internet 接口上发送来自 131.107.89.211 和 192.168.17.48 的数据包,在其 Intranet 接口上发送来自 131.107.89.211 和 192.168.17.48 的数据包。
如果主机 A 启用弱主机接收行为,则它可接收以下类型的数据包(假设主机防火墙规则允许该传入通信):在其 Internet 接口上接收到 131.107.89.211 和 192.168.17.48 的数据包,在其 Intranet 接口上接收到 131.107.89.211 和 192.168.17.48 的数据包。
当您启用弱主机接收行为后,Internet 中的恶意用户可将数据包发送至主机 A 的 Internet 接口,攻击在主机 A 上运行的、仅对 Intranet 中的主机可用的服务。如果 Internet 基础结构支持将目标为 192.168.17.48 的数据包转发到主机 A 的 Internet 接口,就可能发生此类型的攻击。您可在主机 A 的 Internet 接口上设置适当的防火墙规则,防止此类型的攻击。但是,即使您这样做了,在主机 A 上运行的对 Intranet 客户端可用的服务仍存在风险。
强主机模式
在强主机模式下,发送和接收行为有所不同。使用强主机发送,主机仅可在分配了处于发送状态的数据包的源 IP 地址的接口上发送数据包。使用强主机接收,主机仅可在分配了处于接收状态的数据包的目标 IP 地址的接口上接收数据包。
如果图 1 中主机 A 在其 Internet 和 Intranet 接口都启用强主机发送行为,则它仅可在其 Internet 接口上发送来自 131.107.89.211 的数据包,在其 Intranet 接口上发送来自 192.168.17.48 的数据包。
如果启用强主机接收行为,则主机 A 仅可在其 Internet 接口上接收到 131.107.89.211 的数据包,在其 Intranet 接口上接收到 192.168.17.48 的数据包。
在图 1 中,主机 A 的强主机模式将所有地址为 192.168.17.48 的传入数据包放到 Internet 接口上,而无需您配置防火墙规则,有效地将主机 A 的 Intranet 接口和 Internet 接口隔开。
当您选择强主机模式时,请记住,它也许会影响为弱主机行为设计的某些连接类型。例如,某些负载平衡实现也许使用弱主机接收行为在任一接口接收数据包,然后将它们路由到适当的内部接口。对于使用弱主机发送来发送来自某接口(与某快速连接对应)上的任一源地址的通信的主机,也可能会有影响。
强主机发送和接收
现在,我们看一看当您允许每个接口启用或禁用强主机发送和接收时,在 IPv4 或 IPv6 的普通主机上,发送和接收过程是如何进行的。
对于发送中的数据包,IP 首先检查是否已经指定了源地址。如果未指定,IP 将在路由表中无约束查询该数据包的目标地址。在无约束查询中,路由表中的所有路由均在考虑之列。根据所选的目标路由,IP 确定下一跃点接口(该接口用于将数据包放置在链路层)和下一跃点地址。根据下一跃点接口,IP 根据需要使用在 RFC 3484 中定义的地址选择过程来确定最佳源地址。此时,IP 具备了发送数据包的所有条件:源地址和目标地址、下一跃点接口和下一跃点地址。
如果指定了源地址,那么源接口也就可知。因为源接口分配给了源地址。然后,IP 就可确定源接口上是否已启用强主机发送。
如果未启用,IP 将在路由表中对数据包的目标地址执行无约束查询。根据目标的最佳匹配路由,IP 确定下一跃点接口和下一跃点地址。IP 具有了源地址和目标地址、下一跃点接口和下一跃点地址。请注意:如果在源接口上禁用强主机发送行为,下一跃点接口也许与源接口不同。
如果源接口上启用了强主机发送,IP 将在路由表中对数据包的目标地址执行受约束的查询。在受约束的查询中,仅考虑带有源接口的下一跃点接口的路由。根据所选目标路由,IP 确定下一跃点地址。IP 具有了源地址和目标地址、下一跃点接口和下一跃点地址。请注意,如果在源接口上启用强主机发送行为,下一跃点接口将始终与源接口相同。图 2 显示发送主机进程的普通 IP。
图 2 发送主机进程的通用 IP (单击该图像获得较大视图)
指定源地址后,受约束的路由查询可在路由表中的与目标最相匹配的多个路由中选择指标较高的路由。例如,图 1 中的主机 A 具有两个默认路由,一个指向跃点为 10 的 Internet,另一个指向跃点为 20 的 Intranet。两个 LAN 接口上均启用了强主机行为。
如果主机 A 上的发送应用程序未指定源地址,则路由查询结果将是具有最低跃点数的默认路由;主机 A 始终从源地址为 131.107.89.211 的 Internet 接口发送通信。然而,如果主机 A 上的发送应用程序指定了源地址 131.107.89.211,那么查询结果将是 Internet 接口的默认路由;主机 A 从 Internet 接口发送通信。如果主机 A 上的发送应用程序指定源地址为 192.168.17.48,查询将选择 Intranet 接口的默认路由;主机 A 从 Intranet 接口发送通信。通过受约束的路由查询,IP 使用具有较高跃点数的默认路由发送源地址为 192.168.17.48 的通信。
对于已接收的通信,IP 首先确定该通信的目标是否为本主机。如果不是,由于该主机不充当路由器,IP 自行丢弃该数据包。然后,IP 确定传入接口(接收数据包的接口)上是否启用了强主机接收。如果未启用,IP 将处理该数据包。如果已启用,IP 将确定该传入接口是否分配了数据包中的目标地址。如果已分配,IP 将处理该数据包。如果未分配,IP 将自行丢弃该数据包。图 3 显示普通接收主机进程。
图 3 接收主机进程
Windows 中的弱强主机行为
Windows XP 和 Windows Server® 2003 使用弱主机模式为所有 IPv4 接口执行发送和接收进程,使用强主机模式为所有 IPv6 接口执行发送和接收进程。您不能对该行为进行配置。默认情况下,Windows Vista 和 Windows Server 2008 中的下一代 TCP/IP 堆栈支持所有接口上的 IPv4 和 IPv6 强主机发送和接收(但 Teredo 隧道接口除外,该接口适用于 Teredo 特定主机中继)。图 4 按照每个接口列出了可用于配置 IPv4 和 IPv6 的发送和接收行为的命令。注意,InterfaceNameOrIndex 要么是来自“网络连接”文件夹的接口名称,要么是其接口索引。您可从命令显示中获取接口的接口索引:
Figure 4 配置强弱发送和接收行为的命令
• netsh interface ipv4 set interface [InterfaceNameOrIndex] weakhostsend=enabled|disabled • netsh interface ipv4 set interface [InterfaceNameOrIndex] weakhostreceive=enabled|disabled • netsh interface ipv6 set interface [InterfaceNameOrIndex] weakhostsend=enabled|disabled • netsh interface ipv6 set interface [InterfaceNameOrIndex] weakhostreceive=enabled|disabled |
netsh interface ipv6 show interface
弱强主机行为和 RFC 3484
为了提供选择源与目标 IPv6 和 IPv4 地址(用于尝试连接)的标准化方法,RFC 3484 定义了两种算法。一种是源地址选择算法,用于选择与目标地址一起使用的最佳源地址。另一种是目标地址选择算法,用于按优先级顺序对可能的目标地址列表排序。
确定给定的目标地址的候选源地址列表时,强弱主机行为会起作用,并且还会影响目标地址的最终排序列表。对于强主机发送行为,候选源地址列表包含分配给目标的发送接口的单播地址。对于弱主机发送行为,候选列表可包含分配给任何已启用弱主机发送的接口的地址。有关源地址选择和目标地址选择的详细信息,请访问microsoft.com/technet/community/columns/cableguy/cg0206.mspx。
默认情况下,弱主机发送和弱主机接收对于所有接口的 IPv4 和 Pv6 都是禁用的,但适用于 Teredo 特定主机中继的 Teredo 隧道接口除外。
有关 RFC 3484 的详细信息,请参阅“弱强主机行为和 RFC 3484”侧栏。
禁用远程访问 VPN 连接默认路由
远程访问虚拟专用网络 (VPN) 客户端是多宿主主机的另一个示例。尽管它可能具有连接到 Internet 的单一 LAN 接口,但当远程访问 VPN 客户端完成 VPN 连接后,它成为多宿主主机。它具有两个接口:LAN 接口和一个基于适用于 VPN 连接的点对点协议 (PPP) 的接口。它还具有两个 IPv4 地址:Internet 服务提供程序分配的 IPv4 地址用于 LAN 接口,VNP 服务器分配的 IPv4 地址用于基于 PPP 的接口。
为了确保 VPN 客户端通过 VNP 连接将默认路由通信发送至 Intranet,Windows XP 和 Windows Server 2003 通过提高现有默认路由的跃点数,添加一个使用 PPP 接口且具有较低跃点数的新默认路由,修改 IPv4 路由表。该默认行为使 Intranet 上的位置在 VPN 连接持续期间可以访问,而使 Internet 上的几乎所有位置在 VPN 连接持续期间都无法访问。通过不为 VPN 连接添加默认路由而为 Intranet 目标添加特定路由,可将 VPN 客户端配置为拆分隧道以同时访问 Internet 和 Intranet 位置。但是,仍存在一种风险:拆分隧道 VPN 客户端可在 Internet 和 Intranet 两者间路由数据包。有关详细信息,请参阅 microsoft.com/technet/community/columns/cableguy/cg1003.mspx。
Windows XP 和 Windows Server 2003 中的默认 VPN 客户端行为是为弱主机发送行为设计的。路由查询始终使用 VPN 连接的默认路由,因为它具有最低跃点数。然而,使用强主机发送行为时,用于发送通信的默认路由取决于数据包中的源 IP 地址。对于来自由 ISP 分配的 IPv4 地址的通信的路由查询,将使用默认路由,该默认路由使用 LAN 接口,从而可访问所有 Internet 位置。对于来自由 VPN 服务器分配的 IPv4 地址的通信的路由查询,将使用默认路由,该默认路由使用 PPP 接口,从而可访问所有 Intranet 位置。所以,当您使用强主机发送行为时,VPN 客户端会具有一个分拆隧道配置,并且可同时访问 Internet 和 Intranet,甚至对于那些没有管理员级别权限对 IPv4 路由表进行直接修改的应用程序也如此。
为了阻止强主机发送行为在默认情况下创建拆分隧道配置,当 VPN 连接完成后,Windows Vista® 和 Windows Server 2008 中的 VPN 客户端自动禁用 LAN 接口的默认路由。该行为可确保在路由表中仅存在一个单一的使用 PPP 接口的默认活动路由。该行为还可确保没有管理员权级别权限的应用程序不能执行分拆隧道。
由于来自 VPN 客户端计算机的通信必须源自由 VPN 服务器分配的 IPv4 地址,该行