現象
次のような状況で問題が発生します。
-
Microsoft インターネット セキュリティと ISA Server 2006 または Forefront TMG 2010 では、SMTP フィルターを有効にします。
-
SMTP クライアントは、ISA Server 2006 または Forefront TMG 2010 を使用する SMTP サーバーと通信します。
-
SMTP クライアントは、SMTP サーバーとの対話で次のコマンドのいずれかを使用します。
-
TLS
-
STARTTLS
-
X AnonymousTLS
-
このシナリオで ISA Server 2006 または Forefront TMG 2010 リセット接続 SMTP クライアントに SMTP サーバーが TCP の FIN パケットを ISA Server または Forefront TMG 2010 への接続を終了するとします。これにより特定の SMTP クライアントのメッセージが正しく送信される場合でも、メッセージの配信が失敗したことを報告するアプリケーションです。ISA のログ記録は、この接続は次の結果コードが表示されます。
0x80074e24 FWX_E_CONNECTION_KILLED
原因
仕様では、SMTP サーバーは、ISA Server または Forefront TMG 2010 への接続を終了すると、SMTP クライアントへの接続がリセットされます。ISA Server または Forefront TMG 2010 は、トラフィックが暗号化されている場合に、SMTP QUITコマンドに対する SMTP トラフィックに検査できないためにです。ただし、この動作は、エラーを報告する特定の SMTP クライアント アプリケーションを発生することができます。
解決方法
修正プログラムは、不正なエラー レポートを避けるためにされています。この修正プログラムにより、既定の動作を変更できるように、ISA Server は、SMTP サーバーが TCP の FIN パケットが TCP 接続を終了すると、SMTP ではなくクライアントのリセット パケットに TCP の FIN パケットを返します。この修正プログラムをインストールした後は、既定の動作を変更するには、ISA Server コンピューターでスクリプトを実行するのにはあります。この修正プログラムを適用するには、次の手順を実行します。
-
ダウンロードし、次のマイクロソフト サポート技術情報資料に記載されている修正プログラム パッケージをインストールします。
ISA Server 2006 の修正プログラム パッケージの959357の説明: 2008 年 10 月 29 日注: Forefront TMG 2010 を実行している場合は、メモ帳ファイルには、手順 2 からスクリプトをコピーし、保存します。管理者特権でコマンド プロンプトを開くし、スクリプトを実行 (ie: cscript smtp.vbs)。
-
メモ帳を起動し、メモ帳ファイルに次のスクリプトをコピーします。
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
-
.Vbs ファイル名の拡張子を使用して、Microsoft Visual Basic スクリプト ファイルとしてファイルを保存します。
-
スクリプトを実行する .vbs ファイルをダブルクリックします。