~/charly.cash/ статьи/ spf-dkim-dmarc
инфраструктура

SPF, DKIM, DMARC

// DNS-аутентификация почты:
настраиваем правильно с первого раза.

Три DNS-записи, без которых твои письма идут в спам вне зависимости от качества контента. Не опциональные - обязательные. Настраиваются один раз, работают постоянно.

Зачем это нужно

Почтовые провайдеры (Gmail, Outlook, Yahoo) проверяют каждое входящее письмо на подлинность: действительно ли оно отправлено с того домена, который указан в From? Без этой проверки любой мог бы слать письма от имени bank.com или google.com.

SPF, DKIM и DMARC - три механизма, которые это обеспечивают:

  • SPF - разрешает конкретным IP отправлять от имени домена
  • DKIM - криптографически подписывает письмо, гарантируя, что оно не изменено
  • DMARC - указывает что делать с письмами, которые не прошли SPF/DKIM
Без SPF и DKIM - Google Postmaster покажет репутацию 0. Письма будут отфильтрованы ещё до спама - просто отклонены. С 2024 года Gmail и Yahoo требуют SPF+DKIM как обязательные для любого домена с объёмами от 5000 писем/день.

SPF - Sender Policy Framework

SPF - это TXT-запись в DNS домена, которая перечисляет IP-адреса и серверы, которым разрешено отправлять почту от имени этого домена.

Как работает: получатель смотрит на IP отправителя → проверяет SPF-запись домена → если IP в списке - ОК, если нет - fail.

Синтаксис:

// TXT ЗАПИСЬ ДЛЯ example.com
// Базовый вариант - разрешить только сервер домена v=spf1 mx -all // Разрешить конкретный IP v=spf1 ip4:1.2.3.4 -all // Разрешить несколько IP и серверов v=spf1 ip4:1.2.3.4 ip4:5.6.7.8 include:sendgrid.net -all // Мягкий режим (рекомендуется для старта) v=spf1 ip4:1.2.3.4 ~all

Значения в конце:

  • -all - жёсткий: письма не из списка - отклонить (fail)
  • ~all - мягкий: письма не из списка - пометить как suspicious (softfail)
  • +all - разрешить всё (никогда не используй)

Для старта используй ~all (softfail) - меньше шансов случайно заблокировать нужные письма пока настраиваешь.

DKIM - DomainKeys Identified Mail

DKIM добавляет цифровую подпись к каждому письму. Получатель может проверить эту подпись через DNS-запись и убедиться что письмо не было изменено после отправки.

Как работает:

  1. Генерируешь пару ключей: приватный (на сервере) и публичный (в DNS)
  2. При отправке - майлер подписывает письмо приватным ключом
  3. Получатель берёт публичный ключ из DNS и проверяет подпись
  4. Если совпадает - письмо не было изменено при передаче

Генерация ключей:

// КОМАНДЫ НА СЕРВЕРЕ (Linux)
# Генерация приватного ключа openssl genrsa -out dkim_private.pem 2048 # Извлечение публичного ключа openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem

DNS-запись для публичного ключа:

// TXT ЗАПИСЬ: mail._domainkey.example.com
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA... // p= это твой публичный ключ (длинная строка)

Большинство майлеров (AMS, CharlySender, PowerMTA) генерируют DKIM-ключи автоматически и сразу показывают что добавить в DNS. Используй их - не делай вручную без нужды.

Важно: имя записи - selector._domainkey.domain.com. Selector - это любое слово (mail, dkim, default). Можно иметь несколько DKIM-ключей с разными selector-ами.

DMARC - Domain-based Message Authentication

DMARC - политика, которая говорит получателям: «что делать с письмами, которые не прошли SPF или DKIM».

DNS-запись: _dmarc.example.com

// TXT ЗАПИСЬ
// Мониторинг - ничего не блокировать, только отчёты v=DMARC1; p=none; rua=mailto:dmarc@example.com // Карантин - подозрительные письма идут в спам v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@example.com // Отклонение - письма без аутентификации отклоняются v=DMARC1; p=reject; pct=100; rua=mailto:dmarc@example.com

Параметры:

  • p=none - только мониторинг, без действий. Начинай с этого
  • p=quarantine - подозрительные письма в спам
  • p=reject - отклонить всё без аутентификации
  • pct=100 - применять политику к 100% писем
  • rua= - адрес для получения отчётов (можно не указывать)

Для рассылок используй p=none. Жёсткие политики нужны легальным компаниям, нам - только мониторинг.

Проверка настроек

После настройки DNS-записи вступают в силу через 5-60 минут (зависит от TTL). Проверяй:

  • mail-tester.com - отправь тестовое письмо, покажет оценку и все проблемы
  • mxtoolbox.com → MX Lookup, SPF Check, DKIM Lookup
  • dmarcanalyzer.com - проверка DMARC-записи
  • Google Admin Toolbox → Check MX - проверяет всё для Gmail

Целевой результат на mail-tester.com - 9/10 или выше. Ниже 7 - серьёзные проблемы.

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

  • Несколько SPF-записей на одном домене - можно только одну. Несколько = fail автоматически
  • Слишком много lookup в SPF - максимум 10 DNS-запросов в одной SPF-записи. Больше = permerror
  • Неправильный selector в DKIM - имя в DNS должно точно совпадать с тем, что указано в настройках майлера
  • TTL слишком высокий - при изменении DNS записей со старым TTL ждёшь часами. Ставь 300-600 секунд
  • Забыли добавить DMARC - без неё Gmail с 2024 года понижает репутацию домена

Вывод

SPF + DKIM + DMARC - это минимальный обязательный набор для любого домена, с которого идёт рассылка. Настраивается за 30 минут, работает годами. Без этого - деньги на ветер.

После настройки - прогрей домен перед запуском объёмов. И следи за репутацией через Google Postmaster Tools.

// Не забывай

Копировать можно, распространять информацию можно, но не забывай указывать первоисточник. Профита тебе бро!

📖
// СЛОВАРЬ ТЕРМИНОВ
SPF, DKIM, DMARC, DNS, Deliverability - все термины с объяснениями зачем они нужны. Открыть словарь →