0. Подготовка: проверяем, что уже есть в DNS
Откройте терминал и выполните:
dig +short TXT yourbrand.com
v=spf1 … ~all
default._domainkey
— частая причина DKIM-failPostmaster-бот CRMLOVE
Наш Postmaster-бот сможет автоматически напомнить, если после изменения записей метрики упали.
Подключить бота1. Генерируем DKIM-ключ
1.1. Выбираем длину
1.2. Генерация (пример — Postfix)
opendkim-genkey -b 2048 -d yourbrand.com -s default
Получите два файла: default.private
(хранится на сервере) и default.txt
(TXT-запись для DNS).
1.3. Публикация в DNS
default._domainkey.yourbrand.com. 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBg...IDAQAB"
Важно: не добавляйте переносы строк в p=
— Mail.ru читает запись как одну строку.
2. Создаём SPF-запись
2.1. Минимальный синтаксис
v=spf1 include:_spf.mtasv.net ~all
2.2. Расширенный синтаксис (несколько сервисов)
v=spf1 ip4:192.0.2.10/32 include:_spf.google.com include:sendgrid.net -all
Максимум 10 DNS-lookup — иначе SPF permerror
.
Совет: если уже 9 include-запросов, объедините их через поддомен-прокси и сократите до 1 lookup.
3. Добавляем DMARC-политику
3.1. Начинаем с none
_dmarc.yourbrand.com. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@yourbrand.com; fo=1"
3.2. Переходим на quarantine / reject
Через 2-3 недели анализа отчётов:
v=DMARC1; p=quarantine; pct=50; rua=...; ruf=mailto:forensic@yourbrand.com;
Автоматизация
Подключите DMARC-отчёты в BigQuery и настройте алерты через нашего бота — он умеет парсить XML и сигналить в Telegram, если p=reject
ловит легитимные письма.
4. Проверяем настройки
dig +short TXT _dmarc.yourbrand.com
softfail
.
5. Частые ошибки и быстрые фиксы
SPF permerror: too many DNS lookups
Вероятная причина: >10 include-/redirect-запросов
Сведите сервисы через sub-spf.yourbrand.com
DKIM fail: body hash did not verify
Вероятная причина: ESP меняет MIME-структуру после DKIM-подписи
Переключите canonicalization на relaxed/relaxed
DMARC pct = 100, но легитимные письма in spam
Вероятная причина: Поддоменные рассылки не подпадают под политику
Добавьте sp=none или отдельный _dmarc.sub. запись
6. Итоги
SPF
одна строка, ≤10 lookup, заканчиваем ~all
или -all
DKIM
храните private-key, публикуйте public-key, проверяйте selector
DMARC
начинаем с none
, постепенно ужесточаем до reject
Поддерживаем всё это через Postmaster-бота — и спим спокойно.