TMG 2010 - Резервное копирование Array Configuration с PowerShell

TMG 2010 - Backup Array Configuration with PowerShellОзадачившись вопросом автоматизации регулярного выполнения резервного копирования настроек 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 Backup Export

Мастер сохранения конфигурации довольно прост и в моём примере используется с включенными настройками сохранения опциональной информации о введённых в TMG учетных данных и настроек безопасности.

TMG Backup via Export

После изучения примеров автоматизации этой процедуры экспорта настроек и некоторых экспериментов получился 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, и таким образом получить автоматическое сохранение резервной копии конфигурации после каждого её более или менее серьёзного изменения.

TMG Backup Task

В моём примере данная задача выполняется от имени системы с высоким уровнем привилегий

Task with SYSTEM account

И в силу того, что попытка записи создаваемого файла экспортированной конфигурации будет выполняться в контексте SYSTEM сервера Threat Management Gateway, на файловом сервере в свойствах соответствующего сетевого каталога нужно выставить разрешения для учетной записи компьютера – сервера TMG

Backup Share Permissions

Ну и разумеется, нужно не забыть добавить данное разрешение на уровне NTFS:

Backup folder NTFS perms

После этого, настроенное нами задание должно заработать и дать желаемый результат.

TMG Backup Result


Дополнительные источники информации:

Всего комментариев: 2 Комментировать

  1. Обратная ссылка: Useful ISA 2006 / TMG 2010 links « Share IT /

  2. mitushinem /

    Очень полезная штука. Проверил. Очень доволен. Спасибо!!!

Добавить комментарий