• SCOM 2012 Discovery & Agent Push Install для серверов Forefront TMG

    imageВ процессе процедуры обнаружения (Discovery) для удалённой установки агента (Push-installation) SCOM 2012 на сервера с Forefront TMG мы получим ошибку по причине блокировки необходимых нам соединений. Официальный список используемых для этой процедуры портов можно найти в документе Supported Configurations for System Center 2012 - Operations Manager - Supported Firewall Scenarios

    image

     

    Руководствуясь представленным списком портов у меня так и не получилось добиться желаемого результата. И даже рецепты, предложенные в статьях Kevin Holman's System Center Blog > Agent discovery and push troubleshooting in OpsMgr 2007 и DefinIT > Remote Installation of SCOM 2007 R2 Agent on Threat Management Gateway Servers не помогли, хотя и стали в совокупности подспорьем в обнаружении работоспособного варианта решения проблемы. Рассмотрим его.

    В консоли Forefront TMG Management создадим набор компьютеров (Computer Set) с названием System Center Operations Manager Servers. Включим в этот набор наши сервера SCOM, с которых будет выполняться удалённая установка и последующие обновления агента SCOM

    image

    С использованием созданного набора компьютеров нам нужно создать два разрешающих правила, в которых будет фигурировать ряд протоколов, которые приведены в двух представленных ниже таблицах.

    Описания протоколов которые есть в TMG по умолчанию:

    Описание Протокол Порты Направление
    System Center Operation Manager Agent TCP 5723 Outbound
    NetBios Datagram UDP 138 Send
    NetBios Name Service UDP 137 Send/Recieve
    NetBios Session TCP 139 Outbound
    Ping ICMP 0/8 Send/Recieve
    RPC (all interfaces) TCP 135 Outbound

    Описания протоколов, которые мы создадим дополнительно:

    Описание Протокол Порты Направление
    RPC/DCOM High Ports TCP 1024-65535 Outbound
    SMB over IP TCP 445 Outbound

     

    Создадим правило разрешающее обнаружение и удалённую установку, назовём его “SCOM Agent Push Install”:

    image

    В качестве разрешённых протоколов в этом правиле будут перечислены все протоколы перечисленные в таблицах, за исключением первой позиции.image

    После того как правило создано, откроем его свойства и на закладке настройки протоколов, используя кнопку Filtering > Configure PRC protocol выключим включенный по умолчанию режим Enforce strict RPC compilance 

    image

    Затем создадим ещё одно правило, разрешающее исходящий трафик от агента до сервера SCOM по порту TCP 5723 , назовём его, например “Allow remote monitoring (from TMG to SCOM)”:

    image

    Сохраняем конфигурацию TMG и проверяем результат.

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

    imageОзадачившись вопросом автоматизации регулярного выполнения резервного копирования настроек Forefront TMG 2010 нашёл ряд интересных материалов, в том числе статью, описывающую процедуру настройки взаимодействия DPM сервера и DPM агента, установленного на сервере TMG - The Microsoft MVP Award Program Blog > How DPM 2010 Could Protect Forefront TMG 2010 with a Minimum Opening of Feeds. Учитывая то что в моём случае сервера TMG являются виртуальными и периодически подвергаются резервному копированию в виде VM на сервер DPM, нет особого смысла в установке агента DPM непосредственно внутрь этих виртуальных машин. Поэтому я решил ограничиться созданием на регулярной основе резервных копий конфигурации массива TMG. Из консоли TMG эта процедура вызывается из меню действий или контекстного меню на конкретном массиве – Export (Back Up)

    <p>&#160;</p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image33.png"><font size="2"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb33.png" width="392" height="230" /></font></a></p>    <p><font size="2"></font></p>    <p><font size="2">Мастер сохранения конфигурации довольно прост и в моём примере используется с включенными настройками сохранения опциональной информации о введённых в TMG учетных данных и настроек безопасности. </font></p>    <p><font size="2"></font></p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image34.png"><font size="2"><u></u><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb34.png" width="517" height="399" /></font></a></p>    <p><font size="2"></font></p>    <p><font size="2">После изучения примеров автоматизации этой процедуры экспорта настроек и некоторых экспериментов получился PowerShell скрипт, который регулярно запускается на одном из TMG серверов, являющихся членом массива и сохраняет с аналогичными настройками безопасности данные конфигурации на файловый сервер. Если в процессе выполнения экспорта происходит ошибка – скрипт отсылает администратору письмо-уведомление. Дополнительно скрипт отслеживает наличие устаревших файлов экспорта и удаляет их.&#160;&#160; </font></p>    <p><font size="2"></font></p>    <blockquote>     <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок переменных для экспорта</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvExportDir - Путь к каталогу на файловом сервере в котором будут создаваться экспортируемые файлы</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvExportOptData - Константа определяющая опции экспорта. Подробнее http://msdn.microsoft.com/en-us/library/ms826700.aspx</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvPassword - Пароль для криптования информации об учетных данных, сохранённых в TMG</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><font color="#800080">$gvExportDir</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;\FSTMG-Array-Config$&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span><font color="#800080">$gvExportOptData</font></span><span> </span><span><font color="#ff0000">=</font></span><span> 15</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span><font color="#800080">$gvPassword</font></span><span> </span><span><font color="#ff0000">=</font></span><span> </span><span><font color="#800000">&quot;12345678&quot;</font></span></font><span></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок переменных для уведомлений по электронной почте в случае проблем экспорта</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvEmailFrom - Email адрес отправителя</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvEmailTo - Email адрес получателя (например адрес группы рассылки для Администраторов TMG)</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvSMTPServer - FQDN имя почтового сервера</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><font color="#800080">$gvEmailFrom</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;TMG-Config-Backup@holding.com&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><font color="#800080">$gvEmailTo</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;DST-TMG-Administrators@holding.com&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span><font color="#800080">$gvSMTPServer</font></span><span> </span><span><font color="#ff0000">=</font></span><span> </span><span><font color="#800000">&quot;Mail.holding.com&quot;</font></span></font><span></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок переменных для удаления устаревших файлов экспорта</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvDelOldFiles - Признак необходимости удаления устаревших файлов</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvDelPeriod - Период хранения файлов экспорта в днях.</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span><font color="#800080">$gvDelOldFiles</font></span><span> </span><span><font color="#ff0000">=</font></span><span> </span><span><font color="#800080">$True</font></span></font><span></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span><font color="#800080">$gvDelPeriod</font></span><span> </span><span><font color="#ff0000">=</font></span><span> 10</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок экспорта конфигураций всех обнаруженных массивов TMG</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><font color="#800080">$vFPC</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">New-Object</font></span></b><span lang="EN-US"> </span><i><span lang="EN-US"><font color="#5f9ea0">-comObject</font></span></i><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">FPC.root</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><font color="#800080">$vArrays</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vFPC</font></span><span lang="EN-US">.Arrays</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><font color="#0000ff">Foreach</font></span><span lang="EN-US"> (</span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#0000ff">in</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vArrays</font></span><span lang="EN-US">)</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font size="2" face="Courier New">{</font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Find array:&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.Name</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vDate</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">Get-Date</font></span></b><span lang="EN-US"><span> </span></span><i><span lang="EN-US"><font color="#5f9ea0">-uformat</font></span></i><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;%Y_%m_%d_%H_%M_%S&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160; </span><span>&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vFName</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.Name </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;_&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vDate</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;.xml&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vFPath</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$gvExportDir</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vFName</font></span><span lang="EN-US"> </span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vComment</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Exported by PowerShell&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Export configuration for array:&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.Name</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Path:&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vFPath</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.ExportToFile(</span><span lang="EN-US"><font color="#800080">$vFPath</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$gvExportOptData</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$gvPassword</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$vComment</font></span><span lang="EN-US">)</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#0000ff">If</font></span><span lang="EN-US"> (</span><span lang="EN-US"><font color="#800080">$Error</font></span><span lang="EN-US">){</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160; </span><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Export failed, send e-mail to Administrators...&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vEmailSubj</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Error exporting TMG Configuration&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160; </span><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vEmailBody</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#000000' size='2'&gt;Error exporting configuration for array: &lt;/font&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#0000A0' size='2'&gt;&lt;strong&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.Name </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&lt;/strong&gt;&lt;/font&gt;&lt;/br&gt;&lt;/br&gt;&quot;</font></span><span lang="EN-US"><span>&#160; </span></span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#000000' size='2'&gt;File for exporting: &lt;/font&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#A52A2A' size='2'&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vFPath</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&lt;/font&gt;&lt;/br&gt;&lt;/br&gt;&quot;</font></span><span lang="EN-US"><span>&#160; </span></span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#000000' size='2'&gt;Error data: &lt;/font&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#800000' size='2'&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$Error</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&lt;/font&gt;&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font size="2"><span>&#160;&#160;&#160;&#160;&#160;&#160; </span><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vSMTP</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">New-Object</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">Net.Mail.SMTPClient</font></span><span lang="EN-US">(</span><span lang="EN-US"><font color="#800080">$gvSMTPServer</font></span><span lang="EN-US">)</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vMsg</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">New-Object</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">Net.Mail.MailMessage</font></span><span lang="EN-US">(</span><span lang="EN-US"><font color="#800080">$gvEmailFrom</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$gvEmailTo</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$vEmailSubj</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$vEmailBody</font></span><span lang="EN-US">)</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vMsg</font></span><span lang="EN-US">.IsBodyHTML </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$True</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vSMTP</font></span><span lang="EN-US">.Send(</span><span lang="EN-US"><font color="#800080">$vMsg</font></span><span lang="EN-US">)<span>&#160;&#160;&#160; </span></span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font size="2"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>}</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#0000ff">Else</font></span><span lang="EN-US">{</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Export Succeeded&quot;</font></span><span lang="EN-US">} </span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font size="2" face="Courier New">}</font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок удаления устаревших экспортных файлов</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><font color="#0000ff">If</font></span><span lang="EN-US"> (</span><span lang="EN-US"><font color="#800080">$gvDelOldFiles</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$True</font></span><span lang="EN-US">) </span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font size="2" face="Courier New">{</font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#0000ff">Filter</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#5f9ea0">Get-OldFiles</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font size="2"><span>&#160;&#160;&#160; </span>{</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#0000ff">if</font></span><span lang="EN-US">(([</span><span lang="EN-US"><font color="#008080">DateTime</font></span><span lang="EN-US">]::</span><span lang="EN-US"><font color="#8b4513">Now</font></span><span lang="EN-US">.</span><span lang="EN-US"><font color="#8b4513">Subtract</font></span><span lang="EN-US">(</span><span lang="EN-US"><font color="#800080">$_</font></span><span lang="EN-US">.CreationTime)).Days </span><span lang="EN-US"><font color="#ff0000">-gt</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$gvDelPeriod</font></span><span lang="EN-US">) </span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>{</span><span lang="EN-US"><font color="#0000ff">return</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$_</font></span><span lang="EN-US"> }</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font size="2"><span>&#160;&#160;&#160; </span>}</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">dir</font></span></b><span lang="EN-US"> </span><i><span lang="EN-US"><font color="#5f9ea0">-path</font></span></i><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$gvExportDir</font></span><span lang="EN-US"> | Get-OldFiles -Period </span><span lang="EN-US"><font color="#800080">$gvDelPeriod</font></span><span lang="EN-US"> | </span><b><span lang="EN-US"><font color="#5f9ea0">Remove-Item</font></span></b><span lang="EN-US"> </span><i><span lang="EN-US"><font color="#5f9ea0">-force</font></span></i></font><span lang="EN-US"></span></font></p>      <p style="margin:0 0 10pt;" class="MsoNormal"><span style="line-height:12pt;"><font size="2" face="Courier New">}</font></span></p>   </blockquote>    <p><font size="2">На сервере TMG в планировщике задач создана задача, которая через определённые интервалы времени запускает PowerShell и выполняет данный скрипт.</font></p>    <p><font size="2">Триггер</font> выполнения при желании можно сделать не на периодической основе а например привязать к событию перезапуска служб TMG и таким образом получить автоматическое сохранение резервной копии конфигурации после каждого её более или менее серьёзного изменения.</p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image35.png"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb35.png" width="544" height="405" /></a><font size="2"></font></p>    <p>&#160;</p>    <p>В моём примере данная задача выполняется от имени системы с высоким уровнем привилегий</p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image36.png"><u></u><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb36.png" width="544" height="220" /></a><font size="2"></font></p>    <p><font size="2">И в силу того что попытка записи создаваемого файла экспортированной конфигурации будет выполняться в контексте SYSTEM сервера TMG, на файловом сервере в свойствах соответствующего сетевого каталога нужно выставить разрешения для учетной записи компьютера – сервера TMG</font></p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image37.png"><font size="2"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb37.png" width="372" height="320" /></font></a></p>    <p><font size="2">Ну и разумеется нужно не забыть добавить данное разрешение на уровне NTFS</font></p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image38.png"><font size="2"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb38.png" width="374" height="418" /></font></a></p>    <p>После этого, настроенное нами задание должно заработать и дать желаемый результат.</p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image39.png"><font size="2"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb39.png" width="550" height="110" /></font></a></p>    <p><font size="2">Источники информации:</font></p>    <ul>     <li><a href="https://msdn.microsoft.com/en-us/library/ff825679(v=vs.85).aspx"><font size="2">MSDN Library &gt; COM Objects &gt; FPC &gt; ExportToFile Method</font></a></li>      <li><a href="http://msdn.microsoft.com/en-us/library/dd435786.aspx"><font size="2">MSDN Library - Exporting and Importing a Forefront TMG Configuration</font></a></li>      <li><a href="http://social.technet.microsoft.com/Forums/en-US/Forefrontedgegeneral/thread/f42ae1ba-2db5-4319-9b65-22a25201088a/"><font size="2">Microsoft Forefront TechCenter Forums - powershell scripting for Forefront TMG</font></a></li>      <li><a href="http://www.ldap389.info/en/2012/01/04/powershell-export-firewall-rules-on-your-tmg-servers/"><font size="2">ldap389 AD Blog - Powershell: Export firewall rules on your TMG servers</font></a></li>   </ul>    <li><a href="http://fixmyitsystem.com/2012/01/tmg-configuration-backup-automation_13.html">Blog FixMyITSystem - TMG configuration backup automation - Part II</a></li> </font>
    
  • TMG 2010 - Локализация и кастомизация сообщений об ошибках

    imageОдним из улучшений недавно вышедшего Service Pack 2 для Forefront TMG 2010 стало появление нового механизма управления страницами сообщений об ошибках. Конечно и до установки SP2 можно было кастомизировать страницы сообщений об ошибках, которые находились в подкаталоге .\ErrorHtmls каталога установки TMG (путь по умолчанию C:\Program Files\Microsoft Forefront Threat Management Gateway). Но ранее могли возникнуть определённые сложности, если вы, желая придать этим веб-страницам корпоративный стиль, например, пытались вставить в эти страницы какие-то графические элементы. В обновлённой версии TMG в каталоге установки появляется подкаталог .Templates\WebObjectsTemplates\ISA в котором можно найти страницы ошибок в формате htm и подкаталог HTML который подразумевается использовать для хранения графических элементов.

    Читать далее...

  • TMG 2010 - Установка Service Pack 2 в массиве NLB

    imageРассмотрим пример установки последнего пакета обновлений и исправлений Service Pack 2 для Forefront TMG 2010 в конфигурации с двумя серверами находящимися в отдельном массиве TMG (Standalone Array) и объединёнными в NLB-кластер.

    Список обновлений и исправлений вошедших в состав пакета можно найти по ссылке: KB2555840 - Microsoft Forefront Threat Management Gateway 2010 Service Pack 2

    Загрузить сам пакет: Microsoft Download Center -  Forefront TMG 2010 Service Pack 2

    В нашем случае нам понадобиться файл TMG-KB2555840-amd64-ENU.exe, который после установки изменит версию TMG с 7.0.9027.441 до 7.0.9193.500

    Версия 7.0.9027.441 соответствует Forefront TMG 2010 SP1 с установленным обновлением Software update 1 и является необходимым минимумом для установки Service Pack 2.

    В инструкции по установке Service Pack обозначен следующий обязательный порядок обновления серверов являющихся членами массива:

    1) Enterprise Management Servers (master and replicas);
    2)
    Array managers;
    3)
    Array members.

    В нашем примере массив является отдельным и не использует EMS и поэтому сначала мы должны обновить управляющий сервер массива (Array Manager) а затем остальные управляемые сервера – члены массива (Array Managed). Для того чтобы посмотреть текущие роли серверов в консоли Forefront TMG Management выберем ветку System > закладка Servers

     

    image

     

    В нашем случае управляющим сервером массива является сервер KOM-AD01-TMG01 и поэтому процесс установки SP2 мы должны начать на нём в первую очередь.

    Также следует обратить внимание на то, что в инструкции по установке Service Pack есть ещё одно требование, которое говорит о том, что первым в массиве должен обновляться сервер отчетности (Report Server). Чтобы определить какой сервер отвечает в нашем массиве за данную роль и при необходимости переопределить его, – в консоли выберем ветку Log & Reports и на закладке Reporting выберем задачу Configure Reporting Settings

     

    image

     

    Перед началом процедуры установки важно выполнить резервное копирование конфигурации массива и отдельных его членов. Сделать это с помощью задачи консоли Export (Back up) в корне дерева консоли

     

    image

     

    Выполнить операцию экспорта настроек необходимо отдельно на каждом сервере – члене массива. Также неплохо иметь традицию отдельного документирования всех выполненных настроек серверов TMG. Дополнительную информацию о резервном копировании и восстановлении конфигурации TMG можно найти в статье Microsoft Forefront TechCenter - Backing up and restoring the Forefront TMG configuration

    Есть еще одно предварительное требование, которое может показаться странным, но тем не менее оно есть в документации и про него не стоит забывать. Для того чтобы процесс обновления Forefront TMG Enterprise Edition (EMS) прошёл успешно, его необходимо выполнять из под учетной записи того пользователя, который производил развертывание сервера EMS.

    Итак, общий процесс обновления всего массива в нашем случае будет так:

    1) На сервере Array Manager (KOM-AD01-TMG01)

    • Останавливаем службу NLB (Drain and Stop)
    • Блокируем службу NLB (Suspend)
    • Устанавливаем SP2. При необходимости перезагружаем сервер.
    • Восстанавливаем состояние службы NLB (Resume)
    • Запускаем службу NLB (Start)

    2) Повторяем указанные действия на всех остальных серверах - членах массива (Array Managed).

    Поехали…

    Открываем консоль TMG на сервере управления, в ветке Monitoring на закладке Services выбираем службу Network Load Balancing для обновляемого сервера (KOM-AD01-TMG01) и выполняем задачу Drain and stop

     

    image

     

    После этого обновляемый сервер перестанет принимать клиентские подключения и немного подождав выполняем для этой же службы задачу Suspend, то есть переводим службу в такое состояние, при котором наш сервер не будет участвовать в обслуживании клиентских подключений даже после перезагрузки.

    Дожидаемся пока статус службы не изменится на соответствующий:

     

    image

     

    После этого закрываем консоль TMG и из под прав Администратора запускаем инсталлятор пакета обновлений. При запуске инсталлятор определит сервер управления конфигурацией массива

     

    image

     

    Далее, вы можете получить от инсталлятора сообщение о том что какие-то процессы в системе используют файлы которые требуется обновить. И такие процессы для успешного окончания установки желательно завершить.

     

    image

     

    В моём случае таким процессом оказался MonitoringHost.exe. Это один их процессов агента SCOM запускаемых службой System Center Management (HealthService). И поэтому перед продолжением установки обновления я зашёл в оснастку управления службами (services.msc) и остановил соответствующую службу, что привело к закрытию указанно процесса.

     

    image

     

    Дожидаемся успешного окончания процесса установки.

     

    image

     

    После окончания установки не забываем обратно запустить службу агента SCOM.

     

    image

     

    Открываем обновлённую консоль TMG и в ветке System > закладка Servers проверяем версию обновлённого члена массива.

     

    image

     

    Обратите внимание на то, что после обновления управляемого сервера в консоли появляется предупреждение о том, что в нашем массиве есть не обновлённые члены.

    Переходим в консоли на ветку Monitoring и на закладке Services выбираем службу Network Load Balancing для уже обновлённого сервера (KOM-AD01-TMG01) и выполняем задачу восстановления службы Resume

     

    image

     

     

     

    В своём случае я обратил внимание на то, что операция Resume поменяла статус состояния службы на Stopped только со второй попытки.

     

    image

     

    Теперь запускаем службу задачей Start и ждём пока статус не измениться на Running. После этого удостоверимся в том, что все другие службы на обновлённом сервере находятся в запущенном состоянии и теперь можно приступать к обновлению второго сервера, являющегося рядовым управляемым членом массива. Для этого сразу выполним задачи Drain and stop и затем Suspend для его службы NLB.

     

    image

     

     

    После этого войдём на второй сервер и в оснастке управления службами остановим службу System Center Management  чтобы избежать предупреждений инсталлятора.

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

     

    image

     

    Не забываем на втором сервере восстановить состояние службы агента SCOM а консоли TMG восстановить состояние службы NLB для обновлённого сервера

     

    image

     

    Затем запускаем службу NLB.

     

    image

     

    На этом общий процесс обновления массива можно считать законченным. А для того, чтобы убедиться в том, что все службы TMG на обоих обновлённых серверах самостоятельно адекватно стартуют при запуске системы, - можно по очереди перезагрузить оба сервера, если этого не делалось в процессе установки.

    Несмотря на то, что установка SP2 доступна и через клиента WSUS, я предпочёл мануальный способ инсталляции, так как он на мой взгляд является более осязаемым и в случае возможных проблем даёт понять на каком этапе процесса установки возникают эти проблемы.

    Источники информации:

  • Forefront TMG 2010 – Разрешение нестандартных туннелируемых портов

    Возникла необходимость использовать через TMG 2010 подключение к HTTPS узлу в интернете, использующему нестандартный порт (не 443). В настройке по умолчанию вэб-прокси TMG разрешает доступ только по порту 443. Для того чтобы изменить перечень разрешенных портов воспользуемся подключением к COM-объекту TMG с помощью PowerShell.

    Для того чтобы получить текущий список открытых туннелируемых портов, непосредственно на TMG сервере выполним PS скрипт:

    $ServerName = "MY-PROXY-SERVER"

    $FPCRoot = New-Object -comObject "FPC.Root"

    $TMGObj = $FPCRoot.Arrays.Connect($ServerName)

    $TMGObj.ArrayPolicy.WebProxy.TunnelPortRanges

    В первой строчке в переменной $ServerName укажите имя своего сервера TMG или имя массива TMG, если сервер является членом массива.


    Для того чтобы расширить список открытых туннелируемых портов, например 444 портом, выполним PS скрипт:

    $ServerName = "MY-PROXY-SERVER"

    $FPCRoot = New-Object -comObject "FPC.Root"

    $TMGObj = $FPCRoot.Arrays.Connect($ServerName)

    $TMGObj.ArrayPolicy.WebProxy.TunnelPortRanges.AddRange("SSL 444", 444, 444)

    $TMGObj.ApplyChanges()


    Для того чтобы удалить ранее добавленный порт выполним PS скрипт:

    $ServerName = "MY-PROXY-SERVER"

    $FPCRoot = New-Object -comObject "FPC.Root"

    $TMGObj = $FPCRoot.Arrays.Connect($ServerName)

    $TMGObj.ArrayPolicy.WebProxy.TunnelPortRanges.Remove("SSL 444")

    $TMGObj.ApplyChanges()

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

  • Forefront TMG 2010 - Отказ работы консоли после установки IE9

    После установки рекомендуемых обновлений с WSUS, которые включают в себя новую версию браузера IE9 может перестать корректно работать консоль управления Forefront TMG 2010 на базе MMC - Forefront TMG Management. При попытке перехода к любому разделу управления TMG консоль будет порождать ошибку типа:

    image

    Есть жёсткий метод решения проблемы – редактирование файла C:Program FilesMicrosoft Forefront Threat Management GatewayUI_HTMLsTabsHandlerTabsHandler.htc как это описано например здесь: Технический блог Евгения Протопопова - TMG 2010 Console Error

    Но можно избавиться от этой ошибки и более простым способом – изменением региональных настроек ОС. Открываем апплет изменения региональных настроек intl.cpl и на вкладке Formats сменить Format на English (United States)

    image

    После этого консоль заработает и можно будет спокойно дождаться выхода обновления исправляющего эту проблему и после его установки вернуть региональные настройки назад.