Всем доброго дня. Коллеги, тема довольно проста и не нова. Но я столкнулся со сложной реализацией, а именно -подпись почтового сервера с помощью DKIM в своей инфраструктуре. Еще убедился, что статей на русском языке не так много, поэтому, надеюсь, моя статья может кому-либо пригодиться.
Что такое DKIM и как она работает можно глянуть в интернете. Даю ссылку на хабре. Если вкратце, то DKIM – один из методов аутентификации почтового сервера, на основе цифровой подписи. Т.е. мы подписываем наш домен своими силами и объявляем всем, что это действительно мы. Честно говоря, не совсем разобрался каким образом это может повысить безопасность. Думаю после написания статьи кинуть пост на наш форум, может кто объяснит мне.
Вообще поначалу думал проигнорировать эту подпись, но потом прочел, что много почтовых серверов, в частности Gmail, которые если не требуют, но очень любят эти подписи. Вспомнил, что примерно раз в год наш домен попадает в черный список Google, проблема решается сама собой через недельку-две. Приходится каждый раз объяснять пользователям, что наш почтовик не при чем и т.д. Достучаться в службу поддержки google практически невозможно. Вообще насколько я понимаю, что они начинают диктовать свои условия, что неправильно на мой взгляд, ведь мы уже подстраиваемся под них, но это тема отдельного разговора.
Итак, моя инфрастуктура: почтовый сервер Exchange Server 2010 SP3, DNS – Windows Server. Как видно, все на MS. Из коробки Exсhange Server не поддерживает DKIM. Но начали появляться модули, которые есть как бесплатные, так и платные. Целью внерить DKIM я завелся уже довольно давно, примерно с год. Но на тот момент сходу не нашел никаких решений. Однажды скачал что-то подобное, но оно оказалось платным и малопонятным, поэтому отложил. Недавно обнаружил статью на хабре, где как раз рассказывается, как внедрить DKIM в Exchange. Спасибо большое автору, пусть простит меня за небольшой плагиат. Далее по тексту – практически все взято из данной статьи, только более разжевано )
Качаем Exchange DkimSigner, который является просто транспортным агентом. Далее делаем все по статье. Я на всякий случай продублирую информацию и добавлю свои комментарии:
- Распаковываем архив в удобное место, пусть c:\DKIM
- Мы будем для установки запускать скрипт Powershell, поэтому попросим сервер доверять всем скриптам : командлет Set-ExecutionPolicy Unrestricted
- Запускаем “.\install.ps1” (Приготовьтесь, некоторое время письма перестанут ходить). Во время установки нас попросят подправить конфигурацию. См. след пункт
- Идем в папку с установленным модулем. По умолчанию конфиг находится в «C:\Program Files\Exchange DkimSigner», открываем settings.xml текстовым редактором и исправляем это место:
<Domains>
<DomainElement>
<Domain>xxx.ru</Domain>
<Selector>mail</Selector>
<!– if relative path, then it’s relative to C:\Program Files\Exchange DkimSigner\keys –>
<PrivateKeyFile>C:\DKIM_KEYS\private.txt</PrivateKeyFile>
</DomainElement>
</Domains>
xxx.ru – ваш домен
mail – название селектора. Селектор это просто идентификатор, оставьте так как есть.
C:\DKIM_KEYS\private.txt – путь к вашему приватному ключу. Далее про это подробнее.
По поводу ключей. Их надо сгенерировать самим. Ключ бывает публичным и частным. Генерируются с помощью программы openSSL или (я советую) прям на сайте port25.com. Очень удобно, сейчас объясню.
- пишем наш домен
- пишем селектор
- сложность ключа пусть такая
- Нажимаем “создать”
- Копируем и сохраняем public.txt
- … и Private.txt, это путь мы и указываем в файле конфигураций
По сути самое сложное закончилось, теперь дожидаемся конца установки. Я повторяться не буду со статьей, лучше сами проглядите. Возможны нюансы когда наш новый модуль не последний в списке. Также у себя на сервере я не стал запрещать политику скриптов, она у меня открыта до сих пор. Пока не разбирался, но командлеты PowerShell Exchange перестают работать, поэтому так все и оставил.
Далее по статье сказано: необходимо настроить DNS. Тут-то у меня и возникли сложности. Выполнил рекомендации, которые нашел в интернете, и не увидел результата. Оказалось, там не совсем все было верно + примеры написаны для BIND, а у меня графический интерфейс в ОС Windows Server, по неопытности я просто заплутал. Смысл в том, что надо создать запись TXT:
Я думаю, по скрину все предельно понятно: имя записи – напишите ваш селектор (у нас mail), FQDN соответствующего вида mail._domainkey…. (свой домен я заштриховал), по тексту оставляйте как написано у меня (после p=<ваш публичный ключ> в строчку).
По идее все. Проверить можно несколькими способами: отправить письмо с вашего сервера на почту gmail, затем полученное письмо открыть “в виде оригинала”, есть такой функционал. В служебной информации найти dkim=pass. Значит все гуд. Второй способ мне более симпатичен. Есть неплохой сайт, который я добавил себе в избранное – http://www.mail-tester.com/. Отправляете письмо им на сервер, через некоторое время выводится информация о вашем почтовом сервере:
Есть оценка 10 баллов, значит все отлично, в т.ч. и сама подпись DKIM:
Всем спасибо за внимание. Если есть вопросы и замечания, оставляйте комментарии сюда или на наш форум.
Comments: