opened image

DNS-записи для почты: MX, SPF, DKIM, DMARC с нуля

 

Почтовые серверы сломаны не потому что сломан Postfix. Чаще всего письма летят в спам или не доходят вовсе из-за неправильных DNS-записей. MX, SPF, DKIM и DMARC - четыре типа записей, которые вместе определяют, будет ли ваша почта доставлена. Разберём каждую по порядку: что за что отвечает, как выглядит реальная запись, как проверить и что будет если сделать неправильно.

 

 

Как работает доставка письма

 

Когда сервер mail.example.com отправляет письмо на user@gmail.com, происходит следующее:

  1. Получающий сервер делает DNS-запрос MX для домена gmail.com

  2. Получает список MX-серверов с приоритетами

  3. Подключается к MX-серверу и передаёт письмо по SMTP

  4. MX-сервер Gmail проверяет SPF - разрешён ли IP отправителя

  5. Проверяет DKIM-подпись в заголовке письма

  6. Проверяет DMARC-политику домена отправителя

  7. Принимает письмо или отправляет в спам

 

Если любой из этих шагов даёт ошибку, письмо либо отклоняется, либо помечается как подозрительное.

 

 

MX-запись: куда принимать почту

 

MX (Mail Exchanger) говорит другим серверам, куда направлять входящую почту для вашего домена.

 

Структура записи

 

example.com.    IN    MX    10    mail.example.com.
example.com.    IN    MX    20    mail2.example.com.
  • 10 и 20 - приоритет. Сервер с меньшим числом используется первым.

  • mail.example.com. - точка в конце обязательна при прямом указании в зонном файле BIND. В панелях управления точку обычно добавляют автоматически.

  • MX-запись должна указывать на A-запись (hostname), а не напрямую на IP.

 

 

Пример с одним MX

 

Если у вас один почтовый сервер на IP 203.0.113.5:

mail.example.com.    IN    A      203.0.113.5
example.com.         IN    MX    10    mail.example.com.

 

 

Проверка MX

dig MX example.com
dig MX example.com +short

 

 

 

Ожидаемый вывод:

10 mail.example.com.

 

 

Через веб: checnode.io → RECORDS →  Фильтр MX.

 

 

Типичные ошибки MX

 

MX указывает на CNAME. RFC 2181 запрещает это. Некоторые серверы принимают такие письма, другие нет. Всегда указывайте на A-запись.

Нет обратной PTR-записи. Многие серверы проверяют, что PTR-запись IP совпадает с HELO-именем сервера. Попросите хостинг-провайдера выставить PTR для вашего IP.

TTL слишком высокий при смене. Перед переездом почты снизьте TTL до 300 секунд за сутки. После переезда верните к 3600.

 

 

SPF: кто имеет право отправлять

 

SPF (Sender Policy Framework) - это TXT-запись, которая перечисляет IP-адреса и серверы, имеющие право отправлять почту от имени вашего домена.

 

Синтаксис SPF

example.com.    IN    TXT    "v=spf1 механизмы qualifier"

 

Механизмы:

  • ip4:203.0.113.5 - конкретный IPv4-адрес

  • ip4:203.0.113.0/24 - подсеть

  • ip6:2001:db8::1 - IPv6-адрес

  • mx - все серверы, указанные в MX-записях домена

  • a - A-запись самого домена

  • include:_spf.google.com - включить SPF другого домена (например, Google Workspace)

  • all - все остальные серверы

 

Квалификаторы перед механизмами:

  • + - разрешить (по умолчанию, можно не писать)

  • - - отклонить (жёсткий запрет)

  • ~ - мягкий запрет (softfail, письмо принято, но помечено)

  • ? - нейтрально

 

 

Примеры реальных SPF-записей

 

Только свой сервер:

"v=spf1 ip4:203.0.113.5 -all"

 

Свой сервер плюс Google Workspace:

"v=spf1 ip4:203.0.113.5 include:_spf.google.com -all"

 

Если отправляете только через SendGrid:

"v=spf1 include:sendgrid.net -all"

 

 

Лимит lookup-операций

 

SPF разрешает не более 10 DNS-запросов при проверке. Каждый include:, mx, a - это отдельный запрос. Если превысить лимит, проверка вернёт permerror и письмо может быть отклонено.

Проверить количество запросов: mxtoolbox.com → SPF Record Lookup → смотрите на "SPF Lookup Count".

 

 

Проверка SPF

 

dig TXT example.com | grep spf

 

 

 

 

DKIM: цифровая подпись письма

 

DKIM (DomainKeys Identified Mail) подписывает исходящие письма приватным ключом. Получающий сервер проверяет подпись по публичному ключу из DNS.

 

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

  1. При отправке Postfix/OpenDKIM добавляет в заголовок письма подпись DKIM-Signature

  2. Подпись содержит хеш части заголовков и тела письма

  3. Получающий сервер извлекает из подписи имя домена и селектор (s=default)

  4. Делает запрос default._domainkey.example.com и получает публичный ключ

  5. Проверяет подпись. Если совпадает - письмо не было изменено в пути

 

 

Генерация ключей (OpenDKIM)

 

mkdir -p /etc/opendkim/keys/example.com
opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s mail2026
chown -R opendkim:opendkim /etc/opendkim/

 

Файл публичного ключа /etc/opendkim/keys/example.com/mail2026.txt:

mail2026._domainkey    IN    TXT    ( "v=DKIM1; k=rsa; "
    "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." )

 

Это содержимое копируют в DNS как TXT-запись.

 

 

DNS-запись DKIM

 

mail2026._domainkey.example.com.    IN    TXT    "v=DKIM1; k=rsa; p=ПУБЛИЧНЫЙ_КЛЮЧ"

 

Формат имени: СЕЛЕКТОР._domainkey.ДОМЕН. Селектор может быть любым словом (mail, default, 2026). Он же указывается в конфигурации OpenDKIM.

 

 

Проверка DKIM

 

dig TXT mail2026._domainkey.example.com

 

Через веб: mxtoolbox.com → DKIM Lookup → ввести домен и селектор.

Самый точный способ - отправить письмо и посмотреть заголовки. Gmail показывает результат прямо в интерфейсе: "Отправлено через: / Подписано:".

 

 

Частые проблемы DKIM

 

Перенос строк в DNS. Публичный ключ длинный. Некоторые DNS-панели не разбивают его на части автоматически. Разбейте на строки по 255 символов, каждую в кавычках.

Неправильный селектор в Postfix. В /etc/opendkim.conf параметр Selector должен совпадать с именем в DNS.

Ключ 512 бит. Генерируйте ключи минимум 2048 бит. 512- и 1024-битные ключи не принимаются Google и Microsoft.

 

 

 

DMARC: политика обработки ошибок

 

DMARC (Domain-based Message Authentication, Reporting and Conformance) определяет, что делать с письмами, не прошедшими SPF или DKIM. Также настраивает получение отчётов.

 

Структура DMARC-записи

 

_dmarc.example.com.    IN    TXT    "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

 

Параметры:

  • p=none - только мониторинг, письма не блокировать

  • p=quarantine - подозрительные письма в спам

  • p=reject - отклонять письма, не прошедшие проверку

  • rua=mailto: - адрес для сводных отчётов (XML-файлы)

  • ruf=mailto: - адрес для детальных отчётов о сбоях

  • pct=50 - применять политику к 50% писем (полезно при переходе)

  • adkim=s - строгое выравнивание для DKIM (домен в подписи должен точно совпадать)

  • aspf=r - мягкое выравнивание для SPF (по умолчанию)

 

Стратегия внедрения DMARC

 

Не ставьте сразу p=reject. Можно заблокировать легитимную почту.

 

Шаг 1 - начните с p=none, добавьте rua:

"v=DMARC1; p=none; rua=mailto:dmarc@example.com; ruf=mailto:dmarc@example.com"

 

Шаг 2 - две-четыре недели читайте отчёты. Инструменты для разбора: dmarcanalyzer.com, postmarkapp.com/dmarc.

Шаг 3 - перейдите на p=quarantine; pct=10, постепенно увеличивайте процент.

Шаг 4 - когда ошибок нет, переключайтесь на p=reject.

 

 

Проверка DMARC

 

dig TXT _dmarc.example.com

 

 

 

 

Полная проверка через mail-tester.com

Сервис mail-tester.com даёт итоговый балл от 1 до 10:

  1. Откройте mail-tester.com - получите временный адрес

  2. Отправьте письмо с вашего сервера на этот адрес

  3. Нажмите "Check your score"

 

Сервис проверяет SPF, DKIM, DMARC, наличие в чёрных списках, содержимое письма. Балл 9–10 означает, что всё настроено правильно.

 

 

Порядок настройки с нуля

 

Если вы только разворачиваете почтовый сервер:

  1. Настройте A-запись для mail.example.com

  2. Добавьте MX-запись, указывающую на mail.example.com

  3. Попросите провайдера добавить PTR-запись (обратная зона)

  4. Установите и настройте OpenDKIM, сгенерируйте ключи

  5. Добавьте DKIM TXT-запись в DNS

  6. Добавьте SPF TXT-запись для домена

  7. Добавьте DMARC с p=none для начала мониторинга

  8. Отправьте тестовое письмо, проверьте заголовки и mail-tester.com

  9. Через 2–4 недели ужесточьте DMARC-политику

 

 

Что произойдёт без этих записей

 

  • Без MX: входящие письма не придут, сервер для приёма не определён.
  • Без SPF: письма часто попадают в спам у крупных провайдеров. Gmail и Outlook помечают такие письма как "не прошедшие проверку".
  • Без DKIM: нет доказательства, что письмо не было изменено в пути. Репутация домена ниже.
  • Без DMARC: Google с февраля 2024 года требует DMARC от отправителей более 5000 писем в день. Без него массовые рассылки отклоняются Gmail полностью.

 

 

Итог

 

Четыре типа записей работают в паре: MX принимает почту, SPF разрешает отправителей, DKIM подписывает письма, DMARC задаёт политику и собирает отчёты. Настройка занимает 30–60 минут, зато письма перестают теряться. Начните с p=none в DMARC, читайте отчёты две недели, затем переходите к reject. Проверяйте результат через mail-tester.com после каждого изменения.