SPF, DKIM и DMARC для домена в 2026 году: как настроить по новому RFC 9989

В мае 2026 года IETF выпустила RFC 9989, новую основную спецификацию DMARC, и вместе с ней RFC 9990 про сводные отчёты и RFC 9991 про отчёты о сбоях. Старый RFC 7489 от 2015 года теперь устарел. Записи по-прежнему начинаются с v=DMARC1, так что рабочие настройки не ломаются, но часть тегов и советов поменялась. Хороший повод пересобрать заметку о том, как настроить SPF, DKIM и DMARC для домена.

Зачем это всё: без SPF, DKIM и DMARC письма с вашего домена легко подделать, спамеры шлют «от имени» support@ваш-домен, а почтовые сервисы относятся к такой почте с недоверием. Три механизма в DNS закрывают разные слои проверки. Ниже что это, как собрать записи и в каком порядке их вводить, чтобы не уронить доставку.

SPF, DKIM и DMARC: кто за что отвечает

  • SPF (Sender Policy Framework): TXT-запись у домена со списком серверов, которым можно слать почту от его имени. Получатель сверяет IP отправителя с этим списком.
  • DKIM (DomainKeys Identified Mail): цифровая подпись тела письма и выбранных заголовков. Открытый ключ лежит в DNS, закрытый на почтовом сервере (Postfix, Exim, сервис рассылок). Если письмо по пути не меняли, подпись сходится.
  • DMARC: политика поверх SPF и DKIM. Говорит получателю, что делать с письмами, которые не прошли проверку, и куда слать отчёты. Главное требование здесь выравнивание (alignment): домен в From должен совпадать с доменом, который прошёл SPF или DKIM.

По отдельности механизмы слабые: SPF ломается на пересылке, а DKIM без DMARC не говорит, как поступать с поддельными письмами. Вместе они дают и техническую проверку, и понятную политику для получателя.

Что требуют Gmail и Яндекс

Это давно не пожелания. По руководству Gmail для отправителей, с 1 февраля 2024 года всем, кто шлёт письма на адреса Gmail, нужен SPF или DKIM, а тем, кто отправляет больше 5000 писем в день, SPF, DKIM и DMARC сразу, причём домен в From должен совпадать с доменом SPF или DKIM. Ключ DKIM должен быть не короче 1024 бит, Google советует 2048. Письма без проверки подлинности Gmail может отклонить с ошибкой 5.7.26.

У Яндекса в требованиях к честным рассылкам DKIM на всех письмах и SPF для домена обязательны, DMARC рекомендован. Если почта уходит медленно или в спам, полезно ещё проверить PTR и DNS сервера, это разобрано в заметке про медленную отправку через Sendmail.

Порядок внедрения

Разумная схема такая: сначала собрать всех, кто шлёт почту от домена (свой SMTP, Яндекс 360, Google Workspace, сервис рассылок, CRM, тикет-система), потом SPF, затем DKIM на каждом легальном источнике и в конце DMARC с мягкой политикой, которую постепенно ужесточают.

Шаг 1. SPF: одна запись и не больше 10 DNS-запросов

На одно имя домена (или поддомена, с которого реально шлёте) публикуется одна TXT-запись SPF. Если записей две, проверка заканчивается ошибкой permerror, и SPF фактически не работает.

v=spf1 include:_spf.yandex.net include:_spf.google.com ip4:203.0.113.10 -all
  • include: подключает серверы чужих сервисов, точное значение берите из документации провайдера;
  • ip4: и ip6: это ваши собственные серверы;
  • ~all (softfail) на время отладки, -all (fail), когда список полный;
  • не больше 10 механизмов, которые требуют DNS-запроса, считая вложенные include.

Лимит в 10 запросов прописан в RFC 7208: include, a, mx, ptr, exists и redirect считаются, а ip4, ip6 и all нет. Если лимит превышен, результат снова permerror. Ещё RFC советует ограничивать «пустые» запросы, на которые DNS ничего не вернул, двумя.

Шаг 2. DKIM: ключ 2048 бит и selector

На почтовом сервере или в сервисе рассылок создаётся пара ключей. По RFC 8301, RSA-ключ должен быть не короче 1024 бит, а лучше от 2048, подпись rsa-sha1 больше не принимается, только rsa-sha256. Есть и подпись Ed25519 из RFC 8463, но её проверяют не все, поэтому её ставят второй подписью рядом с RSA. Открытый ключ публикуется TXT-записью:

selector._domainkey.example.com.  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBg..."

selector это любое имя: mail, s1, yandex. В заголовке DKIM-Signature письма стоит тот же selector. Ключ 2048 бит не влезает в одну строку TXT длиной 255 символов, поэтому его разбивают на несколько строк в кавычках, большинство панелей DNS делают это сами. Для смены ключа заводят новый selector, ждут, пока запись разойдётся по DNS, переключают подпись и только потом убирают старый ключ.

Шаг 3. DMARC: от p=none к quarantine

Запись TXT на имени _dmarc.example.com:

v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com; adkim=r; aspf=r
  • p=none: только наблюдение, с этого начинают;
  • p=quarantine: не прошедшие проверку письма уходят в спам;
  • p=reject: такие письма отклоняются;
  • rua: адрес для сводных XML-отчётов, крупные почтовые сервисы шлют их раз в сутки;
  • ruf и fo: отчёты по отдельным письмам, теперь они описаны в RFC 9991, и шлют их немногие;
  • adkim и aspf: r мягкое выравнивание (совпадает основной домен), s строгое (совпадает имя целиком).

Что поменял RFC 9989. Тег pct (доля писем, к которым применять политику) убран, его частично заменяет t=y: тестовый режим, когда получатель применяет политику на уровень мягче. Убраны rf и ri. Добавлены np (политика для несуществующих поддоменов) и psd (для доменов публичных суффиксов). Вместо списка публичных суффиксов организационный домен теперь ищется обходом дерева DNS. Старые записи с pct=100 работать не перестанут, но этот тег можно убрать.

Про p=reject новый стандарт стал осторожнее. Для доменов с обычными ящиками сотрудников, которые пишут в рассылки и списки, ставить reject не рекомендуется: пересылка через списки рассылок ломает проверку, и легальные письма режутся. Если reject всё же нужен, RFC советует сначала месяц прожить на p=none, потом столько же на p=quarantine и сравнить отчёты. Для доменов, с которых шлют только транзакционные письма и рассылки, reject по-прежнему нормальный финал.

Поддомены наследуют политику основного домена, если у них нет своей записи. Для них есть тег sp, а для несуществующих поддоменов теперь np.

Проверка

dig +short TXT example.com
dig +short TXT selector._domainkey.example.com
dig +short TXT _dmarc.example.com

Онлайн записи удобно смотреть в MXToolbox и Check MX из набора Google Admin Toolbox, итоговое письмо целиком проверяет mail-tester.com. Надёжнее всего отправить тестовое письмо в Gmail и Яндекс и посмотреть в исходнике письма заголовок Authentication-Results: там должно быть spf=pass, dkim=pass и dmarc=pass.

Частые ошибки

  • две и больше записи SPF на одном имени;
  • больше 10 DNS-запросов в SPF из-за цепочки include;
  • забыли include сервиса рассылок, и маркетинговые письма валят DMARC;
  • ключ DKIM обрезан в DNS, потому что не разбили на строки;
  • сразу p=reject без отчётов, и режутся легальные письма;
  • From на одном домене, а SPF и DKIM только на другом, без выравнивания.

Сопровождение

Раз в квартал сверяйте список include с реальными отправителями. При смене сервиса рассылок сначала добавьте его в SPF и включите DKIM, потом переключайте отправку. Отчёты DMARC удобно складывать в отдельный ящик и разбирать парсером или готовым сервисом. В дополнение к тройке стоит включить TLS для почты (MTA-STS и TLS-RPT) и двухфакторную авторизацию на ящиках.

Краткий чеклист

  1. Собрать все IP и сервисы, которые шлют от домена.
  2. Опубликовать одну правильную запись SPF, уложиться в 10 запросов, закончить на ~all или -all.
  3. Включить DKIM с ключом 2048 бит на каждом источнике и проверить selector в DNS.
  4. Поставить DMARC p=none с rua и читать отчёты.
  5. Через месяц перейти на quarantine, а reject только там, где он не мешает людям.

В итоге SPF, DKIM и DMARC сейчас обязательный минимум для любого домена, с которого уходит почта: без них Gmail и Яндекс режут письма или отправляют их в спам. Новый стандарт DMARC (RFC 9989) старые записи не ломает, но убрал pct, добавил np и t и советует не спешить с p=reject для обычных почтовых доменов.

Источники и ссылки


Комментарии загружаются…