Если с вашего домена отправляются письма клиентам, сотрудникам или пользователям сайта, стоит правильно настроить SPF, DKIM и DMARC. Без этих записей письма могут чаще попадать в спам, не проходить проверки почтовых серверов или вообще отклоняться.
SPF, DKIM и DMARC решают разные задачи, но работают вместе.
SPF определяет, какие серверы имеют право отправлять письма от имени вашего домена.
DKIM добавляет к письму цифровую подпись. Почтовый сервер получателя проверяет её и убеждается, что письмо действительно прошло через авторизованную систему отправки и не было изменено.
DMARC определяет, что делать с письмами, которые не проходят проверки SPF или DKIM, а также позволяет получать отчёты об отправке почты от имени вашего домена.
Что нужно подготовить
Перед настройкой SPF, DKIM и DMARC понадобится доступ к DNS-зоне домена.
Также необходимо знать, через какие сервисы отправляется почта.
Например:
-
собственный почтовый сервер;
-
cPanel или другая панель управления;
-
Google Workspace;
-
Microsoft 365;
-
Amazon SES;
-
Mailgun;
-
SendGrid;
-
SMTP-сервер хостинга;
-
другая почтовая платформа.
Это важно, потому что значения SPF и DKIM зависят от используемой системы отправки.
Не копируйте SPF или DKIM с другого домена. Записи должны соответствовать именно вашей почтовой инфраструктуре.
Как работает SPF
SPF (Sender Policy Framework) — это TXT-запись в DNS, которая указывает, какие серверы имеют право отправлять почту от имени домена.
Пример простой SPF-записи:
v=spf1 ip4:203.0.113.10 -all
В данном случае сервер с IP 203.0.113.10 разрешён для отправки почты от имени домена. Остальные серверы не должны проходить SPF-проверку.
Если вы используете сторонний почтовый сервис, он обычно предоставляет готовую SPF-запись.
Например:
v=spf1 include:example-mail.com -all
Точное значение необходимо брать из документации или панели используемого сервиса.
Как добавить SPF-запись
Откройте DNS-зону домена.
Создайте новую запись со следующими параметрами.
Тип:
TXT
Имя / Host:
@
Некоторые DNS-провайдеры вместо @ требуют указать сам домен.
Значение:
v=spf1 ip4:203.0.113.10 -all
Замените IP-адрес на адрес вашего почтового сервера либо используйте SPF-запись, которую предоставил ваш почтовый сервис.
После сохранения дождитесь обновления DNS.
Проверить запись можно через:
dig TXT example.com
или:
nslookup -type=TXT example.com
Замените example.com на свой домен.
Важное правило SPF
Для одного домена обычно должна использоваться только одна SPF-запись.
Например, такая конфигурация неправильная:
v=spf1 ip4:203.0.113.10 -all
v=spf1 include:example-mail.com -all
Если почта отправляется через несколько сервисов, их необходимо объединить в одну запись.
Например:
v=spf1 ip4:203.0.113.10 include:example-mail.com include:another-provider.com -all
Конкретные значения зависят от используемых почтовых сервисов.
Несколько отдельных SPF-записей могут привести к ошибке PermError при проверке SPF.
Ограничение SPF по количеству DNS-запросов
При проверке SPF существует ограничение — не более 10 DNS-запросов.
Проблема может возникнуть, если SPF содержит много include и других механизмов, которые сами обращаются к DNS.
Например:
v=spf1 include:provider1.example include:provider2.example include:provider3.example -all
Каждый из этих сервисов может ссылаться на дополнительные DNS-записи.
Поэтому сложные SPF-записи стоит проверять специальными инструментами перед использованием.
Как работает DKIM
DKIM (DomainKeys Identified Mail) добавляет к исходящему письму криптографическую подпись.
Почтовый сервер отправителя подписывает сообщение с помощью приватного ключа. Публичная часть ключа публикуется в DNS.
Когда письмо приходит получателю, его почтовый сервер получает публичный ключ из DNS и проверяет подпись.
DKIM-запись обычно имеет вид:
default._domainkey.example.com
Но селектор может называться по-другому:
google._domainkey.example.com
selector1._domainkey.example.com
mail._domainkey.example.com
Точное название селектора определяет почтовый сервис.
Как включить DKIM
Порядок настройки зависит от используемого почтового сервиса.
Обычно сервис генерирует DKIM-ключ и показывает DNS-запись, которую необходимо добавить в домен.
Например:
Тип:
TXT
Имя / Host:
selector1._domainkey
Значение:
v=DKIM1; k=rsa; p=PUBLIC_KEY
Реальный параметр p= будет содержать длинный публичный ключ.
Не изменяйте ключ вручную. Скопируйте значение непосредственно из панели используемого почтового сервиса.
Некоторые сервисы используют вместо TXT запись типа CNAME. В этом случае необходимо создать именно тот тип записи и указать то значение, которое предоставил сервис.
DKIM при использовании нескольких почтовых сервисов
Если письма отправляются через несколько сервисов, у каждого из них может быть собственный DKIM-селектор.
Например:
google._domainkey.example.com
selector1._domainkey.example.com
mail._domainkey.example.com
Это нормально.
Главное, чтобы каждый сервис использовал собственный селектор и соответствующий ему публичный ключ.
Как проверить DKIM
После добавления записи можно проверить её через DNS:
dig TXT selector1._domainkey.example.com
или:
nslookup -type=TXT selector1._domainkey.example.com
Вместо selector1 укажите селектор, который предоставил ваш почтовый сервис.
В результате должен отображаться публичный DKIM-ключ.
Если почтовый сервис по-прежнему сообщает, что DKIM не настроен, проверьте правильность имени записи и самого ключа. Также учитывайте время обновления DNS.
Как работает DMARC
DMARC (Domain-based Message Authentication, Reporting, and Conformance) использует результаты SPF и DKIM и позволяет задать политику обработки писем, которые не проходят проверку.
DMARC также проверяет соответствие домена, указанного в адресе отправителя, домену, прошедшему SPF или DKIM-аутентификацию.
Простейшая DMARC-запись:
v=DMARC1; p=none
Она размещается по адресу:
_dmarc.example.com
Как добавить DMARC-запись
Откройте DNS-зону домена и создайте TXT-запись.
Тип:
TXT
Имя / Host:
_dmarc
Значение:
v=DMARC1; p=none
Сохраните запись.
Политика p=none подходит для первоначальной настройки. Она позволяет наблюдать за результатами проверок, не требуя от почтовых серверов отклонять или помещать письма в спам.
Политики DMARC
DMARC поддерживает три основные политики.
None
p=none
Получателю предлагается только собирать информацию о результатах проверки.
Это наиболее безопасный вариант для первоначальной настройки DMARC.
Quarantine
p=quarantine
Письма, которые не проходят DMARC, должны рассматриваться как подозрительные. В зависимости от настроек почтового сервера получателя они могут попасть в спам или карантин.
Reject
p=reject
Письма, которые не проходят DMARC, должны отклоняться.
Это наиболее строгий вариант политики, но включать его сразу не стоит. Сначала необходимо убедиться, что все легитимные отправители правильно настроены.
Как получать отчёты DMARC
DMARC позволяет получать агрегированные отчёты о том, какие серверы отправляют письма от имени вашего домена и проходят ли они проверки.
Например:
v=DMARC1; p=none; rua=mailto:dmarc@example.com
Параметр rua указывает адрес, на который будут отправляться агрегированные отчёты.
Можно использовать более полный вариант:
v=DMARC1; p=none; rua=mailto:dmarc@example.com; adkim=s; aspf=s
Убедитесь, что указанный почтовый ящик существует и доступен.
Если домен используется для большого количества писем, отчётов может приходить довольно много. В таких случаях удобно использовать отдельный почтовый ящик или специализированный сервис анализа DMARC.
Какую DMARC-политику выбрать
При первой настройке рекомендуется начать с:
v=DMARC1; p=none; rua=mailto:dmarc@example.com
После этого необходимо изучить отчёты и определить все легитимные источники отправки почты.
Когда вы убедитесь, что все необходимые сервисы проходят SPF и DKIM, можно перейти к:
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com
После дополнительной проверки можно использовать:
v=DMARC1; p=reject; rua=mailto:dmarc@example.com
Не рекомендуется сразу устанавливать p=reject, особенно если SPF и DKIM ранее не использовались. В таком случае можно случайно заблокировать настоящие письма от собственного сайта, CRM или других сервисов.
Как SPF, DKIM и DMARC работают вместе
У каждой технологии своя задача.
SPF отвечает на вопрос:
Какие серверы имеют право отправлять почту от имени домена?
DKIM отвечает на вопрос:
Действительно ли письмо было подписано авторизованной системой и не было изменено после отправки?
DMARC отвечает на вопрос:
Что делать с письмом, которое не прошло проверку, и куда отправлять отчёты?
Упрощённо схема выглядит так:
example.com
│
├── SPF
│ └── Разрешённые серверы отправки
│
├── DKIM
│ └── Цифровая подпись письма
│
└── DMARC
└── Политика проверки и отчёты
Для нормальной защиты домена рекомендуется использовать все три механизма.
Как проверить итоговую конфигурацию
После добавления записей проверьте их через DNS.
SPF:
dig TXT example.com
DKIM:
dig TXT selector1._domainkey.example.com
DMARC:
dig TXT _dmarc.example.com
Также отправьте тестовое письмо на Gmail, Outlook или другой почтовый сервис.
В заголовках письма найдите результаты аутентификации. В идеальном случае они будут выглядеть примерно так:
spf=pass
dkim=pass
dmarc=pass
Формат заголовков зависит от используемого почтового сервиса.
Частые проблемы с SPF
Несколько SPF-записей
Если у домена опубликованы две отдельные SPF-записи, их необходимо объединить.
Неправильно:
v=spf1 ip4:203.0.113.10 -all
v=spf1 include:example-mail.com -all
Правильно:
v=spf1 ip4:203.0.113.10 include:example-mail.com -all
Добавили новый почтовый сервис
Если вы начали отправлять письма через новый сервис, его необходимо добавить в существующую SPF-запись.
Не создавайте для него вторую SPF-запись.
Превышен лимит DNS-запросов
Большое количество include, a, mx и других DNS-механизмов может привести к превышению лимита в 10 запросов.
В этом случае SPF-запись необходимо оптимизировать.
Частые проблемы с DKIM
Неправильный селектор
Имя DNS-записи должно точно соответствовать селектору, который предоставил почтовый сервис.
Например, если сервис требует:
selector1._domainkey.example.com
не нужно создавать:
default._domainkey.example.com
если default не указан в настройках вашего почтового сервиса.
DKIM-ключ скопирован с ошибкой
DKIM-ключ обычно достаточно длинный. Даже один пропущенный или лишний символ может сделать запись недействительной.
Лучше всего копировать значение непосредственно из панели почтового сервиса.
DNS ещё не обновился
После изменения DNS запись может быть доступна не сразу.
Если сервис не видит правильный DKIM, проверьте запись через dig или nslookup и подождите обновления DNS-кэшей.
Частые проблемы с DMARC
Слишком строгая политика
Если сразу установить:
p=reject
можно заблокировать легитимные письма.
При первоначальной настройке лучше использовать:
p=none
и сначала собрать статистику.
Легитимные письма не проходят DMARC
Такое часто происходит, когда письма отправляются не только основным почтовым сервером, но и:
-
сайтом;
-
CRM;
-
формой обратной связи;
-
системой рассылок;
-
Help Desk;
-
внешним SMTP-сервисом.
Необходимо проверить каждый источник отправки и настроить для него SPF и DKIM.
DMARC размещён не там
Запись должна находиться по адресу:
_dmarc.example.com
а не непосредственно в корне домена:
example.com
Если используется несколько сервисов отправки
Для корпоративного домена это обычная ситуация.
Например:
-
Microsoft 365 используется для корпоративной почты;
-
сайт отправляет уведомления самостоятельно;
-
Amazon SES используется для транзакционных писем;
-
отдельная платформа используется для маркетинговых рассылок.
Все эти источники необходимо учитывать.
SPF должен разрешать необходимые сервисы отправки, а каждый сервис может иметь собственный DKIM-селектор.
После этого DMARC проверяет результаты аутентификации.
Перед переходом на p=reject убедитесь, что все легитимные источники почты настроены правильно.
Рекомендуемая конфигурация
Для обычного домена конфигурация может выглядеть следующим образом.
SPF:
v=spf1 ip4:203.0.113.10 include:example-mail.com -all
DKIM:
selector1._domainkey.example.com
При этом публичный ключ должен быть предоставлен вашим почтовым сервисом.
DMARC:
v=DMARC1; p=none; rua=mailto:dmarc@example.com
После проверки отчётов и исправления проблем можно постепенно ужесточить DMARC-политику:
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com
А затем:
v=DMARC1; p=reject; rua=mailto:dmarc@example.com
Конкретная конфигурация зависит от того, сколько сервисов отправляет письма от имени вашего домена.