Транспортные агенты

OSzone.net » Microsoft » Exchange Server » Exchange Server 2007 » Транспортные агенты
Автор: Андерсен Патрисио (Anderson Patricio)
Иcточник: MSexchange.ru
Опубликована: 25.09.2007

Транспортный агент (Transport Agent) играет важнейшую роль в безопасности и чистоте регуляции сообщений в Exchange Server 2007. Его действия распространяются на уровне центральной и граничной транспортировки.

Транспортная архитектура Exchange Server 2007 сделана таким образом, что весь поток сообщений, проходящих через сервер, может быть обработан транспортными агентами(transport agents). Агенты используют Application Programming Interface (API, интерфейс программирования приложений, или другими словами набор готовых функций, который могут использовать разработчики), что интересно – точно такое же набор функций использован Microsoft, чтобы создать стандартизированного транспортного агента, который поставляется вместе с Exchange 2007.

SMTP события

SMTP Event(SMTP события), которые применялись в Exchange Server 2003, показали свою несостоятельность, поэтому Вы не найдете их в новой версии Exchange 2007, где используется совершенно новый протокол SMTP и способ транспортировки.

Как было сказано выше, теперь используются транспортные агенты. Как только сообщение приходит на сервер, его перенаправляют через транспортную сеть SMTP(рисунок 1), при этом каждое SMTP событие может иметь транспортных агентов, которые имеют доступ к сообщению и могут производить некоторые действия.

Рисунок 1: SMTP события. Процесс исполнения слева направо

Рисунок 1: SMTP события. Процесс исполнения слева направо

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

Таблица 1 Очередность SMTP событие Происходит при
1 OnConnectEvent От удаленного хоста посылается сигнал на установление соединения
2 OnHeloCommand Исходит команда HELO SMTP
3 OnEhloCommand Исходит команда EHLO SMTP
4 OnAuthCommand Исходит команда AUTH SMTP
5 OnEndOfAuthentication Полная аутентификация завершена
6 OnMailCommand Исходит команда MAIL FROM SMTP
7 OnRcptCommand Исходит команда RCPT TO SMTP
8 OnDataCommand Исходит команда DATA SMTP
9 OnEndOfHeaders Заголовки сообщений были полностью утверждены
10 OnEndOfData Удаленный сервер посылает <CRLF>.<CRLF>, что означает конец потока данных
** OnHelpCommand Действие помощи может быть вызвано в любой момент после OnConnectEvent и до OnDisconnectEvent SMTP события
** OnNoopCommand Команда пустого действия может быть вызвана в любой момент после OnConnectEvent и до OnDisconnectEvent SMTP события
** OnReject Получающий хост посылает код уведомления на посылающий SMTP хост. Событие может быть вызвано в любой момент после OnConnectEvent и до OnDisconnectEvent SMTP события.
** OnRsetCommand Событие включается в работу после посылки действия RSET SMTP активным(в данный момент производит отправку) SMTP хостом. Событие может быть вызвано в любой момент после OnConnectEvent и до OnDisconnectEvent SMTP события.
11 OnDisconnectEvent Событие включается после отсоединения либо от посылающего, либо от принимающего хоста
12 OnSubmittedMessage Событие включается сразу после попадания сообщения в очередь Submission. Все сообщения вызывают это событие назависимо от того пришли ли они через SMTP, MAPI или директорий Pickup(Replay).
13 OnRoutedMessage После распределения всех сообщений по категориями, завершения записи листов распределения и получения ответа со стороны получателя

Таблицу, находящуюся выше, можно найти в документации по Exchange 2007 или на сайте TechNet (http://technet.microsoft.com/en-us/library/aa996847.aspx).

Транспортные агенты и их роль в передаче

Транспортные агенты, которые встроены в сервис передачи, могут быть полезны лишь там, где этот сервис вообще доступен – крайней и центральной транспортных системах. Каждый транспортный агент будет сопоставлен с другими в соответствии с его ролью, приоритетом и SMTP событиями, которые его вызывают. Эти стандартные агенты были также разработаны с использованием API, который может свободно применяться любым программистом.

Роль центральной передачи(2 транспортных агента)

Таблица 2 Имя агента Приоритет SMTP события
Transport Rule agent(агент, управляющий передачей) 1 OnRoutedMessage
Journaling agent(агент, делающий заметки в журнале) 2 OnSubmittedMessage, OnRoutedMessage

Важной особенностью центральной передачи является то, что стандартные транспортные агенты могут быть обнаружены на уровне категоризации(на нем происходит определение категории объекта) после их вызова событием(показано на рисунке 2).

Рисунок 2: Транспортные агенты, управляющие при центральной передаче

Рисунок 2: Транспортные агенты, управляющие при центральной передаче

Роль системы крайней передачи(10 транспортных агентов):

Таблица 3 Имя агента Приоритет SMTP события
Connection Filtering agent(фильтрация соединений) 1 OnConnectEvent, OnMailCommand, OnRcptComand, OnEndOfHeaders
Address Rewriting Inbound agent(перезапись входящих адресов) 2 OnRcptCommand, OnEndOfHeaders
Edge Rule agent(управляющий краевыми функциями) 3 OnEndOfData
Content Filter agent(фильтрующий содержимое) 4 OnEndOfData
Sender ID agent(посылающий идентификационный номер) 5 OnEndOfHeaders
Sender Filter agent(фильтрующий отправляемое) 6 OnMailCommand, OnEndOfHeaders
Recipient Filter agent(фильтрующий получаемое) 7 OnRcptCommand
Protocol Analysis agent(анализатор протокола) 8 OnEndOfHeaders, OnEndOfData, OnReject, OnRsetCommand, OnDisconnectEvent
Attachment Filtering agent(фильтрующий вложенное) 9 OnEndOfData
Address Rewriting Outbound agent(перезаписывающий исходящие адреса) 10 OnRcptCommand, OnEndOfHeaders

Вы видите правила краевой(граничной) передачи на рисунке 3. Каждый транспортный агент использует специальное SMTP событие.(рис 3)

Рисунок 3: Транспортные агенты и SMTP события на уровне граничной передачи

Рисунок 3: Транспортные агенты и SMTP события на уровне граничной передачи

Замечание. Чтобы увидеть полную картину транспортной(как центральной, так и краевой) архитектуры, можно скачать pdf файлы в секции «дополнительная информация»(More Information)

Установка антиспам-агентов в центральной системе передачи

У нас есть прекрасный пример, который показывает всю пользу транспортных агентов – один компьютер, выполняющий сразу 3 действия(Почтовый ящик, центральная передача и допуск клиента к ресурсам). Эта машина ответственна за весь интернет трафик. В таком случае транспортные агенты будут ответственны за все процессы «чистки» (антиспам, фильтр содержимого и т.д.), здесь их польза бесспорна.

Несмотря на то, что изначально существует лишь 2 транспортных агента(в центральной передаче), использование скрипта Install-AntiSpamAgents.ps1 позволит создать дополнительных, таких как Connection Filtering, Content Filtering, Sender ID, Sender Filter, RecipientFilter и Protocol Analysis(о них было подробнее написано выше). Если не производить установку дополнительно, то их можно найти лишь в системе граничной передачи.(Edge Transport).

Для установки антиспам-агентов необходимо провести следующие операции:

Рисунок 4: Установка антиспам-агентов на уровне центральной транспортной передачи

Рисунок 4: Установка антиспам-агентов на уровне центральной транспортной передачи

После установки перезапускаем сервис Exchange Transport, чтобы новые транспортные агенты вступили в действие, появится новая вкладка в консоли управления(при раскрытии слева Organization Configuration, рис 5) Теперь новые агенты запускаются в качестве транспортных и работают на прием, а старые два продолжают работать на уровне категоризации(Categorizer).

Рисунок 5: Новая вкладка Анти-спам на уровне центральной транспортной передачи

Рисунок 5: Новая вкладка Анти-спам на уровне центральной транспортной передачи



Управление

Мы имеем возможность просматривать, включать, выключать и менять приоритет транспортных агентов.

Чтобы понять как вывести весь список используемых на сервере агентов достаточно взглянуть на рисунок 6.

Рисунок 6: Вывод на экран транспортных агентов

Рисунок 6: Вывод на экран транспортных агентов

Можно увидеть больше информации о агентах, если после команды Get-TransportAgent использовать “| fl” (рисунок 7). Это позволит вывести такую информацию как TransportAgentFactory(«фабрика» агента) и DLL-файл, используемый агентом.

Рисунок 7: Дополнительная информация об установленных транспортных агентах

Рисунок 7: Дополнительная информация об установленных транспортных агентах

Чтобы отключить агента, достаточно использовать команду Disable-TransportAgent, как показано на рисунке 8. При отключении, само собой, придется подтвердить наше решение, написав букву Y в ответе на вопрос.

Рисунок 8: Отключение агента

Рисунок 8: Отключение агента

Чтобы включить агента, пользуемся командой Enable-TransportAgent(рисунок 9). Обратите внимание на включенную колонну до и после команды.

Рисунок 9: Включение агента

Рисунок 9: Включение агента

Другой важной особенностью является приоритет агентов. Можно менять приоритет, используя команду Set-TransportAgent, как показано на рисунке 10. Обратите внимание на приоритет до и после изменения.

Рисунок 10: Изменение приоритета транспортных агентов

Рисунок 10: Изменение приоритета транспортных агентов

Можно установить приоритет как для уже существующих, так и для новых транспортных агентов, даже если они созданы другими приложениями. Приоритет показывает и используется для контроля за тем, какой из агентов будет действовать на сообщение первых. Чем ниже число приоритета, тем раньше его действие распространиться на сообщение(по сравнению с большим числом). Приоритеты используются в том случае, если несколько транспортных агентов используют одно и то же SMTP событие. Если эти события различны, то мы вынуждены следовать порядку следования SMTP событий, а не приоритету.

К примеру: если агент с 1 приоритетом использует SMTP событие под названием OnEndOfData, а агент с приоритетом 2 использует SMTP событие OnConnect, то агент, использующий событие OnConnect вступит в работу раньше другого только лишь потому, что в последовательности событий OnConnect идет раньше OnEndOfData.

И наконец, мы можем увидеть последовательность SMTP событий. Пишем команду Get-TransportPipeline(рисунок 11).

Рисунок 11: SMTP события и агенты, связанные с ними

Рисунок 11: SMTP события и агенты, связанные с ними

Решение проблем с транспортными агентами.

Иногда нам нужно убедиться в том, что агенты выполняют свою работу, для этого мы можем использовать функцию отслеживания(трассировки) процесса (Pipeline tracing feature), чтобы получить точную картину того, что было до, и что стало после воздействия агента. Каждый шаг процесса находится в специальной директории, связанной с решением проблем.

Чтобы проверить полезность трассировки, мы создадим транспортное правило на крайнем уровне, которое добавляет текст в поле. Затем мы воспользуемся функцией трассировки, чтобы отследить отправителя xx@xx.com.br , таким образом мы сможем определить процессы транспортного агента в сообщениях, посланных от xx@xx.com.br.

Для начала трассировки используем следующую команду:

Set-TransportServer <server> -PipelineTracingEnabled:$true –PipelineTracingSenderAddress <smtp address or X500 address>

Где:

PipelineTracingEnabled: Включаем трассировку «трубы».

PipelinetracingSenderAddress: для пользователей схожего сайта используем либо x500 адрес, либо SMTP, а для внешних – SMTP адрес.

На рисунке 12 можем видеть исполнение команды «начать трассировку». По умолчанию файлы трассировки создаются в <Exchange Server directory installation>\TransportRoles\Logs\Pipeline Tracing\MessageSnapshots\<ID>\

Рисунок 12: Включаем трассировку для посылающего xx@xx.com.br

Рисунок 12: Включаем трассировку для посылающего xx@xx.com.br

В упомянутой выше директории можно увидеть снимки одиночных сообщений с включенной трассировкой(рисунок 13). Каждый файл имеет информацию о транспортных агентах.

Рисунок 13: Директория, куда сохраняется трассировка

Рисунок 13: Директория, куда сохраняется трассировка

Если открыть любое сообщение в этой директории при помощи Блокнота, то в заголовке увидим то, что называется X-Message-Snapshot-source (действующий в данный момент источник изменения сообщения X), который показывает какое SMTP событие используется и какой агент будет действовать(или действует, это же «покадровый» просмотр) на сообщение.Рисунок 14:Можно увидеть, что сообщение отправлено внутреннему пользователю от xx@xx.com.br, при этом на уровне краевой передаче при событии OnEndOfData было воздействие со стороны транспортного агента(Edge Rule Agent, агент, устанавливающий правила при краевой передаче).

Рисунок 14: SMTP событие и агент показаны во время трассировки

Рисунок 14: SMTP событие и агент показаны во время трассировки

После проверки агентов рекомендуется отключать трассировку, как показано на рисунке 15.

Рисунок 15: Отключение трассировки, используя команду Set-TransportServer

Рисунок 15: Отключение трассировки, используя команду Set-TransportServer

Замечания по поводу трассировки:

Можно ли создать своего транспортного агента?

Да, сделать это просто. Рекомендуем использовать Microsoft Visual Studio .NET 2005 для таких целей. На сайте MSDN можно найти образец http://msdn2.microsoft.com/en-us/library/aa579185.aspx.

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

Установка, удаление и включение вашего собственного агента

После создания агента нужно закомпилировать его в DLL (dynamic link-library). После создания DLL его необходимо установить на сервер, для которого он предназначался.Делаем таким образом:

  1. Набираем команду Install-TransportAgent
    Install-TransportAgent –Name <Name> –TransportAgentFactory “MyAgents.MyAgentFactory” –AssemblyPath <path>

    Замечание: Нельзя использовать путь UNC в строке AsseblyPath

  2. Запускаем агента:
    Enable-TransportAgent –Name “SampleAgent”
  3. Для удаления ранее установленных агентов:
    Uninstall-TransportAgent “SampleAgent”

Заключение

В этой статье было рассказано о управлении и решении проблем с транспортными агентами. В скором будущем они будут использоваться разными программами(антивирусы, программы создающие отчеты и другие), чтобы расширить функциональность Exchange Server 2007(Нововведения будут производиться сторонними разработчиками).

Дополнительная информация:

Developing Transport Agents


Ссылка: http://www.oszone.net/5654/