Disclaimer

Этот блог появился как реплика с http://blogs.technet.com/tail в силу определенных обстоятельств. Любая информация в ЭТОМ блоге предоставляется без каких либо гарантий и обязательств. Все мнения принадлежат их авторам и не могут быть связаны с позициями и мнениями официальных лиц или организаций.

понедельник, 13 августа 2012 г.

Microsoft Threat Management Gateway 2010 – добавление диапазона SSL-портов при помощи VBScript для массива серверов

Если вам нужно использовать нестандартные порты для протоколов, использующих SSL/TLS, вы обнаружите простую, но весьма обескураживающую вещь: TMG не позволяет просто так создавать правила для SSL/TLS и протоколов, обменивающихся данными “поверх” (over) SSL/TLS с использованием нестандартных портов.

Проблема, в общем-то, известна еще с ISA 2000-2006. По сути, это и не проблема вовсе, а конфигурация "из коробки", работающая исключительно по соответствующим (зарегистрированным в IANA, описанным в разных RFC) портам. И решение этой проблемы известно - добавление нужных номеров портов или диапазонов Tunnel Ports при помощи специального VBScript-скрипта, использующего COM-модель ISA/TMG и получающего таким образом доступ к компонентам и конфигурации серверов.

Почему нельзя это сделать из консоли управления TMG - у меня на это есть два варианта объяснения: либо кто-то что-то не додумал в свое время при планировании функционала, либо это просто разумный баланс security vs comfort - выбирайте по вкусу, как говорится.

Все найденные поиском решения, включая и описанное в документации Microsoft, позволяют добавлять порты к диапазону только для обычного сервера (single server). В случае с массивом серверов они не работают. В TMG Enterprise Edition существует специальная роль сервера Configuration Storage Server, предназначенная, как следует из названия, для хранения конфигурации и распространения ее на все сервера в массиве. По сути, CSS это еще один экземпляр базы данных ADAM (Active Directory Application Mode).

И вот тут-то в случае с массивом серверов вся собака и зарыта. Дело в том, что для внесения изменений в конфигурацию массива из VBScript-а нужно сначала получить доступ к CSS-серверу в режиме read-write. И оперировать при этом не объектом FPCRoot, а непосредственно массивом, получить который можно методом GetContainingArray().

Для доступа к настройкам диапазонов SSL-портов используем ArrayPolicy.WebProxy.TunnelPortRanges соответствующего объекта (для простого сервера это FPCRoot, а в нашем случае – это массив TMG и, соответствено, CSS-сервер. И весь скрипт для изменения диапазонов портов выглядит следующим образом:

Option Explicit
 
' Объявляем нужные объекты и переменные
Dim root     ' корневой объект FPCLib.FPC
Dim tmgArray ' объект массива FPCArray object
Dim tpRange  ' существующий диапазон SSL-портов 
Dim newRange ' новый диапазон SSL-портов
 
' Создаем экземпляр объекта FPCRoot 
Set root = CreateObject("FPC.Root")
 
' Получаем ссылку на массив серверов
Set tmgArray = root.GetContainingArray()
 
' Получаем все существующие диапазоны портов
Set tpRange = tmgArray.ArrayPolicy.WebProxy.TunnelPortRanges
 
' Добавляем новый диапазон с указанием имени диапазона, 
' начального и конечного номеров портов
Set newRange = tpRange.AddRange("Range for CRM - port 40005", 40005, 40005)
 
' Сохраняем сделанные изменения
tpRange.Save True
 
' Отключаемся от CSS
root.DisconnectFromConfigurationStorageServer

Выполнять скрипт при этом надо не на сервере, где развернута EMS (а в нашем случае там by default располагался и CSS), а на любом из серверов массива. И после выполнения скрипта для того, чтобы изменения вступили в силу, нужно перезапустить службу Windows Firewall на том сервере, где выполнялся скрипт и затем на EMS-сервере.

Комментариев нет: