SPF, DKIM и DMARC: как сделать, чтобы деловые письма доходили до адресата
Опубликовано · 9 мин чтения
Прослушать статью · читает голос ИИ
Допустим, вы отправляете клиенту счёт с адреса info@your-company.ge, а письмо не приходит. Через неделю клиент пишет, что нашёл его в папке «Спам». Или письмо вообще не дошло, и вы об этом не узнали. Частая причина в том, что принимающий сервер не смог проверить, что письмо действительно отправлено от имени вашего домена.
Три DNS-записи, SPF, DKIM и DMARC, как раз и нужны для такого подтверждения. В статье разбираем, что делает каждая из них, чего требуют Google и Yahoo и как внедрять защиту постепенно, чтобы не потерять собственную почту. Примеры записей взяты из DNS домена esn.ge.
Почему письма попадают в спам: отправитель без подтверждения
Адрес отправителя в письме можно указать любой. Это похоже на бумажное письмо: на конверте написано «Банк», но печати нет. Получатель не знает, настоящий ли это банк. Сервер, принимающий почту, находится в такой же ситуации. Письмо подписано «info@your-company.ge», но кто его на самом деле отправил, сервер не знает.
Поэтому принимающий сервер доверяет письму только тогда, когда отправляющий домен это подтверждает:
- SPF называет серверы, которым разрешено отправлять почту от имени домена;
- DKIM подписывает каждое письмо;
- DMARC сообщает получателям, что делать с письмами, не прошедшими проверку, и присылает владельцу домена отчёты.
Если этих записей нет, вашим счетам и коммерческим предложениям грозит папка «Спам» или отказ в приёме. Google и Yahoo с февраля 2024 года прямо требуют такие настройки от отправителей.
SPF: какие серверы могут отправлять почту от имени домена
SPF — это TXT-запись домена, которая начинается с v=spf1. В ней перечислено, откуда разрешена отправка. Получив письмо, сервер сверяет, с разрешённого ли сервера оно пришло (RFC 7208).
Запись esn.ge выглядит так:
v=spf1 mx include:_spf.webhosting.systems include:_spf.protonmail.ch -all
Разберём её по частям:
v=spf1— начало записи, версия SPF;mx— разрешены серверы, указанные в MX-записях домена, то есть те, что принимают его почту;include:— добавляет разрешённые серверы другого домена. В записи два таких элемента:_spf.webhosting.systemsи_spf.protonmail.ch;-all— все остальные серверы проверку не проходят.
У SPF есть ограничение: при проверке политики допускается не более 10 элементов, требующих запроса к DNS. Сам запрос записи SPF в этот лимит не входит (Mailhardener со ссылкой на RFC 7208, раздел 4.6.4). Считается вся проверка целиком, а не только ваша строка. Каждый include: и mx требует обращения к DNS, поэтому с каждым подключённым сервисом рассылок запас уменьшается. Добавляйте в запись только тех отправителей, которыми вы действительно пользуетесь.
DKIM: подпись каждого письма
SPF проверяет сервер, DKIM проверяет само письмо. Отправляющий сервер подписывает каждое письмо закрытым ключом и добавляет подпись в заголовок DKIM-Signature. В нём указаны домен (d=) и селектор (s=). Селектор позволяет домену иметь несколько ключей одновременно (RFC 6376).
Получатель берёт по домену и селектору открытый ключ из TXT-записи по адресу <селектор>._domainkey.<домен> и проверяет подпись. Если письмо по дороге изменили, подпись перестаёт совпадать. Закрытый ключ остаётся на вашем сервере, а открытый публикуется в DNS.
Вот форма такой записи. Это пример с условными значениями для домена your-company.ge, а не реальный ключ:
mail._domainkey.your-company.ge TXT "v=DKIM1; k=rsa; p=<открытый ключ>"
Вместо <открытый ключ> подставляется ключ, который выдаёт ваш почтовый сервер или провайдер. Имя селектора (здесь mail) тоже зависит от настройки.
Учтите требование Google: для отправки на личные адреса Gmail нужен ключ DKIM длиной 1024 бита или больше.
DMARC: что происходит с письмами без подтверждения, и отчёты
SPF и DKIM сами по себе не говорят получателю, как поступать с письмом, не прошедшим проверку. Это задаёт DMARC. Его запись — TXT-запись по адресу _dmarc.<домен>.
Важное понятие здесь — соответствие (alignment). Письмо проходит DMARC, если проходит проверку SPF или DKIM и домен этой проверки соответствует домену в адресе отправителя From:, который видит получатель (RFC 9989). Так DMARC закрывает лазейку: подтверждённым оказывается именно тот адрес, который читает человек.
Политика p= имеет три значения:
p=none— только собирать отчёты, письма не затрагиваются;p=quarantine— получателям предлагается считать такие письма подозрительными, например отправить в папку «Спам»;p=reject— получателям предлагается отклонять такие письма.
Два вида отчётов настраиваются тегами: rua указывает, куда отправлять сводные (агрегированные) отчёты, ruf — куда отправлять отчёты о сбоях. По ним владелец домена видит, кто ещё отправляет почту от его имени.
В мае 2026 года вышла новая спецификация DMARC, в сообществе её называют DMARCbis. Она опубликована как три RFC: RFC 9989 (основной протокол), RFC 9990 (сводные отчёты) и RFC 9991 (отчёты о сбоях) (RFC 9989, PowerDMARC). RFC 9989 опубликован 19 мая 2026 года и заменяет RFC 7489 от 2015 года и экспериментальный RFC 9091 (SMTPedia). Теперь DMARC имеет статус предлагаемого стандарта (Proposed Standard) IETF, а раньше имел информационный статус (PowerDMARC). Записи по-прежнему начинаются с v=DMARC1, так что для большинства рабочих систем срочных действий не требуется (DMARCTrust).
Что Google и Yahoo требуют от отправителей
Google разделяет требования на два уровня. С 1 февраля 2024 года все, кто отправляет почту на адреса Gmail, обязаны выполнять первый набор. Те, кто отправляет на Gmail больше 5000 писем в сутки, должны выполнять и второй, более строгий.
| Требование | Все отправители | Более 5000 писем в сутки |
|---|---|---|
| Аутентификация домена | SPF или DKIM | SPF и DKIM |
| DMARC | в списке не назван | нужен, политика может быть none |
Соответствие домена в From: |
в списке не названо | домену SPF или домену DKIM |
| Доля жалоб на спам в Postmaster Tools | ниже 0,3% | действует и этот пункт, он относится ко всем |
| Отписка в один клик | в списке не названа | нужна для рассылок и подписных писем |
Ещё два пояснения от Google. В разделе о мониторинге советуют держать долю жалоб ниже 0,10% и никогда не доходить до 0,30% и выше. Отписка в один клик работает через заголовки List-Unsubscribe-Post: List-Unsubscribe=One-Click и List-Unsubscribe (RFC 2369, RFC 8058); кроме того, в тексте письма должна быть хорошо заметная ссылка для отписки.
Yahoo начала применять свои требования в феврале 2024 года. Вводились они постепенно: компания наблюдала за соблюдением в течение первой половины года. Минимум для отправителя — реализовать SPF или DKIM.
Для небольшой компании вывод простой. Даже если вы отправляете далеко не 5000 писем в сутки, SPF или DKIM обязательны, а лучше настроить оба. DMARC в первом списке Google не назван, но именно он даёт вам отчёты и контроль над тем, что происходит с письмами. Поэтому мы советуем настраивать все три записи.
Вводим постепенно: от p=none через p=quarantine к p=reject
Строгая политика DMARC без подготовки опасна. Если вы забыли какой-то сервис, который отправляет почту от вашего имени (например, систему выставления счетов), его письма начнут отклоняться. Поэтому политику ужесточают поэтапно:
p=none. Письма не затрагиваются, вы только получаете отчёты. По ним видно, кто отправляет почту от имени домена и что проходит проверку.p=quarantine. Когда все законные отправители подтверждены, письма с провалом проверки считаются подозрительными.p=reject. Письма без подтверждения отклоняются.
Между шагами нужно изучать отчёты. Сроки зависят от того, сколько у вас отправителей.
Запись DMARC домена esn.ge сейчас использует p=quarantine:
v=DMARC1;p=quarantine;sp=quarantine;pct=100;rua=mailto:dmarc@reports.epicsoft.email;ruf=mailto:dmarc@reports.epicsoft.email;ri=86400;aspf=r;adkim=r;fo=1;rf=afrf;
Теги разделены точкой с запятой, без пробелов. Что означает каждый:
v=DMARC1— версия протокола;p=quarantine— политика для домена;sp=quarantine— та же политика для поддоменов;pct=100— политика применяется ко всем письмам; тег убран в RFC 9989;rua=mailto:…— адрес для сводных отчётов;ruf=mailto:…— адрес для отчётов о сбоях;ri=86400— интервал отчётов; тег убран в RFC 9989;aspf=rиadkim=r— мягкое (relaxed) соответствие для SPF и DKIM;fo=1— отчёт о сбое запрашивается при провале любой из проверок;rf=afrf— формат отчётов; тег убран в RFC 9989.
Что изменилось в RFC 9989:
- убраны теги
pct,rfиri. Вместоpctпоявился тегt(тестовый режим), у которого только два состояния: «всё» (100%) или «ничего» (0%) (dmarcian). Эти три тега в нашей записи остались от прежней спецификации. В новых записях использовать их не нужно; - добавлен тег
np— политика для несуществующих поддоменов. Если он не указан, действует политикаsp(RFC 9989); - добавлен тег
psdдля доменов общедоступных суффиксов; - организационный домен определяется обходом дерева DNS (DNS Tree Walk), а не списком Public Suffix List (DMARCTrust).
Уже работающие записи продолжают действовать.
Дополнительно: MTA-STS для шифрования при передаче
SPF, DKIM и DMARC подтверждают отправителя. Они не гарантируют, что письмо по пути к вам зашифровано. Для этого есть MTA-STS: домен объявляет, что почту для него нужно доставлять только по TLS с действительным сертификатом (RFC 8461).
Устроено это из двух частей. Первая — TXT-запись по адресу _mta-sts.<домен> со значениями v=STSv1 и id, который меняется при каждом изменении политики. Вторая — сама политика: файл /.well-known/mta-sts.txt, доступный по HTTPS на поддомене mta-sts вашего домена, с режимом enforce, testing или none.
У домена esn.ge запись _mta-sts.esn.ge является CNAME на _mta-sts.epicsoft.email. Там находится TXT-запись:
v=STSv1;id=20261012084000
То есть esn.ge берёт запись MTA-STS у почтового домена epicsoft.email.
Как это настраивает epicsoft
В почтовой услуге epicsoft networks при подключении создаются почтовые ящики и DNS-записи вашего домена: MX, SPF, DKIM и DMARC. Записи можно настроить у вашего DNS-провайдера вместе с вами, либо DNS домена ведёт epicsoft. Почта хранится на собственных почтовых серверах в Финляндии и Германии. Письма веб-приложений в контейнерах можно направлять через наш образ smarthost (Postfix на Alpine, открытый исходный код): он передаёт почту на почтовый сервер, который покрывают записи SPF, DKIM и DMARC. Подробности: почта под вашим доменом, остальные услуги — в обзоре.
Источники
- epicsoft networks: почта под собственным доменом: серверы, DNS-записи при настройке, расположение серверов
- epicsoft-networks/smarthost на GitLab: SMTP-ретранслятор для исходящей почты из контейнеров
- Google: требования к отправителям: требования для всех отправителей и для отправителей более 5000 писем в сутки, длина ключа DKIM, отписка в один клик, доля жалоб
- Yahoo: требования к отправителям: сроки применения и минимум SPF или DKIM
- Mailhardener: лимит запросов SPF: не более 10 элементов с запросами к DNS (RFC 7208, раздел 4.6.4)
- RFC 7208: SPF, механизмы mx, include и -all
- RFC 6376: DKIM, заголовок подписи, запись открытого ключа
- RFC 9989: DMARC, соответствие, политики, теги rua, ruf, aspf, adkim и fo, новые теги np и psd, сопутствующие RFC 9990 и RFC 9991
- RFC 8461: MTA-STS, запись и файл политики
- PowerDMARC: RFC 9989: публикация в мае 2026 года, новый статус стандарта, название DMARCbis
- SMTPedia: RFC 9989: дата публикации, замена RFC 7489 и RFC 9091
- dmarcian: изменения в DMARC: убранные теги pct, rf, ri и тег t
- DMARCTrust: RFC 9989, 9990, 9991: DNS Tree Walk, совместимость существующих записей
- DNS-запись SPF esn.ge: пример записи SPF
- DNS-запись DMARC esn.ge: пример записи DMARC
- DNS-запись MTA-STS esn.ge: пример записи MTA-STS