SPF и DMARC
Вставьте TXT-запись, которую выдал хостинг, и узнайте, что она на самом деле говорит. Или соберите новую, не заучивая синтаксис.
Работает в вашем браузере. Всё, что вы сюда вставляете или бросаете, никуда не загружается.
Никаких DNS-запросов, и это нарочно: ваш домен не покидает браузер. Достаньте запись сами: dig TXT example.com +short, dig TXT _dmarc.example.com +short или nslookup -type=TXT example.com.
1 запись · 1 предупреждение
v=spf1 +a +mx +ip4:203.0.113.10 include:_spf.google.com ptr ~all
| # | Часть | Что значит | Если совпало | Запросы |
|---|---|---|---|---|
| 1 | v=spf1 | Помечает TXT-запись как SPF версии 1. Должно идти первым. | — | |
| 2 | +a | Почта с IP-адресов из A/AAAA-записей домена: обычно это ваш веб-сервер. | Passразрешено | 1 |
| 3 | +mx | Почта с MX-серверов домена, тех, что принимают вашу почту. | Passразрешено | 1 |
| 4 | +ip4:203.0.113.10 | Почта с IP-адреса 203.0.113.10. | Passразрешено | — |
| 5 | include:_spf.google.com | Google Workspace: всё, что разрешает SPF-запись _spf.google.com. | Passразрешено | 1 |
| 6 | ptr | Обратный DNS: проходит, если IP отправителя указывает обратно на имя внутри этого домена. | Passразрешено | 1 |
| 7 | ~all | Всё, что не совпало ни с чем выше. | SoftFailпринять с пометкой | — |
- !Внимание
ptrобъявлен устаревшим в RFC 7208: медленный, и многие получатели его пропускают. Перечислите IP или используйтеaиmx. - iЗаметка
~all: почта откуда-то ещё получает мягкий провал, обычно её принимают с пометкой. Хорошее начало; переходите на-all, когда список полный. - iЗаметка
+— квалификатор по умолчанию, так что+aиaзначат одно и то же. - iЗаметкаУ каждого
includeиredirectсвои запросы, и они тоже считаются. Этот инструмент нарочно не ходит в DNS, поэтому их не посчитает: проверьте подключённые записи сами.
IP превращаются в ip4:/ip6:, домены — в include:. Разделяйте пробелами или запятыми.
-all, когда список полный; ~all, пока ещё проверяете.
- Хост
@example.com- Тип
TXT- Значение
v=spf1 a mx include:_spf.google.com ~all- Файл зоны
example.com. 3600 IN TXT "v=spf1 a mx include:_spf.google.com ~all"
Доставлять как обычно и слать отчёты. Начните отсюда.
Отправлять такую почту в спам.
Отклонять такую почту. Конечная цель.
mailto: добавится сам. Несколько адресов — через запятую.
Выравнивание и отчёты о сбоях
Включайте по шагам: несколько недель none с отчётами, потом quarantine, потом reject.
- Хост
_dmarc_dmarc.example.com- Тип
TXT- Значение
v=DMARC1; p=none; rua=mailto:dmarc@example.com- Файл зоны
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
Как пользоваться
- Вставьте TXT-значение во вкладку Разбор: голую запись, в кавычках или целые строки из
digили файла зоны. - Читайте таблицу сверху вниз. SPF проверяет части слева направо и останавливается на первом совпадении, так что порядок важен.
- Сначала исправьте всё, что помечено как Ошибка, потом предупреждения.
- Нужна запись с нуля? Откройте Собрать SPF или Собрать DMARC, выберите нужное и скопируйте хост и значение в панель DNS.
- Проверьте живую запись:
dig TXT example.com +shortиdig TXT _dmarc.example.com +short(в Windows:nslookup -type=TXT example.com).
Что он делает
SPF, DKIM и DMARC — это TXT-записи в вашем DNS. SPF перечисляет серверы, которым можно отправлять почту от имени домена. DKIM публикует открытый ключ, которым проверяют подпись писем. DMARC говорит получателю, что делать, если проверки не прошли, и куда слать отчёты. Подробнее, с игрушкой, — в посте SPF, DKIM и DMARC: что это такое?
Разбор следует RFC 7208 для SPF и RFC 7489 для DMARC. Он отмечает то, из-за чего получатели отбрасывают запись: вторую запись SPF, больше 10 DNS-запросов, неизвестный механизм, отсутствие p=. И то, что формально допустимо, но неразумно: +all, ptr, p=none без адреса для отчётов. Вставьте ключ DKIM (v=DKIM1) — разберёт и его.
DNS он не запрашивает, и это нарочно. Запрос отдал бы ваш домен резолверу, а всё, что вы вводите здесь, остаётся в браузере. В этом же и предел: он считает запросы в той записи, что вы вставили, но не внутри каждого include:. Если вы близки к 10, достаньте эти записи через dig и вставьте их тоже.
DMARC включайте поэтапно. Начните с p=none и адреса rua, две-четыре недели читайте отчёты и добавьте в SPF и DKIM забытых отправителей. Потом p=quarantine (с pct=25, если страшно) и наконец p=reject.
Вопросы
Что ставить: ~all или -all?
~all — пока вы ещё выясняете, кто отправляет почту от вашего имени, -all — когда список полный. Если DMARC опубликован, большинство получателей смотрят на его политику, а не на голый результат SPF, так что разница меньше, чем кажется. +all не ставьте никогда: он разрешает слать почту от вашего имени кому угодно.
Что делает p=none?
С почтой — ничего: получатели доставляют её как обычно и присылают отчёты о том, что прошло проверку, а что нет. Это безопасный первый шаг, если добавить rua=mailto:…. Без адреса для отчётов вы ничего не отслеживаете.
Можно ли две записи SPF?
Нет. У домена должна быть ровно одна TXT-запись, начинающаяся с v=spf1. Если их две, получатели возвращают permerror и SPF не проходит ни для одного письма. Объедините их: один v=spf1, все include: и ip4:, один all в конце.
Что за лимит в 10 DNS-запросов у SPF?
Проверяя одну запись SPF, получатель сдаётся после 10 DNS-запросов и возвращает permerror. include, a, mx, ptr, exists и redirect стоят по одному, как и каждый такой же внутри подключённых записей. ip4, ip6 и all бесплатны. Уберите сервисы, которыми больше не пользуетесь, или замените include диапазонами IP за ним.
Почему DMARC не проходит, если SPF прошёл?
Потому что DMARC требует ещё и выравнивания (alignment): домен, прошедший проверку, должен совпадать с доменом в адресе From, который видит человек. SPF проверяет адрес для возвратов (Return-Path), а сервисы рассылок и CRM часто подставляют туда свой домен, так что SPF проходит для их домена, а не для вашего. DMARC проходит, когда SPF или DKIM проходит и выровнен, поэтому обычное решение — DKIM-подпись вашим доменом (большинство сервисов дают для этого записи CNAME или TXT) или свой return-path на вашем поддомене. Мягкое выравнивание, оно по умолчанию, принимает любой поддомен вашего домена; aspf=s и adkim=s требуют точного совпадения.