UDP Updates Exception List Script for ISA Server and Forefront TMG (Updated for MS09-016)
Why do I need this?
< UPDATE May 12 2009 >
Since the release of Security update MS09-016, some ISA and TMG administrators have observed the same behavior as seen when they installed the UDP Update package. Tihs happened because all ISA and TMG updates are cumulative, that is; they all are built on the updates that have been issued before them. As a result, some ISA and TMG administrators that chose not to apply the UDP Updates patch (or removed it after installing it) have found that services that create listeners within the dynamic port range used by the UDP Update are unavailable. You can use the script in this blog to alleviate these port reserviation conflicts.
</Update>
Last month, we released a collection of updates to help mitigate the problem caused when DNS traffic crosses a NAT relationship. MSKB 956190 and this ISABlog article discussed these in great detail. As a reminder, the updates for ISA and TMG can be obtained here:
· ISA 2000 (requires SP2): http://support.microsoft.com/kb/956637
· ISA 2004 (requires SP3): http://support.microsoft.com/kb/958024
· ISA 2006 (requires SP1): http://support.microsoft.com/kb/956570
· TMG MBE: http://support.microsoft.com/kb/957298
As with the MS08-037 update on some SBS deployments, these updates may cause conflicts between ISA Server and other network services operating on the same server, such as IPSec NAT-T. Unlike the MS08-037 update, you cannot use the TCP/IP ReservedPorts list to resolve these conflicts. The reason this method cannot work for ISA and TMG servers is due to dependencies which are not guaranteed to exist on the server where ISA Server operates. ISA Server cannot use the exact same process for allocating sockets as used by the DNS server service. Although this functionality is available on Windows 2008 Server, we deemed it better to use the same mechanisms for ISA and TMG to make for more consistent behavior. Since the socket allocation process is different, the methodology for defining exceptions must also be different.
The Script
This script will create, modify or delete the ports which should not be allocated for the UDP NAT pool. The script will execute on ISA Server 2004, 2006 and Forefront TMG. Specific instructions are provided in the following section.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' Copyright (c) Microsoft Corporation. All rights reserved.
' THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE
' RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE
' USER. USE AND REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS
' HEREBY PERMITTED.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"
Const SE_VPS_NAME = "UserReservedPorts"
Const SE_VPS_VALUE = "12000-12100;64000-64050;"
' see below, need to uncomment the proper line to add or remove the VPS.
Sub SetUserReservedPorts()
' 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
' Get references to the array object
' and the protocols collection.
Set array = root.GetContainingArray
CheckError
On Error Resume Next
Dim VendorSets ' An FPCVendorParametersSets collection
Dim VendorSet ' An FPCVendorParametersSet object
Set VendorSets = array.VendorParametersSets
CheckError
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
Err.Clear
VendorSet.Value(SE_VPS_NAME) = SE_VPS_VALUE
' uncomment the following line to delete the VPS.
'
' VendorSet.RemoveValue(SE_VPS_NAME)
If Err.Number <> 0 Then
CheckError
End If
array.Save false, true
WScript.Echo "Done saving..."
End Sub
Sub CheckError()
If Err.Number <> 0 Then
WScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description
Err.Clear
End If
End Sub
SetUserReservedPorts
How do I Use it?
To add or update the port exclusion list, you would edit the script at the line where it reads:
Const SE_VPS_VALUE = "12000-12100;64000-64050;"
The ports you enter should be listed in much the same way as provided for the port list in MSKB 821873, except that for the ISA/TMG exclusion list, each port range (even the last entry) is terminated by a semicolon (;). For instance, if you need to exclude ports for IPSec NAT-T, you should have an entry as shown below (IPSec NAT-T operates on UDP:4500):
Const SE_VPS_VALUE = "4500-4500;"
You do not need to include any ports:
- below 1024 as ISA and TMG allocate UDP sockets using ports starting above 1024.
- for TCP listeners as this update only affects UDP socket allocations.
Once you’ve completed listing the ports you wish to exclude from the socket pool allocation, you would save the updated script to the ISA or TMG server local drive as “UserReservedPorts.vbs” and execute it from a command prompt using the command line below:
cscript <Drive>:\<Path>\UserReservedPorts.vbs
To delete the port exclusions, you would change the script as follows:
1. Comment out (add a single quote at the beginning of) the following line
VendorSet.Value(SE_VPS_NAME) = SE_VPS_VALUE
2. Remove the comment (single quote) from the beginning of following line
' VendorSet.RemoveValue(SE_VPS_NAME)
Save the file and run it using the following command line:
cscript <Drive>:\<Path>\UserReservedPorts.vbs
You will have to restart the firewall service in order to affect the changes created by the script, so it’s best to make these changes when your SLA allows downtime.
In Summary
As always, if you experience any problems with the updates or this script, you can post comments and complaints here and of course, CSS engineers are more than happy to assist you.
HTH,
Jim Harrison
Program Manager, Forefront Edge CS
If We Can't Fix It - It Ain't Broke!
Technical Reviewers
Doron Juster
Senior Developer – Forefront Edge CS
Yuri Diogenes
Security Support Engineer – Microsoft CSS Forefront Edge Team
Mohit Sexana
Tech Lead – Microsoft CSS Forefront Edge Team
Comments
- Anonymous
January 01, 2003
PingBack from http://diggffxi.info/tags/105/200812/adda-corporation.html