Озадачившись вопросом автоматизации регулярного выполнения резервного копирования настроек Forefront TMG 2010 нашёл ряд интересных материалов, в том числе статью, описывающую процедуру настройки взаимодействия DPM сервера и DPM агента, установленного на сервере Threat Management Gateway – "How DPM 2010 Could Protect Forefront TMG 2010 with a Minimum Opening of Feeds" (в блоге The Microsoft MVP Award Program Blog). Учитывая то, что в моём случае серверы являются виртуальными и периодически подвергаются резервному копированию в виде VM на сервер DPM, нет особого смысла в установке агента DPM непосредственно внутрь этих виртуальных машин. Поэтому я решил ограничиться созданием на регулярной основе резервных копий конфигурации массива TMG. Из консоли Threat Management Gateway Management эта процедура вызывается из меню действий или контекстного меню на конкретном массиве – Export (Back Up).
Мастер сохранения конфигурации довольно прост и в моём примере используется с включенными настройками сохранения опциональной информации о введённых в TMG учетных данных и настроек безопасности.
После изучения примеров автоматизации этой процедуры экспорта настроек и некоторых экспериментов получился PowerShell скрипт, который регулярно запускается на одном из TMG серверов, являющихся членом массива и сохраняет с аналогичными настройками безопасности данные конфигурации на файловый сервер. Если в процессе выполнения экспорта происходит ошибка – скрипт отсылает администратору письмо-уведомление. Дополнительно скрипт отслеживает наличие устаревших файлов экспорта и удаляет их.
# Блок переменных для экспорта
# $gvExportDir - Путь к каталогу на файловом сервере в котором будут создаваться экспортируемые файлы
# $gvExportOptData - Константа определяющая опции экспорта. Подробнее http://msdn.microsoft.com/en-us/library/ms826700.aspx
# $gvPassword - Пароль для криптования информации об учетных данных, сохранённых в TMG
#
$gvExportDir = "\\FS\TMG-Array-Config$"
$gvExportOptData = 15
$gvPassword = "12345678"
#
# Блок переменных для уведомлений по электронной почте в случае проблем экспорта
# $gvEmailFrom - Email адрес отправителя
# $gvEmailTo - Email адрес получателя (например адрес группы рассылки для Администраторов TMG)
# $gvSMTPServer - FQDN имя почтового сервера
#
$gvEmailFrom = "TMG-Config-Backup@holding.com"
$gvEmailTo = "DST-Administrators@holding.com"
$gvSMTPServer = "Mail.holding.com"
#
# Блок переменных для удаления устаревших файлов экспорта
# $gvDelOldFiles - Признак необходимости удаления устаревших файлов
# $gvDelPeriod - Период хранения файлов экспорта в днях.
#
$gvDelOldFiles = $True
$gvDelPeriod = 10
#
# Блок экспорта конфигураций всех обнаруженных массивов TMG
#
$vFPC = New-Object -comObject FPC.root
$vArrays = $vFPC.Arrays
Foreach ($vArray in $vArrays)
{
write-host "Find array:" $vArray.Name
$vDate = Get-Date -uformat "%Y_%m_%d_%H_%M_%S"
$vFName = $vArray.Name + "_" + $vDate + ".xml"
$vFPath = $gvExportDir + "\" + $vFName
$vComment = "Exported by PowerShell"
write-host "Export configuration for array:" $vArray.Name
write-host "Path:" $vFPath
$vArray.ExportToFile($vFPath, $gvExportOptData, $gvPassword, $vComment)
If ($Error){
write-host "Export failed, send e-mail to Administrators..."
$vEmailSubj = "Error exporting TMG Configuration"
$vEmailBody = "<font face='Tahoma' color='#000000' size='2'>Error exporting configuration for array: </font>" + `
"<font face='Tahoma' color='#0000A0' size='2'><strong>" + `
$vArray.Name + "</strong></font></br></br>" + `
"<font face='Tahoma' color='#000000' size='2'>File for exporting: </font>" + `
"<font face='Tahoma' color='#A52A2A' size='2'>" + `
$vFPath + "</font></br></br>" + `
"<font face='Tahoma' color='#000000' size='2'>Error data: </font>" + `
"<font face='Tahoma' color='#800000' size='2'>" + `
$Error + "</font>"
$vSMTP = New-Object Net.Mail.SMTPClient($gvSMTPServer)
$vMsg = New-Object Net.Mail.MailMessage($gvEmailFrom, $gvEmailTo, $vEmailSubj, $vEmailBody)
$vMsg.IsBodyHTML = $True
$vSMTP.Send($vMsg)
}
Else{
write-host "Export Succeeded"}
}
#
# Блок удаления устаревших экспортных файлов
#
If ($gvDelOldFiles = $True)
{
Filter Get-OldFiles
{
if(([DateTime]::Now.Subtract($_.CreationTime)).Days -gt $gvDelPeriod)
{return $_ }
}
dir -path $gvExportDir | Get-OldFiles -Period $gvDelPeriod | Remove-Item -force
}
На сервере TMG в планировщике задач создана задача, которая через определённые интервалы времени запускает PowerShell и выполняет данный скрипт.
Триггер выполнения при желании можно сделать не на периодической основе, а, например, привязать к событию перезапуска служб Threat Management Gateway, и таким образом получить автоматическое сохранение резервной копии конфигурации после каждого её более или менее серьёзного изменения.
В моём примере данная задача выполняется от имени системы с высоким уровнем привилегий
И в силу того, что попытка записи создаваемого файла экспортированной конфигурации будет выполняться в контексте SYSTEM сервера Threat Management Gateway, на файловом сервере в свойствах соответствующего сетевого каталога нужно выставить разрешения для учетной записи компьютера – сервера TMG
Ну и разумеется, нужно не забыть добавить данное разрешение на уровне NTFS:
После этого, настроенное нами задание должно заработать и дать желаемый результат.
Дополнительные источники информации:
- MSDN Library > COM Objects > FPC > ExportToFile Method
- MSDN Library - Exporting and Importing a Forefront TMG Configuration
- Microsoft Forefront TechCenter Forums - powershell scripting for Forefront TMG
- ldap389 AD Blog - Powershell: Export firewall rules on your TMG servers
- Blog FixMyITSystem - TMG configuration backup automation - Part II
Обратная ссылка: Useful ISA 2006 / TMG 2010 links « Share IT /
Очень полезная штука. Проверил. Очень доволен. Спасибо!!!