ISA Server 2006 或前沿 TMG 2010 重置连接到 SMTP 客户端 SMTP 服务器关闭其与 ISA 服务器的连接时

适用于: Forefront Threat Management Gateway 2010 EnterpriseForefront Threat Management Gateway 2010 Standard

症状


请考虑以下情况:
  • 在 Microsoft Internet 安全和加速 (ISA) 服务器 2006年或前沿 TMG 2010 中,您可以启用 SMTP 筛选。
  • SMTP 客户端与 ISA Server 2006 或前沿 TMG 2010 通过 SMTP 服务器进行通信。
  • SMTP 客户端使用下列动词之一在其对话中与 SMTP 服务器:
    • TLS
    • STARTTLS
    • X-AnonymousTLS
在这种情况下,ISA Server 2006 或前沿 TMG 2010 重置连接到 SMTP 客户端 SMTP 服务器关闭连接到 ISA 服务器或前沿 TMG 2010 用 TCP FIN 数据包时。此行为可能导致某些特定的 SMTP 客户端应用程序报告邮件传递失败,即使正确发送消息。在 ISA 日志中,您将看到下面的结果代码为该连接:
0x80074e24 FWX_E_CONNECTION_KILLED

原因


按照设计,当 SMTP 服务器关闭它连接到 ISA 服务器或前沿 TMG 2010 重置到 SMTP 客户端的连接。这是因为 ISA Server 或前沿 TMG 2010 时将该通信加密,无法检查 SMTP 流量的 SMTP QUIT命令。但是,此行为可能导致报告错误的特定 SMTP 客户端应用程序。

解决方案


修补程序现已以避免错误的错误报告。此修复程序,以更改,以使 ISA 服务器的 TCP FIN 数据包时返回到 SMTP 客户端而不是重置数据包的 SMTP 服务器关闭 TCP 连接的 TCP FIN 数据包的默认行为。若要安装此修补程序后,请更改默认行为,您需要在 ISA 服务器计算机上运行脚本。若要应用此修补程序,请执行以下步骤:
  1. 下载,然后将提到此修补程序包安装以下 Microsoft 知识库文章:
    ISA Server 2006 修补程序包959357说明: 2008 年 10 月 29 日
    注意: 如果您正在运行 Forefront TMG 2010,将该脚本复制到一个记事本文件中的步骤 2 中,并将其保存。使用提升的权限打开命令提示符,然后运行该脚本 (即: cscript smtp.vbs)。
  2. 启动记事本,然后将以下脚本复制到一个记事本文件中。
    Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"Const SE_VPS_NAME = "GracefulPassthroughServerShutdown"Const SE_VPS_VALUE = trueSub SetValue()    ' Create the root obect.    Dim root  ' The FPCLib.FPC root object    Set root = CreateObject("FPC.Root")    'Declare the other objects needed.    Dim array       ' An FPCArray object    Dim VendorSets  ' An FPCVendorParametersSets collection    Dim VendorSet   ' An FPCVendorParametersSet object    ' Get references to the array object    ' and the network rules collection.    Set array = root.GetContainingArray    Set VendorSets = array.VendorParametersSets    On Error Resume Next    Set VendorSet = VendorSets.Item( SE_VPS_GUID )    If Err.Number <> 0 Then        Err.Clear        ' Add the item        Set VendorSet = VendorSets.Add( SE_VPS_GUID )        CheckError        WScript.Echo "New VendorSet added... " & VendorSet.Name    Else        WScript.Echo "Existing VendorSet found... value- " &  VendorSet.Value(SE_VPS_NAME)    End If    if VendorSet.Value(SE_VPS_NAME) <> SE_VPS_VALUE Then        Err.Clear        VendorSet.Value(SE_VPS_NAME) = SE_VPS_VALUE        If Err.Number <> 0 Then            CheckError        Else            VendorSets.Save false, true            CheckError            If Err.Number = 0 Then                WScript.Echo "Done with " & SE_VPS_NAME & ", saved!"            End If        End If    Else        WScript.Echo "Done with " & SE_VPS_NAME & ", no change!"    End IfEnd SubSub CheckError()    If Err.Number <> 0 Then        WScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description        Err.Clear    End IfEnd SubSetValue
  3. 使用.vbs 文件扩展名将该文件另存为 Microsoft Visual Basic 脚本文件。
  4. 双击该.vbs 文件以运行该脚本。
注意:如果您想要还原到默认行为,更改以下行的脚本:
Const SE_VPS_VALUE = true
将此行更改为如下:
Const SE_VPS_VALUE = false
然后,重新运行 ISA 服务器或前沿 TMG 的计算机上的脚本。

状态


Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

参考


有关软件更新术语的更多信息,请单击下面的文章编号以查看 Microsoft 知识库中的相应文章:
824684 用于描述 Microsoft 软件更新的标准术语的说明