Проверка SPF, DKIM и DMARC

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

I know my DKIM selector

It is the value after s= in the DKIM-Signature header of a message you sent. Put commas between several names. About three dozen usual names are tried without asking.

Or try gmail.com · outlook.com · wikipedia.org

The domains you look up are not saved. To slow down abuse, a one-way hash of your IP address is held for two hours at most, then deleted.

Строка отправителя в письме ничего не доказывает

Электронная почта задумана как бумажный конверт. Отправитель сам пишет обратный адрес, и никто его не проверяет. Сервер в любой стране может отправить письмо, в строке From которого стоит ваш домен. Три более поздних дополнения закрывают эту брешь, и все три живут в вашей DNS-зоне в виде TXT-записей.

SPF, на самом домене
Список серверов, которым разрешено отправлять почту от имени домена. Получатель сравнивает IP-адрес подключившегося сервера со списком.
DKIM, на selector._domainkey
Открытый ключ. Сервис-отправитель подписывает каждое письмо соответствующим закрытым ключом, и получатель может убедиться, что письмо никто не изменял, и узнать, какой домен за него ручается.
DMARC, на _dmarc
Ваше указание для писем от имени вашего домена, которые не прошли ни одну из проверок: доставить, отправить в спам или отклонить. Там же указывается ящик для ежедневных отчетов.

С февраля 2024 года Gmail и Yahoo отклоняют массовые рассылки с доменов без этих записей, а в 2025 году то же сделала Microsoft для Outlook.com.

Что смотрит проверка

Она начинает с ваших записей MX, чтобы распознать почтового провайдера (Google Workspace, Microsoft 365, Proton Mail, Fastmail и еще восемь). Отсюда она знает, какой include в SPF и какие селекторы DKIM ожидать.

ЗаписьСчитается ошибкойСчитается предупреждением
SPFНет записи на домене с почтовыми серверами; две записи; больше 10 DNS-запросов; include без собственной SPF или с зацикливанием; параметр с опечаткой; +all; больше двух запросов, которые ничего не возвращаютОт 8 до 10 запросов; ?all или нет all; ptr; параметры после all; ваш почтовый провайдер отсутствует в списке
DKIMОпубликованный ключ, которым нельзя пользоваться: RSA короче 1024 бит, поврежденное значение p=, неизвестный алгоритмНет ключа ни под одним из проверенных имен; ключ длиной 1024 бита; тестовый флаг t=y
DMARCНет записи; две записи; нет корректного p=; неверно записанный адрес для отчетов или значение тегаp=none; pct меньше 100; sp=none при более строгой политике; отчеты уходят на другой домен, который не дал согласия их получать

Запросы считаются через все вложенные include, и обычно именно там лимит в 10 превышается так, что никто этого не замечает. Для поддомена поиск DMARC поднимается к родительскому домену и применяет его значение sp=. Общий вердикт равен худшему из трех результатов. О трех необязательных записях (MTA-STS, TLS-RPT, BIMI) сообщается только, опубликованы они или нет.

Домен, вся запись SPF которого состоит из v=spf1 -all, считается доменом, который ничего не отправляет. Отсутствие ключа DKIM для него нормально, а рекомендуемый DMARC: p=reject.

Как найти свой селектор DKIM

У ключей DKIM нет фиксированного адреса. Каждый сервис-отправитель выбирает метку, называемую селектором, а DNS не позволяет получить их список. Проверка пробует около трех десятков обычных имен, например google, selector1, k1 и s1. Поэтому «ключ не найден» часто просто означает, что ваш называется иначе.

  1. Отправьте письмо со своего домена на ящик, который можете открыть.
  2. Откройте его исходный текст: «Показать оригинал» в Gmail, «Просмотреть исходный код сообщения» в Outlook, «Вид > Сообщение > Все заголовки» в Apple Mail.
  3. Найдите строку, которая начинается с DKIM-Signature:, и прочитайте два тега. d= это подписывающий домен, а s= это селектор.
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=mta2024; …

В этом случае введите mta2024 в поле селектора. Если в d= стоит имя вашей платформы рассылок, а не ваш домен, письмо подписано, но не вами, и для DMARC такая подпись не засчитывается. Наш расшифровщик заголовков писем прочитает эти строки за вас.

Исправлять в безопасном порядке

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

Опубликуйте DMARC с p=none и адресом rua= и несколько недель читайте отчеты с помощью программы чтения отчетов DMARC. Когда все законные источники начнут проходить проверку, переходите на quarantine, затем на reject. Генератор записей напишет обе записи.

Эта проверка читает DNS и не видит ни одного вашего письма. Она не может подтвердить, что сервис действительно подписывает найденным ключом или что подписывающий домен совпадает с вашим адресом From. Для этого нужны заголовки доставленного письма.

Частые вопросы

Почему мои письма попадают в спам, хотя SPF, DKIM и DMARC проходят?

Аутентификация доказывает, кто отправил письмо. Она ничего не говорит о том, хотят ли его получать. Фильтры учитывают также долю жалоб, репутацию IP-адреса и домена отправителя, ссылки в письме и то, как получатели реагировали на прежние письма. Начните с проверки по черным спискам.

Может ли у домена быть две записи SPF?

Нет. Две TXT-записи, начинающиеся с v=spf1, дают постоянную ошибку, и получатели ведут себя так, будто записи нет вовсе. Объедините их в одну v=spf1 со всеми параметрами include: и ip4: и одним all в конце.

Что означает «SPF PermError: too many DNS lookups»?

Для разбора вашей записи понадобилось больше 10 DNS-запросов. Каждый include, a, mx, exists и redirect стоит одного запроса, и include внутри include тоже считаются. Уберите сервисы, которыми больше не пользуетесь, или замените a и mx фиксированными адресами ip4:, которые ничего не стоят.

Чем заканчивать SPF: ~all или -all?

При настроенном DMARC подходит и то и другое: судьбу непрошедшего письма решает DMARC. ~all надежнее, пока вы еще выясняете, кто отправляет почту. Никогда не используйте +all: он разрешает отправку любому серверу в интернете.

Достаточно ли p=none для Gmail и Yahoo?

Да, их правила для массовых отправителей принимают p=none. Но это дает вам только отчеты, а поддельные письма по-прежнему доставляются. Защита начинается с quarantine.

Нужен ли DMARC домену, который никогда не отправляет почту?

Именно там его проще всего настроить и пользы от него больше всего: припаркованный домен удобная маскировка для фишинга. Опубликуйте v=spf1 -all на домене и v=DMARC1; p=reject; на _dmarc.