你目前正处于脱机状态,正在等待 Internet 重新连接

TCP 堆栈的内存压力保护新功能说明

针对 Windows Server 2003 的支持已于 2015 年 7 月 14 日终止。

Microsoft 已于 2015 年 7 月 14 日终止了对于 Windows Server 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

简介
本文介绍了 TCP 堆栈的新功能内存压力保护。此新功能是通过安全更新 967723 提供的。
更多信息
内存压力保护功能由三个安全设置组成。这些设置包括内存压力保护 (MPP)、配置和端口免除。

MPP 设置

MPP 设置定义此功能,它包括以下两项在检测到攻击时的操作:
  • 终止现有的 TCP 连接。
  • 删除传入 SYN 请求。
管理员可以使用 netsh 命令启用或禁用 MPP 设置。当管理员启用或禁用 MPP 设置时,此功能随之被启用或被禁用。

配置设置

配置功能可帮助管理员区分公用和非公用接口。如果接口可以访问域控制器,则表示该接口已加入域,或者管理员可以将接口配置为专用。只在 Windows Vista 中和 Windows Server 2008 中提供了配置功能。

配置设置可确定当计算机受到攻击导致内存不足时,其在加入域的接口和专用接口上终止 TCP 连接和删除传入 SYN 请求的能力。在 Windows Server 2003 上,要求管理员使用注册表项来禁用特定接口上的 MPP 功能。有关详细信息,请参阅“在 Windows Server 2003 中配置这些设置”部分。默认情况下,此配置设置处于启用状态。启用此设置,表示管理员已确定在任何情况下都不会在加入域的接口以及专用接口上终止 TCP 连接或删除 SYN。如果管理员希望在受到攻击时在加入域的接口以及专用接口上终止 TCP 连接和删除 SYN,则必须禁用配置设置。

注意 如果已启用 MPP 设置并且检测到了攻击,则即使已启用配置设置,管理员也无法停止在公用接口上的连接终止。配置设置功能专门用于加入域的接口和专用接口。但是,在这些情况下,管理员可以使用端口免除设置免除对公用接口上的特定端口执行 MPP 操作。

端口免除设置

端口免除设置使管理员能够设置特定端口的例外。默认情况下,启用 MPP 设置后,即对所有端口上的连接启用了内存压力保护功能。如果检测到攻击,现有连接可能会被终止,或者传入的 SYN 可能会被删除,具体取决于 MPP 和配置设置。但是,管理员可以通过在端口例外列表中进行指定来为某些端口上的连接设置例外。

注意
  • 端口免除列表是一个全局列表,适用于所有的接口和 IP 地址。
  • 端口免除设置会在端口上建立任何 TCP 连接之前发挥其效用。建议您先配置与 MPP 相关的所有设置,然后再启动服务器应用程序。

此类设置在服务器和客户端上的默认值

在服务器上的默认值在客户端上的默认值
MPP已启用已禁用
配置已启用已启用
端口免除无免除无免除
注意 如果这些设置已更改,且管理员希望还原为默认设置,则可以使用以下 netsh 命令:
netsh int tcp reset
注意 在使用 netsh int tcp reset 命令之前,请参阅“已知问题”部分。

在 Windows Vista 中配置这些设置

管理员可以使用 netsh 命令在运行时更新 MPP、配置和端口免除设置。这些设置确定某个 TCP 连接是否可以进行删除。在创建该 TCP 连接的传输控制块时执行此评估,具体取决于当时的设置。
  • netsh int tcp reset

    与其他 TCP 设置一起重置安全设置。这些安全设置包括 MPP、配置、端口免除和连接速度限制设置。
  • netsh int tcp show security

    显示 MPP、配置和端口免除的当前已应用的安全设置(如果有)。
  • netsh int tcp set security mpp=[enabled|disabled|default]

    切换 MPP 设置。
  • netsh int tcp set security Profiles=[enabled|disabled|default]

    切换配置设置。
  • netsh int tcp set security startport=<x> numberofports=<y+1> mpp=[enabled|disabled|default]

    为范围从 xx+y 的端口指定端口免除。您应确保 xx+y 在有效的端口范围 (0 - 65535) 之内。

    示例

    添加端口免除范围:
    在命令提示符下键入以下命令,然后按 Enter:
    netsh int tcp set security startport=5000 numberofports=10 mpp=disabled
    此命令将禁用端口 5000 到 5009(包括这两个端口)的 MPP 功能。

    删除端口免除范围:
    在命令提示符下键入以下命令,然后按 Enter:
    netsh int tcp set security startport=5000 numberofports=10 mpp=enable
    此命令将删除在上一个示例中添加的免除项。

    注意netsh int tcp set security 命令不处理重叠的端口范围和子范围。

在 Windows Server 2003 中配置这些设置

在 Windows Server 2003 中,必须使用注册表配置这些设置。

在 Windows Server 2003 中配置 MPP 设置

重要说明:此部分、方法或任务包含有关如何修改注册表的步骤。但是,注册表修改不当可能会出现严重问题。因此,请一定严格按照下列步骤操作。为了获得进一步的保护,请在修改注册表之前对其进行备份。这样就可以在出现问题时还原注册表。有关如何备份和还原注册表的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756 如何在 Windows 中備份及還原登錄


若要启用或禁用 MPP 设置,请使用以下注册表项。
注意 默认情况下,以下注册表项不存在。您必须先创建它们才能对其进行修改。尽管这些注册表项不存在,但默认情况下 MPP 处于启用状态且不免除任何端口。
  • Internet 协议版本 4 (IPv4):
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableMPP
  • Internet 协议版本 6 (IPv6):
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\EnableMPP
例如,您可以执行下列步骤来禁用 IPv4 上的 MPP 设置:
  1. 单击“开始”,单击“运行”,在“打开”框中键入 regedit,然后单击“确定”
  2. 找到并单击下面的注册表子项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. “编辑”菜单上,指向“新建”,然后单击“DWORD 值”
  4. 键入 EnableMPP,然后按 Enter。
  5. 右键单击 EnableMPP,然后单击“修改”
  6. “数值数据”框中,键入 0,然后单击“确定”
  7. 退出注册表编辑器。
  8. 重新启动计算机。
注意
  • 如果希望重新启用 MPP 设置,请将 EnableMPP 注册表项的 DWORD 值设置为 1,然后重新启动计算机。
  • 可以执行上述相同步骤为 IPv6 上的 MPP 设置配置以下注册表项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\EnableMPP

在 Windows Server 2003 中为特定接口配置 MPP 设置

重要说明:此部分、方法或任务包含有关如何修改注册表的步骤。但是,注册表修改不当可能会出现严重问题。因此,请一定严格按照下列步骤操作。为了获得进一步的保护,请在修改注册表之前对其进行备份。这样就可以在出现问题时还原注册表。有关如何备份和还原注册表的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756 如何在 Windows 中備份及還原登錄


注意 默认情况下,在 Windows Server 2003 中 MPP 功能在所有接口上都处于启用状态。

若要启用或禁用特定接口的 MPP 设置,请使用以下注册表项:
  • IPv4:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\<GUID>\DisableMPPOnIF
  • IPv6:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip6\Parameters\Interfaces\<GUID>\DisableMPPOnIF
例如,您可以执行以下步骤禁用 IPv4 上特定接口的 MPP 设置:
  1. 单击“开始”,单击“运行”,在“打开”框中键入 regedit,然后单击“确定”
  2. 找到并单击下面的注册表子项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\<GUID>
  3. “编辑”菜单上,指向“新建”,然后单击“DWORD 值”
  4. 键入 DisableMPPOnIF,然后按 Enter。
  5. 右键单击 DisableMPPOnIF,然后单击“修改”
  6. “数值数据”框中,键入 1,然后单击“确定”
  7. 退出注册表编辑器。
  8. 重新启动计算机。
注意 可以执行上述相同步骤为 IPv6 上特定接口的 MPP 设置配置以下注册表子项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip6\Parameters\Interfaces\<GUID>\DisableMPPOnIF

在 Windows Server 2003 中配置免除端口设置

重要说明:此部分、方法或任务包含有关如何修改注册表的步骤。但是,注册表修改不当可能会出现严重问题。因此,请一定严格按照下列步骤操作。为了获得进一步的保护,请在修改注册表之前对其进行备份。这样就可以在出现问题时还原注册表。有关如何备份和还原注册表的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756 如何在 Windows 中備份及還原登錄


若要为范围从 xy 的端口指定端口免除,请使用以下注册表项:
  • IPv4:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MPPExcludedPorts
  • IPv6:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\MPPExcludedPorts
例如,您可以执行以下步骤在 IPv4 上为范围从 xxxxyyyy 的端口指定端口免除:
  1. 单击“开始”,单击“运行”,在“打开”框中键入 regedit,然后单击“确定”
  2. 找到并单击下面的注册表子项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. “编辑”菜单上,指向“新建”,然后单击“多字符串值”
  4. 键入 MPPExcludedPorts,然后按 Enter。
  5. 右键单击 MPPExcludedPorts,然后单击“修改”
  6. “数值数据”框中,使用 xxxx-yyyy 格式键入端口范围(例如,5000-5010),然后单击“确定”
  7. 退出注册表编辑器。
  8. 重新启动计算机。
注意
  • 您必须使用 xxxx-yyyy 格式指定端口范围,其中,xxxxyyyy 位于有效的端口范围之内。此范围包含开始值和结束值。
  • 可以执行上述步骤为 IPv6 上的端口免除设置配置以下注册表子项:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\MPPExcludedPorts
  • 在此列表中指定的端口范围数量不能超过 12 个。多余的端口范围将被忽略,并且不会应用免除。

已知问题

  • 在 Windows Vista SP2 和 Windows Server 2008 SP2 上,连接速率限制受 netsh int tcp reset 命令影响。

    在安装此安全更新之前,netsh int tcp reset 命令会重置 TCP 设置。这包括烟囱参数、显式拥塞通知 (ECN),接收窗口自动调节、复合 TCP (CTCP) 和时间戳。安装此安全更新之后,netsh int tcp reset 命令还会重置这些安全设置,包括 MPP、配置和连接速率限制设置。即使 MPP 和配置设置正确,也会在运行时重置连接速率限制设置。若要再次设置连接速率限制,必须修改注册表子项。有关连接速率限制设置的更多信息,请单击以下文章编号,查看 Microsoft 知识库中相应的文章:
    969710如何在 Windows Vista Service Pack 2 和 Windows Server 2008 Service Pack 2 中启用 TCP 半开连接限制
  • 在 Windows Server 2003 中,如果安装安全更新 967723,然后再安装 IPv6,则事件日志中会包含类似于 IPv6 事件 ID 4229 的以下信息:
    无法找到来自源 Tcpip6 的事件 ID 4229 的说明。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以在本地计算机上安装或修复组件。

    如果该事件源于另一台计算机,则必须保存该事件的显示信息。

    事件包含以下信息:

    消息资源存在,但在字符串/消息表中找不到该消息
    若要解决此问题,您必须重新安装更新或手动添加以下注册表子项:
    • 在 Windows Server 2003 SP2 中,在
      HKLM\System\CCS\Services\eventlog\System\tcpipv6\EventMessageFile
      下添加字符串 %systemroot%system32\w03a3409.dll
    • 在 Windows Server 2003 SP1 中,在
      HKLM\System\CCS\Services\eventlog\System\tcpipv6\EventMessageFile
      下添加字符串 %systemroot%system32\w03a2409.dll
    • 在 Windows Server 2003 中,在
      HKLM\System\CCS\Services\eventlog\System\tcpipv6\EventMessageFile
      下添加字符串 %systemroot%system32\ws03res.dll
属性

文章 ID:974288 - 上次审阅时间:09/10/2009 13:23:57 - 修订版本: 1.3

  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Standard
  • Windows Web Server 2008
  • Windows Vista Business
  • Windows Vista Enterprise
  • Windows Vista Home Basic
  • Windows Vista Home Premium
  • Windows Vista Starter
  • Windows Vista Ultimate
  • Microsoft Windows Server 2003 Web Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Standard x64 Edition
  • kbsecvulnerability kbsecbulletin kbsecadvisory kbaccctrl kbsurveynew kbexpertisebeginner atdownload KB974288
反馈