SPF, DMARC, DKIM & BIMI. Делаем почту правильной и красивой

Автор: | 25 июля 2022

Сразу скажу – это не спасет Вас от спама как получателя, но поможет отправлять свои письма чисто, красиво и с подтверждением Вашей подлинности.

Введение

Сначала расшифрую эти термины.

SPF – Sender Policy Framework, инфраструктура политики отправителя. Позволяет подтвердить подлинность домена отправителя. Владелец домена с помощью TXT записи определяет какие сервера могут отправлять почту от имени этого самого домена. Получатели проверяют сервер отправителя с помощью обычного DNS запроса и на основании полученной информации могут либо принимать либо отклонять письма.

DKIM — DomainKeys Identified Mail. Защита домена отправителя при помощи ключей. Потребуется создать публичный и приватный ключи. Приватный ключ зашифрует подпись к заголовкам письма, а публичный ключ нужно будет добавить в DNS при помощи txt записи. Когда Ваше письмо приходит на сервер адресата, он обращается к DNS записям Вашего домена, берет публичный ключ и расшифровывает подпись в письме. Тем самым подтверждается подлинность письма и принадлежность к Вашему домену. На текущий момент большинство почтовых серверов будут отклонять или помечать как спам письма без правильно настроенного DKIM.

DMARC — Domain-based Message Authentication, Reporting and Conformance. Это набор правил для писем от Вашего домена, которые не прошли проверку по SPF и DKIM. Обязательное условие перед установкой DMARC – правильно настроенные SPF и DKIM.

BIMI — Brand Indicators for Message Identification (вишенка на торте), это опция, которая позволяет отображать логотип Вашего бренда в виде иконки в списке писем, если письмо прошло все проверки – SPF, DKIM и DMARC.

Вводные данные:

  • Ubuntu 20.04
  • Postfix 3.4.13
  • Для проверки я пользуюсь сервисом mxtoolbox.com

SPF

В интерфейсе управления DNS записями домена нужно создать новую запись типа TXT:

Примерно это выглядит так:

TXT запись протокола SPF

  • TXT – индикатор что это запись типа TXT
  • В поле Name вписывается Ваш домен, или символ @ — для указания корневого домена. Если указываете домен – смотрите как именно его нужно писать – у разных хостеров разные требования. К примеру Cloudflare – просто домен (gurin.ru), а sprinthost – домен с точкой на конце (gurin.ru.)
  • v=spf1 – индикатор что это запись SPF и версия используется SPF1
  • a – означает, что хосту, указанному в записи типа A разрешено отправлять письма от имени домена
  • mx – означает, что всем хостам, перечисленным в записях MX,разрешено отправлять письма от имени домена
  • ip4:141.8.193.61 – означает, что указанному IP адресу (или диапазону), разрешено отправлять письма от имени домена
  • ~all – означает, что электронные письма от Вашего домена должны приходить только с хостов, указанных в записи SPF. Электронные письма от других хостов будут помечены как ненадежные.

Сохраняем и проверяем. Два варианта – браузером через сервис mxtoolbox и просто dig из консоли на самой ubuntu.

Проверка SPF записи сервисом mxtoolbox

Проверка SPF записи командой dig

DKIM

Тут будет поинтереснее. Устанавливаем OpenDKIM и инструменты

Добавим юзера postfix в группу opendkim

Настройка DKIM

Теперь открываем конфиг OpenDKIM

Нужно убрать символ комментария со следующих строк

Значение simple заменить на relaxed/simple и добавить следующие строки сразу после SubDomains no

Параметры opendkim

Теперь в самом конце файла, после строки UserID opendkim добавляем вот эти строки

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

Параметры opendkim

Сохраняем и закрываем. Идем дальше. Создадим структуру папок.

Структура папок и файлов DKIM

Меняем владельца папки и делаем папку ключей доступной на чтение и запись только пользователю okendkim

Создадим файл signing.table

Добавляем в этот файл строчку

Это означает, что DKIM должен подписать сообщения с этого сервера, которые используют в адресе @gurin.ru, и подписывать нужно закрытым ключом default._domainkey.gurin.ru

Если необходимо подписывать почту не только основного домена, но и поддоменов – строчка должна выглядеть так:

Сохраняем и закрываем. Теперь создадим файл key.table

Добавляем строку, в которой указан путь до закрытого ключа:

Сохраняем и закрываем. Теперь создадим файл trusted.hosts

Добавляем следующие строчки в этот файл.

Это означает, что если письмо пришло с локалхоста или из этого же домена – DKIM должен подписать эти письма, а не проверять. Сохраняем и закрываем.

Ключи DKIM

Создаем пару ключей – публичный и закрытый. Для подписи исходящих сообщений будет использоваться закрытый ключ, а для проверки входящих – публичный ключ. Публичный ключ будет прописан в TXT запись для домена.

Создадим папку для домена:

Генерируем ключ, используя opendkim-genkey

Этак команда создаст 2048 битный ключ. -d (domain) – указывает для какого домена. -D (path) указывает в какую директорию сохранить ключи. -s default – с каким именем сохранить файлы ключей.  После выполнения команды в нашей папке будет два файла: default.private – закрытый ключ и default.txt – публичный ключ.

Теперь сменим владельца закрытого ключа на opendkim:

И сменим права на файл, что бы читать и писать его мог только opendkim пользователь.

Теперь нужно опубликовать публичный ключ как запись TXT в DNS

Все что расположено после p= и есть наш публичный ключ. Нужно скопировать его и вставить в поле значение (value) текстовой записи. Добавляем запись типа TXT, в поле имя (name) нужно указать default._domainkey , а в поле значение (value) нужно вставить

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

Проверяем ключ следующей командой:

Если все правильно – будет примерно такая картина

Главное тут для нас – Key OK. Если Вы используете cloudflare, то в третьей троке у Вас будет key not secure – пусть Вас это не пугает, это нормально.

Проверка ключа DKIM в консоли

И проверим через mxtoolbox, должно быть примерно так:

Проверка ключа DKIM через mxtoolbox

Postfix и OpenDKIM

Postfix может общаться с OpenDKIM посредством Unix-socket файла. По умолчанию OpenDKIM использует сокет файл /var/run/opendkim/opendkim.sock указанный в конфиге /etc/opendkim.conf. Но SMTP демон Postfix в Ubuntu работает в режиме chroot, и поэтому демон SMTP определяет все пути к файлам относительно директории очереди Postfix — /var/spool/postfix. Поэтому нужно создать новый сокет файл и поменять в конфиге пути. Создаем папку и меняем владельца – user будет opendkim, group – postfix:

Теперь меняем путь в конфиг файле

Нужно найти строку

И заменить на

Новый путь до сокета

Сохраняем и закрывам. Следующий файл:

Находим строку

И меняем ее на:

Новый путь до сокета

Сохраняем и закрываем.

Настройка Postfix:

Добавляем следующие строки, что бы Postfix мог вызывать OpenDKIM посредством протокола milter:

DKIM & Postfix
Настройки Postfix

Сохраняем и закрываем. Перезапускаем OpenDKIM и Postfix и проверяем.

Проверка DKIM

Для проверки можно отправить письмо с нашего почтового сервера на аккаунт Gmail и посмотреть служебные заголовки. В полученном письме в интерфейсе Gmail открываем меню и нажимаем «показать оригинал»

Проверка DKIM через Gmail

SPF, DKIM, DMARC - проверки пройдены!
Проверки пройдены!

DMARC

DMARC можно настраивать только после того, как убедились, что SPF и DKIM правильно настроены и работают. Для начала необходимо проверить, что три поля в заголовках указывают на один и тот же домен – домен отправителя. Поля такие: Return-Path, d=domain в подписи DKIM и FROM

Настройка DMARC
Проверка совпадения домена в заголовках

Если все совпадает – создаем запись типа TXT для нашего домена. В поле name пишем _dmarc в значение пишем:

  • v=DMARC1 – версия протокола DMARC1
  • p=none – политика действия для нашего домена
  • pct=100 – сколько процентов писем обрабатывать
  • rua=mailto: – адрес, на который будут приходить отчеты о срабатывании

Политику действий можно выбрать одну из трех:

  • none – сообщает почтовым серверам, что они не должны выполнять ничего особенного если проверка DMARC не прошла
  • quarantine – сообщает серверу получателю, что необходимо поместить письмо в карантин, если проверка DMARC не прошла
  • reject – сообщает серверу получателю, что необходимо отклонить письмо, если проверка DMARC не прошла.

Я не буду в этот раз описывать подробности работы DMARC – лучше опишу в отдельной статье. Хочу лишь заметить, что если планируется использовать BIMI – то политика действий не может быть none, только quarantine или reject.

Проверить правильность записи DMARC можно тоже через mxtoolbox или через консоль с помощью dig.

DMARC - проверка из консоли
Проверка DMARC в консоли

Проверка DMARC через mxtoolbox

BIMI

Этой вишенки нет у большинства доменов в интернете. Долго искал для примера среди известных, и только у paypal нашел полностью настроенный. На нем и покажу.

Итак, для начала нужно создать логотип, который хочется отображать в качестве иконки письма. Требования к логотипу:

  • SVG файл, параметр baseProfile должен быть установлен tiny-ps
  • Параметр version должен быть установлен 1.2
  • Элемент title должен отражать название компании, но четких требований к нему нет

Создаем SVG файл, выкладываем его в директорию, доступную для всего интернета и добавляем запись типа TXT в DNS.

  • v=BIMI1 – версия протокола
  • l= путь к файлу логотипа
  • a= путь к файлу сертификату

Вот с сертификатом все не просто. На текущий момент его можно получить только в двух сертификационных центрах:

Нужно получить, так называемый, VMC сертификат, почитать можно тут — DigiCert Verified Mark Certificates (VMC) for BIMI

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

Так работает BIMI
Так выглядит BIMI

Заключение

Чуть позже расскажу, как можно отслеживать кто пытается отправлять почту от имени Вашего домена, как это анализировать и что с этим делать (DMARC).

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

Полезные материалы

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

Ваш адрес email не будет опубликован.

*