Всё началось с того, что мне понадобилось минимизировать количество обычных писем (не рассылок), которые регулярно попадали в папку «Спам» на стороне получателя, где благополучно терялись, оставаясь без ответа. К этому моменту SPF в домене уже был настроен, однако, судя по всему, некоторым почтовым серверам этого было мало. Так появилась вполне конкретная задача: «прикрутить» DKIM к MS Exchange Server 2010.
По умолчанию MS Exchange Server не поддерживает DKIM. В процессе поиска решения был обнаружен бесплатный агент транспорта Exchange DKIM Signer.
Если у вас установлен .NET Framework 4.5, установку агента можно выполнить в автоматическом режиме. В противном случае придётся установить и настроить Exchange DKIM Signer вручную. Подробная инструкция по установке в ручном режиме есть на сайте агента.
Я решил проверить автоматический режим:
- На всякий случай делаем резервную копию сервера Exchange
- Скачиваем Configuration.DkimSigner.zip с https://github.com/Pro/dkim-exchange/releases/latest
- Распаковываем в произвольную папку и запускаем Configuration.DkimSigner.exe
- Нажимаем кнопку Install
- В открывшемся окне выбираем, какую версию будем устанавливать
- Нажимаем кнопку Install и ждём завершения процесса установки
- Закрываем окно
Новый агент транспорта Exchange установлен. Теперь необходимо настроить его параметры. Как и в случае установки, конфигурировать агент можно либо вручную (редактируя файл C:\Program Files\Exchange DkimSigner\settigs.xml), либо через GUI (запустив файл C:\Program Files\Exchange DkimSigner\Configuration.DkimSigner.exe).
Нажимаем кнопку Configure и убеждаемся, что агент Exchange DKIM Signer имеет самый низший приоритет (стоит самым последним в списке). Это нужно для того, чтобы письма подписывались на самом последнем этапе, после всех возможных модификаций, которые сделают остальные агенты транспорта.
На закладке «DKIM Settings» указывается, какие поля будут подписаны. По умолчанию это: From, Subject, To, Date, Message-ID.
Настройка параметров нашего домена выполняется закладке «Domain Settings». Указываем имя домена, селектор (имя DNS записи) и файл с секретным ключом. Ключ можно сгенерировать прямо здесь же. У меня уже была пара ключей, которую я получил с помощью OpenSSL:
openssl genrsa -out private.pem 1024
openssl rsa -pubout -in private.pem -out public.pem
После того как настройки сделаны, нажимаем кнопку «Save domain». По идее, настройки должны примениться сразу автоматически, но я на всякий случай перезапустил службу «Транспорт Microsoft Exchange».
Осталось настроить две записи в DNS:
_domainkey.<имя_вашего_домена>. TXT "t=s; o=~;"
mail._domainkey.<имя_вашего_домена>. TXT "v=DKIM1; k=rsa; t=s; p=<содержимое_открытого_ключа>"
Параметр o= может принимать значение:
- «~» — некоторые письма из этого домена подписаны
- «-» — все письма из этого домена подписаны.
«mail» перед «._domainkey» — это и есть имя селектора.
Так же рекомендуется прописать в DNS запись ADSP:
_adsp._domainkey.<имя_вашего_домена>. TXT "dkim=all"
Параметр dkim может принимать значение:
- «unknown» — аналогично отсутствию записи
- «all» — все письма должны быть подписаны
- «discardable» — неподписанные письма не должны приниматься.
Отправляем тестовое письмо, например, на gmail и ищем в заголовках dkim=pass:
Строчки есть, всё работает.