Проверка DMARC-записи домена
Введите домен, и мы разберём запись по тегам, объясним, что означает каждый, и проверим, авторизованы ли внешние адреса для отчётов. Последнее чаще всего и ломает сбор статистики.
Что такое DMARC и что он добавляет к SPF и DKIM
DMARC (RFC 9989) — это TXT-запись на имени _dmarc.example.com, в которой владелец домена говорит получателям три вещи: какие письма считать подлинными, что делать с остальными и куда присылать отчёты.
SPF и DKIM отвечают на технические вопросы: разрешён ли этот сервер и не изменилось ли письмо. Ни один из них не говорит получателю, что делать, если проверка не прошла, и ни один не смотрит на поле «От кого», которое видит человек. DMARC закрывает оба пробела. Он задаёт политику и требует, чтобы проверенный домен совпадал с доменом в From.
Второе, ради чего его ставят, это отчёты. Раз в сутки или чаще почтовые провайдеры присылают сводку о том, сколько писем пришло от вашего имени, с каких адресов и какие прошли проверку. Без этих данных вы не знаете ни о подделках, ни о собственных рассылках, которые тихо не проходят аутентификацию.
Как DMARC выносит вердикт
Получатель берёт домен из поля From и ищет запись на _dmarc этого домена. Если там пусто, он поднимается по дереву DNS к организационному домену. Этот обход добавил RFC 9989, прежде опирались только на список публичных суффиксов. Дальше письмо засчитывается, если верно хотя бы одно из двух:
- SPF прошёл, и домен конверта выровнен с From;
- DKIM прошёл, и домен из тега d= подписи выровнен с From.
Условия проверяются независимо, и вам достаточно одного. SPF, прошедший для чужого домена, DMARC ничего не даёт, с DKIM то же самое. Если не выполнено ни одно условие, получатель применяет политику из тега p (или sp и np для поддоменов).
Про выравнивание доменов
Режим задают два тега: aspf для SPF и adkim для DKIM. По умолчанию у обоих r, нестрогий режим: домены должны иметь общий организационный домен, поэтому подпись от news.example.com засчитывается для From на example.com. Строгий режим s требует буквального совпадения, и поддомен уже не пройдёт.
Строгое выравнивание нужно редко. Оно мешает подделывать письма от поддоменов, но только если каждый путь отправки подписывает ровно тем доменом, что стоит в From. Включить его при рассылках через сервис значит уронить собственную почту.
Почему DMARC не проходит при рабочих SPF и DKIM
Самая частая жалоба звучит так: обе проверки по отдельности зелёные, а DMARC красный. Рассылочный сервис по умолчанию отправляет со своего конверта, поэтому SPF проходит по его домену, и подписывает своим ключом, поэтому DKIM проходит по нему же. Обе проверки настоящие, но ни одна не выровнена с вашим From.
Лечится подключением собственного домена внутри сервиса. Для DKIM вы публикуете у себя селектор, обычно CNAME на ключ сервиса, и подпись начинает нести ваш домен. Для SPF настраиваете свой Return-Path на поддомене, если сервис это умеет. Хватит и одного из двух, но опираться лучше на DKIM: при пересылке SPF ломается, а подпись остаётся верной, если письмо по дороге не правили. Выравнивание конкретного письма видно в анализе заголовков.
Три ступени внедрения
- p=none: наблюдение. Доставка не меняется, отчёты собираются.
- p=quarantine: непрошедшие письма обрабатываются как подозрительные, обычно уходят в спам.
- p=reject: непрошедшие письма отклоняются, обычно ещё во время SMTP-сессии, и не попадают ни во входящие, ни в спам. Это конечная цель для домена, который хочет защититься от подделки.
Флаг t=y заменил прежний pct. С ним получатель применяет политику на ступень мягче: quarantine работает как none, reject как quarantine. На отчёты флаг не влияет, а при p=none ничего не меняет.
С февраля 2024 года Gmail требует DMARC от тех, кто отправляет на его ящики больше 5 000 писем в день, Yahoo от массовых отправителей. Обоим достаточно p=none, если проверка проходит и домен From выровнен. При этом сам по себе DMARC попадания во входящие не гарантирует. Подробности в разборах требований Gmail и требований Yahoo.
Пример записи и её теги
v=DMARC1; p=quarantine; sp=quarantine; np=reject; rua=mailto:dmarc@example.com; adkim=r; aspf=rПо RFC 9989 первым обязан идти тег v, порядок остальных не важен. Прежний RFC 7489 требовал ставить p сразу за ним, поэтому записи обычно так и пишут. Запись на организационном домене действует и на поддомены, если у них нет собственной.
p,sp,np: политика для самого домена, для его поддоменов и для поддоменов, которых нет в DNS. Письма от несуществующих поддоменов почти всегда поддельные. Безnpдействуетsp, безspдействуетp.t: тестовый режим, описан выше.ruaиruf: адреса для агрегированных отчётов и для отчётов о сбоях.adkimиaspf: режим выравнивания.fo: когда присылать отчёты о сбоях;psd: пометка для публичных суффиксов и сложных иерархий доменов, обычному домену она не нужна.
Теги pct, rf и ri из RFC 9989 убраны и не действуют у получателей, перешедших на новый стандарт. Исключение одно: черновик BIMI по-прежнему не принимает pct меньше 100 при p=quarantine, и логотип тогда не покажут.
Порядок ужесточения политики
Резкий переход к p=reject чаще всего и приводит к потере писем: неправильно настроенный DMARC вредит доставке. Работающая последовательность занимает пару месяцев:
p=noneи адрес для отчётов. Ничего не блокируется, вы просто смотрите, кто отправляет от вашего имени. Держат две-четыре недели.- Доведите всех своих отправителей до
dkim=passс выравниванием домена. p=quarantine, на первые недели с флагомt=y, пока отчёты не подтвердят, что своя почта проходит. Потом флаг убирают, и подозрительные письма уходят в спам, а не пропадают.p=reject. К этому моменту в отчётах не должно оставаться легитимных источников с ошибками.
Сокращать этот срок мы не советуем. Время нужно, чтобы в отчётах накопилась статистика по всем отправителям. Редкие источники вроде годовых уведомлений и сезонных рассылок иначе просто не попадут в выборку и сломаются в самый неподходящий момент.
Как читать отчёты DMARC
Агрегированные отчёты приходят XML-файлом в архиве. Читать их глазами тяжело, но структура простая: для каждого IP-адреса, с которого уходили письма от вашего домена, вы увидите количество сообщений, результат по SPF и DKIM и применённую политику.
Смысл первых недель не в поиске злоумышленников, а в инвентаризации. Почти всегда обнаруживается два-три легитимных отправителя, о которых забыли: сервис счетов, форма обратной связи на сайте, CRM бухгалтерии. Их нужно довести до прохождения проверок, и только потом ужесточать политику.
Если отчёты должны уходить на чужой домен, например в сервис разбора отчётов, тот обязан подтвердить приём записью example.com._report._dmarc.сервис.com со значением v=DMARC1. Без неё получатели адрес пропустят, и отчётов не будет, причём без всяких сообщений об ошибке. Чекер выше проверяет такие записи для каждого внешнего адреса.
Отчёты о сбоях (ruf=) содержат фрагменты самих писем, а это персональные данные, поэтому многие провайдеры их не отправляют. Строить на них процесс не стоит.
Что чаще всего сделано неправильно
- Запись годами висит в p=none. Отчёты никто не читает, защиты нет, но галочка «DMARC настроен» стоит.
- Нет rua. Политика есть, а обратной связи нет, и непонятно, кто проваливает проверку: злоумышленник или ваш собственный сервис рассылок.
- rua на чужом домене без авторизации. Отчёты не приходят, и это никак не проявляется, просто тишина.
- p=reject при живых поддоменах с рассылками. Письма с поддоменов начинают отклоняться, если у них нет своей аутентификации.
- sp=none при строгом p. Поддомены остаются открытыми для подделки.
- SPF есть, DKIM нет. Пересланные письма теряют SPF, и выровненной проверки у них не остаётся вовсе.
Email rejected per DMARC policy: почему письмо отклонили
Эта строка означает, что письмо не прошло DMARC и домен отправителя велел такие письма отклонять. Получатель выполнил инструкцию, опубликованную вами же. Чаще всего причина в выравнивании, как в разделе выше: письмо ушло через сервис, который отправляет и подписывает своим доменом. Реже это пересылка без подписи DKIM или новый сервис, который забыли подключить.
Ошибки Gmail 4.7.40 и 5.7.40 говорят об обратном: у домена нет DMARC-записи или в ней не задана политика, а Gmail требует её от массовых отправителей. С 4.7.40 письма притормаживают, с 5.7.40 отклоняют. Хватит записи с p=none, собрать её можно в генераторе DMARC.
Источники
- RFC 9989, раздел 3.2.10: выравнивание relaxed и strict
- RFC 9989, раздел 4.7: формат записи и теги
- RFC 9989, раздел 4.10: обход дерева DNS
- RFC 9989, раздел 5.1: порядок внедрения для владельца домена
- RFC 9989, приложение A.6: почему убрали pct
- RFC 9990, раздел 4: проверка внешних адресов отчётов
- RFC 9991: отчёты о сбоях
- Черновик BIMI: требование pct=100 при p=quarantine
- Google: требования к отправителям с 1 февраля 2024 года
- Google: коды ошибок SMTP, 4.7.40 и 5.7.40
- Yahoo Sender Hub: требования к массовым отправителям
Частые вопросы про DMARC
Что почитать дальше
Перед переходом на p=reject почистите базу
Жёсткая политика бьёт по репутации домена, если рассылка уходит по мёртвым адресам и спам-ловушкам. uChecker проверяет базу до отправки, первые 100 адресов бесплатно.
Проверить базу