Реализация DKIM для Exchange Server 2013

imageПри построении современной почтовой системы нужно учитывать множество факторов, чтобы защитить получателей/отправителей почтовой системы от спамовых и фишинговых почтовых сообщений. Все мы хорошо знаем о Sender Policy Framework (SPF), который позволяет проверить не подделан ли домен отправителя почтового сообщения, но изощренность злоумышленников ставит перед нами новые задачи которые можно, а главное нужно решать с помощью стандартов DomainKeys Identified Mail (DKIM) и Domain-based Message Authentication, Reporting and Conformance (DMARC).

Для более глубокого понимая технологий советую просмотреть видео Дмитрия Разборнова DMARC, DKIM.

В этой же заметке мы подробно рассмотрим внедрение в реально работающую почтовую систему технологий DKIM и DMARC на базе почтовой системы Exchange Server 2013.

До недавнего времени в нашей компании использовалась схема исходящей почтовой корреспонденции Exchange Server 2013 –-> почтовый релей Exim 4.x (Linux Debian 7.x x64) –> интернет.  На почтовом релее был реализован агент DKIM, который успешно подписывал всю исходящую почту. К сожалению Exchange 2013 не имеет своего встроенного механизма, который может реализовывать подобное.

В свою очередь я пристально слежу за развитием проекта dkim-exchange, который очень бодро развивается и реализует поддержку DKIM в самых последних версиях Exchange.

При установке Exchange DKIM Signer на Exchange сервер устанавливается транспортный агент:

1
Единственной задачей этого агента является создание электронной цифровой подписи для письма, которое отправлено внешним получателям.

Таким образом мы решили отказаться от схемы с релеем и установить агента Exchange DKIM Signer непосредственно на Exchange сервер.

Установка агента Exchange DKIM Signer

1) Идем по ссылке и скачиваем файл Source Code (zip)

2

2) Распаковываем ZIP архив.

3) Открываем от имени администратора Exchange Management Shell  и переходим в распакованную папку.

4) Перед тем, как запустить PowerShell скрипт .\install.ps1, зададим политику выполнения PowerShell скриптов:

Set-ExecutionPolicy Unrestricted

5) Запускаем скрипт установки  .\install.ps1

20

Setup нам предлагает запустить Configuration.DkimSigner.exe, чтобы сконфигурировать агента, но мы не будем этого делать сейчас, нажимаем Enter. 

6) Теперь можно убедиться в том, что агент удачно установился в системе:

21

 

Конфигурирование агента Exchange DKIM Signer

1) Идем в папку “C:\Program Files\Exchange DkimSigner\”  и запускаем Configuration.DkimSigner.exe  и видим:

7
На скриншоте выше видно, что я использую не самую последнюю версию программы, произведем обновление после конфигурирования и проверки работоспособности агента. 

2) Нажимаем кнопку Configure:

8

Выбираем Exchange DkimSigner и понижаем приоритет до самого низкого. Это значит, что почтовое сообщение будет обрабатываться в последнюю очередь этим агентом, когда у письма будут окончательно сформированы все заголовки почтового сообщения, из документации:

Make sure that the priority of the DkimSigner Agent is quite low so that no other agent messes around with the headers. Best set it to lowest priority

3) Переходим на вкладку DKIM Settings и переключаем алгоритм хеширования на RsaSha256, Body Canonicalization, Header Canonicalization выставляем в Simple, из документации:

Possible values for HeaderCanonicalization and BodyCanonicalization are Simple (recommended) and Relaxed

Более подробно про параметры Body Canonicalization, Header Canonicalization можно прочитать в спецификации DKIM
 
На вкладке DKIM Settings так же можно настроить заголовки почтового сообщения, которые будут подписываться. Оставим все по умолчанию.

9
Не забываем нажать кнопку Save configuration.

4) Переходим на вкладку Domain Settings и удаляем домены по умолчанию example.com и example.org. Следующим шагом добавляем наш почтовый домен кнопкой Add и заполняем основные поля. Поле Domain Name  - это имя вашего почтового домена, например для адресов типа UserName@company.com это поле примет значение company.com

16

Поле Selector – это произвольная строка которая добавляется к имени домена. С помощью поля Selector правильно идентифицируется public key в TXT записи на DNS сервере:

51

Если взять наше значение из поля Selector и посмотреть на Email Headers, то мы увидим тег s= который имеет значение из поля Selector, тег d= имеет значение указывающие на наш почтовый домен. Таким образом сервер получатель понимает какой именно public key на нашем DNS сервере нужно проверять.

rsz_52 

Следующим шагом генерируем ключевую пару (public key и private key). Private key будет храниться строго на сервере, и с его помощью будет подписываться вся исходящая почта. Нажимаем кнопку Generate Key  и Exchange DKIM Signer предлагает нам сохранить *.xml файл в папку keys, что мы и делаем:

17
В итоге должно получиться три файла в папке keys для нашего почтового домена:

  • MailDomain.ru.xml
  • MailDomain.ru.xml.pub – файл содержит public key, в будущем мы разместим его в TXT-записи на нашем внешнем DNS сервере.
  • MailDomain.ru.xml.pem - файл содержит private key.

После сохранения *.xml файла не забываем нажать на кнопку Save Domain.

Далее Exchange Dkim Signer предлагает нам создать TXT-запись на внешнем DNS сервере который обслуживает наш почтовый домен: 

41
В панели хостинг провайдера вашего DNS сервера создаем TXT запись:
42

Обратите внимание на то, что запись публичного ключа разделена кавычками (стрелочка под номером два). Когда я впервые настраивал TXT запись на DNS сервере, то столкнулся с проблемой, что электронно-цифровая подпись письма не проходила проверку на принимающем почтовом сервере.

После нескольких попыток перенастройки самого агента и TXT-записи DNS сервера, было принято решение написать в тех.поддержку DNS хостинг провайдера. Ответ от тех.поддержки был таким:

Размер записи превышает 255 символов и поэтому не обрабатывается. Вам нужно разбить на несколько IN TXT:

recname IN  TXT "foobar" "baz" "blivit" "alpha" ... "zulu"

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

Не все DNS хостинг провайдеры требуют разбивать TXT-запись менее чем на 255 символов, так как некоторые из них это делают прозрачно для пользователя.

После создания TXT-записи в DNS желательно подождать 5-8 минут и уже потом проверять работоспособность.

 

Проверка агента Exchange DKIM Signer

Отправим тестовые письма на известные почтовые домены gmail.com и yandex.com:

24
На скриншоте выше видно, что отработала только SPF запись.

Теперь посмотрим, как будет выглядеть скриншот после включения агента:

25

Получающий сервер, в данном случае gmail.com, определил, что почтовое сообщение было отправлено через действительный почтовый домен (SPF) и им же подписано (DKIM).

Посмотрим, как yandex.ru определяет, что сообщение имеет достоверную цифровую подпись:

33
Посмотрим на Email Headers на сервере получения gmail.com:

27

Посмотрим в логи агента на сервере Exchange:

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

Кстати, более детальную информации по вашему почтовому домену и задействованных на нем технологиях можно получить отправив письмо на адрес mailtest@unlocktheinbox.com

 

Обновление агента Exchange DKIM Signer

Обновление реализуется очень легко. На скриншоте ниже видно, что я использую не последнюю версию агента. Чтобы это исправить, нужно просто нажать на кнопку Upgrade:

29

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

Сколько я не тестировал обновление программы, оно завершалось удачей в 100% случаев:30

 

Удаление агента Exchange DKIM Signer

Удаление возможно через PowerShell скрипт .\Uninstall.ps1 который находится там же, где и .\Install.ps1, но в документации написано, что это нерекомендуемый способ удаления.

Простой и рекомендуемый способ удалить агента – это запустить Configuration.DkimSigner.exe из папки "C:\Program Files\Exchange DkimSigner", нажать на кнопку Configure, выбрать агента DkimExchange Signer и нажать кнопку Uninstall:

32
При успешном удалении вы увидите сообщение:

33

 

Итак, на практическом примере мы установили, сконфигурировали, проверили работу, обновили, удалили DKIM Signing Agent for Microsoft Exchange Server.

В одной из следующих заметок постараюсь рассказать о настройке политики DMARC.

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

  1. Александр /

    Вы просто молодец! Конечно нужно всем постмастерам внедрять DKIM. А ваша развернутая статья подвигнет к этому и самых ленивейших, ИМХО.

  2. Sergey Korotkov /

    День добрый.
    Если я правильно помню, то селектором может быть что-угодно, не обязательно первая часть в сенд коннекторе.
    >> Поле Selector – это конечный хост отправки письма в интернет. Здесь нужно быть очень внимательными и указать имя хоста, которое прописано у вас на коннекторе отправки на Exchange сервере в разделе Scoping поле FQDN:

    1. Антон Ивонин / Автор записи

      >>Если я правильно помню, то селектором может быть что-угодно, не обязательно первая часть в сенд коннекторе.

      Да Вы правы,спасибо, вчитался в спецификацию DKIM и понял это. Провел тесты, которые подтвердили - это утверждение.

      Исправил заметку.

  3. Олег Крылов /

    Есть мнение, что Дмитрий таки не Разборный, а Разборнов. Поэтому не "Дмитрия Разборного", а "Дмитрия Разборнова" :)

  4. razbornovd /

    Очень годно, очень!

  5. razbornovd /

    Мнение тов. КрылоВА поддерживаю :)

    1. Антон Ивонин / Автор записи

      Fixed!

  6. Семен Горбунков /

    этот фильтр будет работать, только, если и получать, и отправитель используют эту технологию?

  7. aivonin3093 /

    >если и получать, и отправитель используют эту технологию?

    DKIM будет работать вне зависимости от настроек получателя почтового сообщения.

  8. Семен Горбунков /

    как это работает, если отправитель не использует цифровую DKIM, -в чем при этом полезность?

    1. Антон Ивонин / Автор записи

      >как это работает, если отправитель не использует цифровую DKIM

      Семен, можете конкретизировать свой вопрос?

      1. Семен Горбунков /

        что будет при условиях: я использую ДКИМ и ДМАРК, как получатель письма, а отправитель не использует ДКИМ и ДМАРК.

  9. Антон Ивонин / Автор записи

    >>я использую ДКИМ и ДМАРК, как получатель письма, а отправитель не использует ДКИМ и ДМАРК.

    В первую очередь отправитель письма заинтересован в электронно цифровой подписи (эцп) своей почтовой корреспонденции. Как отправитель я должен беспокоиться, что мое письмо при маршрутизации через интернет не будет изменено. Получающий сервер с помощью ЭЦП определит, что письмо пришло от действительного отправителя.

  10. Андрей /

    Спасибо за шикарную статью! есть один вопросик, может есть подобный мануал по Exchange + DMARC? был бы очень признателен

    1. Антон Ивонин / Автор записи

      Заметку про DMARC планирую реализовать в январе-феврале 2016 года.

      Чтобы понять как работает DMARC советую Вам прочитать хелпы от mail.ru, google....у них уже все давно подробно написано как и что делается и для чего.

  11. Андрей /

    Антон добрый день!
    Скажите, разве не нужно в DNS дополнительно прописать DKIM ADSP запись?

    1. Антон Ивонин / Автор записи

      Андрей, мы используем DMARC политику для регулирования DKIM и SPF.

  12. Андрей /

    Антон, можете немного подробнее объяснить, в чем разница между записьм в DNS и DMARC

  13. Обратная ссылка: Гибридное развёртывание Exchange Server 2013. Часть 3. Запуск мастера гибридного развертывания. | Блог IT-KB /

  14. Vladimir /

    Столкнулись с проблемой поддержки Exchange 2013 Update 16. Ее почему-то нет. Как решить такую проблема, кто знает?

    1. razbornovd /

      Переименовать две папки, и две строки в инсталляторе. В чем проблема-то?

      elseif (($exchserver.admindisplayversion).major -eq 15 -and ($exchserver.admindisplayversion).minor -eq 0 -and ($exchserver.admindisplayversion).build -eq 1293) {
      $EXVER="Exchange 2013 SP1 CU16"

      Другой вариант подождать, пока автор найдет время и обновить проект, внести долю малую донатом ему для скорости. Зарегистрироваться на гитхабе, пообщаться на эту тему?

  15. Stas /

    Добрый день, столкнулся с проблемой если письмо имеет вложение с именем на русском языке, то подпись DKIM не верна, ошибка:
    У Вас более одной DKIM подписи в Вашем сообщении.
    Пожалуйста, оставьте только одну подпись: Вы должны позволить почтовому серверу самому подписывать сообщения, и отключить подпись DKIM в своей почтовой программе.
    Signature 1 :

    v=1;
    a=rsa-sha1;
    d=*.ru;
    s=mail;
    c=simple/simple;
    t=1515641411;
    h=from:subject:to:date:message-id;
    bh=WI2nLvi/GrCQylUFWd6WTmiN6es=;
    b=HTzmrjZLFal3A4jvKErho6wB+6VzMv9E4qFJ5dcHYLa3cKRd6qp1BHRfAmLCeDH9juIuJYRB0KWo1qFCR3oE9wDYLNs0Bmiehk/PSN+yhX/fd8NotOY3xc3cWKY6qc9EQX79xgZKdihrPcA22kITQ760Gh9PNUIZ1fXUn5lGWs4=
    Signature 2 :

    v=1;
    a=rsa-sha1;
    d=*.ru;
    s=mail;
    c=simple/simple;
    t=1515641396;
    h=from:subject:to:date:message-id;
    bh=z/K+n6vu1On13506w9s5DlqmQKM=;
    b=A3CNkQaEi5bv1Bk3nIvZFiV6bfWKdgPC0i73QSOvPXLWgCDRjuq0hq1h5x3QHY8F0cMQujT/CiCSqWJKXbdnNpR/RhVIECs+qkqUoW14umR44In383m+gc97r40uOf0vowts3uce3OZCY5JaSm93ewyb1MBokuMnr6+s9SknkB0=

    Если вложение на английском или цифрами, то проблем нет.

  16. Обратная ссылка: Технология DKIM для почтового сервера – blog.bissquit.com /

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