IPV6_PROTECTION_LEVEL

IPV6_PROTECTION_LEVEL套接字选项使开发人员能够对 IPv6 套接字设置访问限制。 通过应用此类限制,可让在专用局域网上运行的应用程序能够通过简单的方式很好地增强自身的安全性,以便防范外部攻击。 IPV6_PROTECTION_LEVEL套接字选项可扩大或缩小侦听套接字的范围,在适当的时候允许公共和专用用户的无限制访问,或根据需要仅限制对同一站点的访问。

IPV6_PROTECTION_LEVEL目前有三个定义的保护级别。

保护级别 说明
PROTECTION_LEVEL_UNRESTRICTED
由旨在通过 Internet 运行的应用程序使用,包括利用 Windows (Teredo 中内置的 IPv6 NAT 遍历功能的应用程序,例如) 。 这些应用程序可能会绕过 IPv4 防火墙,因此,必须加强应用程序的安全性以防范针对开放端口的 Internet 攻击。
PROTECTION_LEVEL_EDGERESTRICTED
由旨在通过 Internet 运行的应用程序使用。 此设置不允许使用 Windows Teredo 实现进行 NAT 遍历。 这些应用程序可能会绕过 IPv4 防火墙,因此,必须加强应用程序的安全性以防范针对开放端口的 Internet 攻击。
PROTECTION_LEVEL_RESTRICTED
由不实现 Internet 方案的 Intranet 应用程序使用。 一般情况下,不会针对 Internet 样式的攻击来对这些应用程序进行测试或加强安全性。
此设置将限制仅接收链接本地的通信。

 

下面的代码示例提供了每个已定义的值:

#define PROTECTION_LEVEL_UNRESTRICTED   10  /* for peer-to-peer apps */
#define PROTECTION_LEVEL_EDGERESTRICTED 20  /* Same as unrestricted, except for Teredo  */
#define PROTECTION_LEVEL_RESTRICTED     30  /* for Intranet apps     */

这些值互斥,不能在单个 setsockopt 函数调用中组合。 此套接字选项的其他值是保留的。 这些保护级别仅适用于传入连接。 设置此套接字选项不会影响出站数据包或连接。

在 Windows 7 和 Windows Server 2008 R2 上,未指定IPV6_PROTECTION_LEVEL的默认值, PROTECTION_LEVEL_DEFAULT 定义为 -1,这是IPV6_PROTECTION_LEVEL的非法值。

在 Windows Vista 和 Windows Server 2008 上,IPV6_PROTECTION_LEVEL 的默认值为 PROTECTION_LEVEL_UNRESTRICTEDPROTECTION_LEVEL_DEFAULT 定义为 -1,这是IPV6_PROTECTION_LEVEL的非法值。

在 Windows Server 2003 和 Windows XP 上,IPV6_PROTECTION_LEVEL的默认值为 PROTECTION_LEVEL_EDGERESTRICTEDPROTECTION_LEVEL_DEFAULT 定义为 PROTECTION_LEVEL_EDGERESTRICTED

注意

应在绑定套接字之前设置IPV6_PROTECTION_LEVEL套接字选项。 否则, 在 bindsetsockopt 调用之间收到的数据包将符合 PROTECTION_LEVEL_EDGERESTRICTED,并可能传递到应用程序。

 

下表描述了将每个保护级别应用于侦听套接字的效果。

保护级别

允许的传入流量

同一站点

外部

NAT 遍历 (Teredo)

PROTECTION_LEVEL_RESTRICTED

PROTECTION_LEVEL_EDGERESTRICTED

PROTECTION_LEVEL_UNRESTRICTED

 

在上表中, “相同网站 ”栏是以下各项的组合:

  • 链接本地地址
  • 站点本地地址
  • 已知属于同一站点的全局地址 (与站点前缀表匹配)

在 Windows 7 和 Windows Server 2008 R2 上,未指定IPV6_PROTECTION_LEVEL的默认值。 如果本地计算机上没有安装边缘遍历感知防火墙软件, (禁用 Windows 防火墙,或者安装了一些忽略 Teredo 流量的其他防火墙) ,则仅当将 IPV6_PROTECTION_LEVEL 套接字选项设置为 PROTECTION_LEVEL_UNRESTRICTED时,才会收到 Teredo 流量。 但是,Windows 防火墙或任何边缘遍历感知防火墙策略可能会根据防火墙的策略设置忽略此选项。 通过将此套接字选项设置为 PROTECTION_LEVEL_UNRESTRICTED,应用程序将传达其接收本地计算机上安装的主机防火墙遍历的边缘流量的显式意图。 因此,如果安装了边缘遍历感知主机防火墙,它将最终决定接受数据包。 默认情况下,不设置任何套接字选项:

  • o 如果启用了 Windows 防火墙 (或在本地计算机上安装了另一个边缘遍历感知主机防火墙) ,则将观察到它强制实施的任何操作。 典型的边缘遍历感知主机防火墙默认会阻止 Teredo 流量。 因此,应用程序将遵循默认值,就像 PROTECTION_LEVEL_EDGERESTRICTED一样。
  • o 如果未启用 Windows 防火墙,并且本地系统上未安装其他边缘遍历感知主机防火墙,则默认 防火墙将PROTECTION_LEVEL_EDGERESTRICTED

在 Windows Vista 和 Windows Server 2008 上,IPV6_PROTECTION_LEVEL的默认值为 PROTECTION_LEVEL_UNRESTRICTED。 但有效值取决于是否启用了 Windows 防火墙。 无论为IPV6_PROTECTION_LEVEL设置什么值,Windows 防火墙都是边缘遍历感知 (Teredo 感知) ,如果 IPV6_PROTECTION_LEVEL PROTECTION_LEVEL_UNRESTRICTED,Windows 防火墙都将被忽略。 因此,有效值取决于防火墙策略。 如果禁用 Windows 防火墙,并且本地计算机上未安装其他边缘遍历感知防火墙,则PROTECTION_LEVEL_UNRESTRICTED IPV6_PROTECTION_LEVEL的默认值。

在 Windows Server 2003 和 Windows XP 上,IPV6_PROTECTION_LEVEL的默认值 为PROTECTION_LEVEL_EDGERESTRICTED。 除非已将 IPV6_PROTECTION_LEVEL 套接字选项设置为 PROTECTION_LEVEL_UNRESTRICTED,否则不会收到任何 Teredo 流量。

根据IPV6_PROTECTION_LEVEL,需要来自 Internet 的未经请求的流量的应用程序可能无法接收未经请求的流量。 但是,对于通过 Windows Teredo 接口接收请求的流量,这些要求不是必需的。 有关与 Teredo 交互的更多详细信息,请参阅 通过 Teredo 接收请求的流量

当由于设置的保护级别而拒绝传入的数据包或连接时,拒绝的处理方式就如同没有应用程序正在侦听该套接字一样。

注意

IPV6_PROTECTION_LEVEL套接字选项不一定对 IPv6 套接字施加访问限制,也不一定使用 Windows Teredo 以外的某些方法限制 NAT 遍历,甚至不一定使用其他供应商的其他 Teredo 实现。

 

getsockopt

通过 Teredo 接收请求的流量

setsockopt