DKIM подпись в MS Exchange

Доброго времени суток, Хабр!

Часто появляется проблема, когда письмо с вашего нового или малоиспользуемого домена первоначально получает метку «спам» или «нежелательная почта», и падает в соответствующую папку, где его просто не замечают. И речь идет не о рассылках, а о деловых и не очень письмах, но отправленных людьми. С такой проблемой столкнулся я.

Поиск показал, что наша конфигурация не включает в себя использование DKIM подписи, необходимость которой начинает подниматься на обязательный уровень. Но загвоздка была в том, что в качестве MTA используется MS Exchange Edge в связке c Forefront Protection, который не умеет работать с DKIM, а установка впереди другого MTA, например postfix, сулило отказом от Forefront DNS-BL, перенастройкой SSL/TLS, и дальнейшим усложнением конфигурации. И да простят меня, но, как Windows админу, мне заниматься всем этим очень не хотелось.

Начались поиски других решений, т.к. Microsoft свято верит в достаточность SPF-записи, то даже в 2013 редакции Exchange поддержки DKIM подписи нет, и в будущих дополнениях не планируется. Поначалу были найдены только платные DkimX и EmailArchitect, но далее наткнулся на бесплатный модуль Exchange DKIM Signer от Stefan “Pro” Profanter, про его использование и пойдет речь.

DKIM

Описаний принципов DKIM и его настройки превеликое множество, если вы с этим незнакомы, то пожалуйста прочитайте следующие статьи, в них наглядно и доступно все описано: DKIM — это просто, Больше нет писем в папке Spam: настройка SMTP-сервера.

Exchange DKIM Signer

Он представляет из себя Transport Agent, внутренний обработчик писем. В Exchange их множество, например у нас этот стал 14, каждый занимается своей частью работы, проверкой на спам, фильтр вложений или изменением заголовков, письмо проходит их последовательно. Поэтому агента DKIM подписи необходимо размещать в самом конце, когда письмо уже более не должно меняться.

Если используется Exchange 2007sp3-2010sp3, то последнюю версию можно скачать здесь, для Exchange 2013 используется версия 2.0 Агента, которая имеет GUI для установки, поэтому вопросов возникнуть не должно, ссылки на online/offline установщики можно найти здесь.

Установка на примере Exchange 2010 SP3

Операцию необходимо производить на всех серверах имеющих роль внешнего транспорта.

Нам понадобится (все это описано в статьях по ссылкам в разделе DKIM, выше):
— пара ключей (открытый и закрытый), рекомендую использовать openssl, а не сторонние онлайн сервисы,
— произвести необходимые записи в DNS

Теперь сам агент, располагаем его в любой папке, установка осуществляется через Exchange Management Shell:
1. Переходим в папку с агентом (пусть будет cd c:\dkim),
2. Вводим команду "Set-ExecutionPolicy Unrestricted", этим мы разрешаем выполнение внешних скриптов,
3. Запускаем скрипт установки ".\install.ps1" (Внимание, в процессе будет остановлена служба транспорта Exchange),
4. Далее нам предлагает сразу изменить конфигурацию, по умолчанию конфиг находится в «C:\Program Files\Exchange DkimSigner», открываем его текстовым редактором и исправляем это место:

/>
/>
/>

Тут описано 3 правила для примера, где Domain= — домен, ключем от которого производится подпись, Selector= — селектор, где находится открытый ключ, PrivateKeyFile= — где путь до закрытого ключа (относительный или абсолютный), RecipientRule= и SenderRule= — фильтры отправителей или получателей по регулярным выражениям, определяют письма, которые необходимо подписывать данным ключем.
Достаточно оставить только 1 строку и внести в нее свои данные, тогда будут подписываться все исходящие письма.


5. Жмем Enter и видим сообщение об окончании установки, сервисы транспорта должны запуститься. Проверяем журнал событий на предмет возможных ошибок, в разделе «Приложения» Агент оставляет записи от имени «Exchange DKIM»,
6. А так же проверяем листинг Транспортных агентов по команде "Get-TransportAgent", Exchange DkimSigner должен быть на последнем месте, если нет, то меняем его приоритет командой "Set-TransportAgent -Identity «Exchange DkimSigner» -Priority N", где N – номер последнего агента в списке.
7. Командой "Set-ExecutionPolicy Restricted" возвращаем политику исполнения внешних скриптов по умолчанию.

Теперь можно попробовать отправить письмо на адрес любого из почтовых-провайдеров, и убедиться, что в служебной информации должно появиться заветное "dkim=pass", если такого не произошло, то проверьте правильность заполнения конфига Агента, а так же записей в DNS.

Отключение и удаление агента

Временно отключить или удалить агента можно командами:
1. Останавливаем службу транспорта «Net Stop MSExchangeTransport»,
2. Отключаем агента Disable-TransportAgent -Identity «Exchange DkimSigner»,
3. При необходимости удаляем его привязку «Uninstall-TransportAgent -Identity «Exchange DkimSigner»»,
4. Запускаем транспорт обратно «Net Start MSExchangeTransport».
5. Удаляем файлы
Так же для удаления можно воспользоваться прилагаемым к установке скриптом ".\uninstall.ps1", его использование аналогично установке.

Заключение

Это бесплатный и простой способ добавления DKIM подписи в MS Exchange, более подробную информацию и описание, на английском языке, можно найти в документации из комплекта установки. Надеюсь статья окажется полезной тем, кто озадачится этим вопросом.
  • +5
  • 25.4k
  • 5
Share post

Comments 5

    0
    Вау. Спасибо. Неужели всё так просто?
    Затарюсь пивком, сделаю снапшот ексча и попробую накатить.
      0
      Спасибо, долго не решался трогать связку TMG + Edge Transport + Forefront for Exchange и тут перед выходными такой шанс наконец-то добраться до реализации DKIM!
        0
        Попробовал использовать, очень долго отправляет письма весом более 5 MB, при этом процессор грузит более 50%
          0
          Как думаете, с чем связано?
            0
            Уже исправили, в версии 2.1.1 нормально отправляет.
            Changelog
            27.11.2014 [2.1.1]:
            New: GUI shows now full changelog, including previous versions
            Fix: Performance improvement for big attachments (#68)

        Only users with full accounts can post comments. Log in, please.