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 не будет опубликован. Обязательные поля помечены *

*