Настройка DKIM, SPF, DMARK. Повышаем уровень доверия к почтовому серверу.

by Anton Chernousov aka GITA-DEV


Опубликовано: 20 Сен 2018 (последние правки 4 недели)


Настройка DKIM, SPF, DMARK. Повышаем уровень доверия к почтовому серверу.

Задачи по настройке DKIM/SPF/DMARK и т.п. довольно распространены на фриланс-сайтах, но в большинстве случаев там все в итоге сводится к настройте мне почтовый сервер для спам рассылок чтобы мои уникальные предложения не попадали в спам. Такие товарищи мне не товарищи и сразу идут лесом, да и кстати сказать, из за них теперь для настройки банального почтового сервера требуется совершать столько приседаний. Чтобы не забыть последовательность действий по настройке почтового сервера письма от которого не будут сразу уходить в спам, я решил написать эту небольшую инструкцию.

Проверка по спам-листам

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

Проверить наличие ip-адреса в блэк-листах можно тут: https://www.dnsbl.info/dnsbl-database-check.php

Проверить на бан от Роскомнадзора можно тут: https://blocklist.rkn.gov.ru/

Проверка основных DNS-записей

Если у вашего почтового сервера не настроены или настроены некорректно MX, A и PTR записи для IP-адреса вашего почтового сервера, то ваше письмо со 99% вероятности попадет в спам или вообще будет отклонено получающим сервером. Почтовые сервера Янедекса и Mail.ru последнее всремя вообще взяли за правило делать вид, что они письмо приняли, но внутренние фильтры его просто удаляют и вам кажется, что почта ушла и была принята принимающим сервером, но на деле ее никто не получит.

Начинаем с проверки MX-записей для домена:

# dig MX gita-dev.ru | grep -v ";" | grep -v "^$"
gita-dev.ru.           3582   IN     MX     10 mail.gita-dev.ru.

Проверяем A-запись для соответствующей MX-записи:

# dig A mail.gita-dev.ru | grep -v ";" | grep -v "^$"
mail.gita-dev.ru.      3599   IN     A      93.170.131.222

И в обратную сторону, проверяем PTR запись для IP-адреса и она должна указывать на DNS-имя сервера:

# nslookup 93.170.131.222 
Server:        8.8.8.8
Address:       8.8.8.8#53

Non-authoritative answer:
222.131.170.93.in-addr.arpa    name = mail.gita-dev.ru.

Настройка DKIM

После того как мы проверили базовые вещи, мы можем переходить к повышению уровня доверия к нашему почтовом у серверу и для этого нам потребуется настроить DKIM. По настройке DKIM есть есть много инструкций и я не буду вдаваться в подробности и скажу лишь, то что этот механизм подразумевает добавление к письму дополнительного заголовка содержащего цифровую подпись которая проверяется по ключу указанному в соответствующей TXT-записи домена. На самом деле, ничего сложного нет, просто следуем представленной ниже инструкции (настройка DKIM для Postfix). Настройку, я как обычно показываю на своем тестовом домене gita-dev.ru и думаю, что вы можете просто изменить этот домен на свой не вдаваясь в особые детали реализации, иначе пошаговое объяснение займет уйму времени.

Устанавливаем необходимые для работы пакеты:

# apt-get install opendkim opendkim-tools

Генерируем ключ для подписи электронной почты и соответствующую DNS-запись:

# mkdir /etc/opendkim/
# opendkim-genkey --bits=1024 -D /etc/opendkim/ -d gita-dev.ru -s mail

Файл конфигурации /etc/opendkim.conf:

Canonicalization relaxed/simple
SyslogSuccess yes
Syslog yes
LogWhy yes
Mode sv
RequireSafeKeys false
KeyTable file:/etc/opendkim/keytable
SigningTable refile:/etc/opendkim/signingtable
X-Header yes

Файлы отвечающие за подпись писем (для каждого домена подпись естественно отдельная).

Файл /etc/opendkim/keytable:

gita-dev.ru gita-dev.ru:mail:/etc/opendkim/mail.private

Файл /etc/opendkim/signingtable:

*@gita-dev.ru gita-dev.ru

Настраиваем OpenDKIM на работу с IP-портом по TCP протоколу (можно оставить и на сокете, но честно говоря с правами доступа лишняя морока) и для этого в файле /etc/default/opendkim меняем параметр:

SOCKET="inet:12345@localhost"

Настраиваем автозапуск DKIM при старте сервера и запускаем сервис:

# systemctl enable opendkim
# systemctl start opendkim

В файле /etc/opendkim/mail.txt находится DNS-запись в формате Bind которую необходимо добавить в панели управления DNS-сервером и в моей панели управления сервером это выглядит следующим образом.

Проверяем, что созданная DNS-запись доступна:

# dig TXT mail._domainkey.gita-dev.ru | grep -v "^;" | grep -v "^$"
mail._domainkey.gita-dev.ru. 3599 IN   TXT    "v=DKIM1; k=rsa; p=MIGfMA0GC.....829KFZe1xFqwIDAQAB"

Проверяем, что закрытый ключ соответствует секретному:

# opendkim-testkey -d gita-dev.ru -s mail -vvv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key 'mail._domainkey.gita-dev.ru'
opendkim-testkey: key not secure
opendkim-testkey: key OK

И если все правильно, то переходим к настройке Postfix в конфигурацию которого необходимо добавить параметры:

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:[127.0.0.1]:12345
non_smtpd_milters = inet:[127.0.0.1]:12345

Не забывайте сменить владельца файлов ключей, в противном случае вы получите ошибку доступа с недостатком прав:

# chown -R opendkim:opendkim /etc/opendkim/

Перезапускаем почтовый сервер и отправляем письмо самому себе:

# /etc/init.d/postfix restart

В теле письма должна появиться DKIM-подпись.

Настройка SPF

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

gita-dev.ru. IN TXT v=spf1 a mx ~all 

Настройка DMARK

В случае в DMARK, все аналогично SPF и вы можете использовать DNS-запись аналогичную представленной ниже:

_DMARC.gita-dev.ru IN TXT v=DMARC1; p=none; rua=mailto:postmaster@gita-dev.ru; ruf=mailto:postmaster@gita-dev.ru; fo=1

Или использовать online-конструктор DMARK (или прочитать официальную RFC для особо тяжелых случаев).

Проверка настроек

Неплохой сервис которым можно проверить, что мы все сделали верно находится по адресу: https://www.mail-tester.com/, он правда ограничен по числу запросов в сутки, поэтому перед проверкой убедитесь, что в вашем письме имеется DKIM-подпись, убедиться можно просто визуально открыв письмо в виде исходного текста. Если вы все сделали согласно инструкции, то уровень доверия будет 10 из 10.

Регистрируемся как сервис рассылки

Зарегистрируйте почтовые ящики на основных публичных сервисах, таких как Яндекс, Mail.ru, Hotmail и Рамблер и попробуем отправить письмо на каждый из этих сервисов. Таким образом мы покажем, что такой домен существует и убедимся, что никакие внутренние алгоритмы этих публичных почтовых серверов нас не блокируют.

Следующим этапом мы регистрируемся в службах постмастера для публичных почтовых серверов и это позволит нам помимо получения статистики по рассылкам получить чуть больше доверия от этого почтового сервиса:

Mail.ru - https://postmaster.mail.ru/

Yandex.ru - https://postoffice.yandex.ru/

Gmail - https://postmaster.google.com/

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



Обратите внимание на статьи:


Отправка локальной почты через удаленный MTA с авторизацией

Отправка локальной почты через удаленный MTA с авторизацией

Если у вас есть приложение которое использует для отправки почты системные функции и не поддерживает указание SMTP-сервера и учетных данных с которыми необходимо осуществлять отправку почты (например через почтовый сервер Yandex), то вам придется настроить локальный MTA (например Postfix) таки образом, чтобы он не просто отправлял почту Relay-ем на Yandex, но еще и авторизовывался на удаленном сервере.


Настройка MTA Postfix в связке с Dovecot

Настройка MTA Postfix в связке с Dovecot

В предыдущей статье посвященной сборке и настройке почтового сервера из Opensource-компонентов, я в качестве MTA использовал EXIM и как мне сказали я это сделал зря, так как наиболее распространенным почтовым сервером на данный момент является Postfix и он применяется на 90% почтовых серверов. Пожалуй прислушаюсь к советам читателей и расскажу в дополнение к предыдущей статье как настроить Postfix для той же связки.


Настройка шифрования трафика протоколов SMTP и IMAP сертификатами let's Encrypt (EXIM+Dovecot)

Настройка шифрования трафика протоколов SMTP и IMAP сертификатами let's Encrypt (EXIM+Dovecot)

Как я уже говорил, я продолжу настраивать тестовый почтовый сервер на базе Dovecot+Exim и сегодня мы настроим шифрование трафика SMTP и IMAP валидными сертификатами Let's encrypt.


Легковесный почтовый сервер с хранением учетных данных в базе Postgresql

Легковесный почтовый сервер с хранением учетных данных в базе Postgresql

До этого я рассказывал исключительно о монстроидальном комплексе совместной работы под названием Zimbra и вы наверное поняли, что запустить его на небольшом VPS у вас не получится, так как он потребляет просто огромное количество системных ресурсов. Но, что же делать, если требуется собственный почтовый сервер и вы сильно ограничены в системных ресурсах? Правильный ответ, это собрать его самому из Opensource-компонентов и полученный результат удивит вас своей легковесностью.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .

Блог это некоммерческий проект! Если вам понравился мой блог и то что я пишу помогло вам на практике, то можете сказать спасибо материально.