Postfix + SPF + DKIM + DMARC: настройка, после которой письма перестают падать в спам
Семёнов Евгений Сергеевич, директор АйТи Фреш. 15+ лет в корпоративном IT. У нас на практике почти каждую неделю приходит запрос «наши письма не доходят до Mail.ru» или «клиенты пишут, что мы в спаме». Причина в 90% случаев — либо отсутствие, либо кривые SPF/DKIM/DMARC записи. В 2025 году без этой тройки провайдеры просто не доверяют вашей почте. В статье — полное руководство по настройке на Postfix, с проверками и типовыми граблями.
Зачем SPF, DKIM, DMARC
Исторически SMTP не содержит никакой аутентификации: любой сервер может отправить письмо от имени boss@gazprom.ru. Это позволило процветать фишингу и спаму. Чтобы ограничить злоупотребления, придумали три дополнительных механизма:
- SPF (Sender Policy Framework) — TXT-запись, в которой владелец домена перечисляет IP, имеющие право отправлять от его имени.
- DKIM (DomainKeys Identified Mail) — цифровая подпись письма приватным ключом. Получатель находит публичный ключ в DNS и проверяет.
- DMARC (Domain-based Message Authentication, Reporting, Conformance) — политика, которая говорит получателю что делать с письмами, не прошедшими SPF/DKIM.
Без них в 2025 году письма из корпоративной почты в лучшем случае попадают в спам, в худшем — отвергаются MX-сервером без уведомления отправителя. Я всегда настраиваю все три + дополнительно MTA-STS и BIMI для крупных брендов.
Готовим Postfix и DNS
Рабочий стенд — Ubuntu 22.04 LTS, Postfix 3.6+, OpenDKIM 2.11. Предполагаем, что базовый Postfix с приёмом и отправкой почты уже поднят (если нет — см. отдельную статью на сайте про postfix+dovecot). Плюс должен быть корректный rDNS (PTR) на IP, совпадающий с HELO Postfix.
cat /etc/postfix/main.cf | grep -E "^(myhostname|mydomain|mynetworks|inet_interfaces|smtpd_tls)"
# Важно: myhostname = mx.yourdomain.ru
# PTR-запись на IP должна вести на mx.yourdomain.ru
dig -x <ваш IP>
SPF: самая простая часть
SPF — это одна TXT-запись в DNS. Для домена example.ru:
example.ru. IN TXT "v=spf1 ip4:203.0.113.10 ip4:203.0.113.11 include:_spf.mail.ru ~all"
Что означает:
v=spf1— версия SPF.ip4:203.0.113.10— разрешённый IP.include:_spf.mail.ru— включить SPF стороннего сервиса (если часть почты идёт через Mail.ru Бизнес).~all— softfail для остальных (recommended для начала),-all— hardfail (строгая политика).
Ошибки, которые я вижу чаще всего:
- Несколько SPF-записей на одном домене — должна быть ровно одна, иначе RFC нарушен и проверка падает.
- Больше 10 DNS lookups — `include` и `a`/`mx` считаются в лимит. Если превысили — SPF перестаёт работать.
- Отсутствие `all` в конце — тогда неопределённое поведение.
DKIM: подпись через OpenDKIM
DKIM требует установки дополнительного демона — OpenDKIM. Он получает от Postfix исходящие письма через Milter, подписывает их приватным ключом и отдаёт обратно.
apt install -y opendkim opendkim-tools
mkdir -p /etc/opendkim/keys/example.ru
# Генерим ключ
cd /etc/opendkim/keys/example.ru
opendkim-genkey -s mail -d example.ru -b 2048
chown opendkim:opendkim mail.private
# Файл mail.txt содержит TXT-запись для публикации в DNS
cat mail.txt
Пример записи для публикации:
mail._domainkey.example.ru. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkH..."
Конфиг OpenDKIM — /etc/opendkim.conf:
Syslog yes
UMask 002
Mode sv
Canonicalization relaxed/simple
Selector mail
Socket inet:8891@localhost
PidFile /var/run/opendkim/opendkim.pid
OversignHeaders From
TrustAnchorFile /usr/share/dns/root.key
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
Дополнительные файлы:
# /etc/opendkim/KeyTable
mail._domainkey.example.ru example.ru:mail:/etc/opendkim/keys/example.ru/mail.private
# /etc/opendkim/SigningTable
*@example.ru mail._domainkey.example.ru
# /etc/opendkim/TrustedHosts
127.0.0.1
localhost
192.168.0.0/16
10.0.0.0/8
Связываем с Postfix — в /etc/postfix/main.cf:
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
systemctl enable --now opendkim
systemctl restart postfix
# Тест
opendkim-testkey -d example.ru -s mail -vvv
DMARC: политика поверх SPF+DKIM
DMARC — ещё одна TXT-запись, в поддомене _dmarc:
_dmarc.example.ru. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.ru; ruf=mailto:dmarc@example.ru; fo=1; adkim=r; aspf=r; pct=100"
Параметры:
p=none/quarantine/reject— политика на нарушителей. Начинайте с none.rua— агрегированные отчёты (XML в архиве, раз в сутки).ruf— подробные forensic-отчёты по каждому падению.adkim=r/s— relaxed/strict соответствие DKIM-домена From-домену.aspf=r/s— то же для SPF.pct=100— процент писем, к которым применяется политика.
Я всегда начинаю с p=none и анализирую приходящие XML-отчёты 2–4 недели. Когда видно, что 99%+ писем проходят SPF/DKIM — переключаю на p=quarantine, ещё через 2 недели — на p=reject.
MTA-STS и TLS-RPT: следующий уровень
MTA-STS обязывает другие серверы доставлять вам письма только по валидному TLS. Публикация:
# Публикуем TXT-запись с версией политики
_mta-sts.example.ru. IN TXT "v=STSv1; id=20250311000000"
# HTTPS-endpoint с политикой
# https://mta-sts.example.ru/.well-known/mta-sts.txt
version: STSv1
mode: enforce
mx: mx.example.ru
mx: mx2.example.ru
max_age: 604800
# Дополнительно TLS-RPT для отчётов
_smtp._tls.example.ru. IN TXT "v=TLSRPTv1; rua=mailto:tls-rpt@example.ru"
Для HTTPS-endpoint нужен валидный сертификат (Let's Encrypt) на поддомене mta-sts. Сервер должен отдавать файл /.well-known/mta-sts.txt по HTTPS.
Проверка всех компонентов
| Что проверить | Инструмент |
|---|---|
| SPF | dig TXT example.ru, mxtoolbox.com/spf.aspx |
| DKIM | opendkim-testkey -d example.ru -s mail, mxtoolbox.com |
| DMARC | dig TXT _dmarc.example.ru, mxtoolbox.com/dmarc.aspx |
| Целиком | mail-tester.com — дать 10/10, postmaster.mail.ru, postmaster.google.com |
| TLS | checktls.com, starttls.info |
| RBL | mxtoolbox.com/blacklists.aspx |
Самый быстрый комплексный тест: отправить письмо на test@mail-tester.com, получить адрес из ответа, открыть в браузере — увидите оценку 0–10 и детализацию проблем.
Мини-кейс: B2B-рассылки не доходили до Mail.ru
В ноябре 2025 года клиент — оптовая компания в Подмосковье, 85 сотрудников, делает транзакционные рассылки клиентам через собственный Postfix на outlook-совместимом Exchange. Проблема — 40% писем корпоративных клиентов на @mail.ru и @yandex.ru попадают в спам или отвергаются.
Диагностика:
- SPF прописан, но с
?all(neutral) — провайдеры считают как не настроенный. - DKIM полностью отсутствует.
- DMARC нет.
- IP сервера в одном из RBL (остаток от прошлого арендатора IP).
- MTA-STS отсутствует.
Работа за 2 дня:
- Подняли OpenDKIM, сгенерировали ключ 2048 бит, опубликовали TXT.
- Исправили SPF на
~allс явным перечислением всех IP (основной + резервный). - Настроили DMARC с
p=noneиruaна выделенный почтовый ящик. - Запросили удаление из RBL (бесплатно через форму на spamhaus.org).
- Настроили MTA-STS через nginx на поддомене с Let's Encrypt.
Через 72 часа после внесения правок — тест через mail-tester.com: 10/10. Через 2 недели процент доставки по Mail.ru вырос с 58% до 97%, по Yandex — с 62% до 98%. Стоимость работ — 45 000 руб.
Мониторинг и отчёты DMARC
XML-отчёты DMARC приходят раз в сутки от каждого провайдера (mail.ru, yandex, gmail, microsoft). Для удобной работы с ними я ставлю parsedmarc:
pip3 install parsedmarc
# Парсинг ежедневного архива из почтового ящика
parsedmarc --imap-host imap.example.ru --imap-user dmarc@example.ru \
--imap-password '********' --imap-reports-folder INBOX \
--elasticsearch-url http://localhost:9200 \
--elasticsearch-index dmarc-reports
В Grafana/Kibana — дашборд с топ-10 отправителей не проходящих SPF, географией, трендом failure rate. На нашем стенде — на Dell Xeon Platinum 8280 с 40G Mellanox обработка 500 000 DMARC-записей в день занимает меньше 2 минут.
Частые ошибки и как их избежать
- SPF больше 10 lookups. При `include:` сторонних сервисов быстро превышается лимит. Используйте инструменты `spf-record.com` для проверки.
- DKIM 1024 бит. В 2025 — только 2048. 1024 Mail.ru и Gmail считают небезопасным.
- DMARC rua на тот же домен. В XML будут тысячи записей — поднимите отдельный SMTP-приёмник или используйте сервис типа postmarkapp.
- OpenDKIM не подписывает через milter. Часто из-за неправильных прав на каталог
/var/run/opendkim. Проверьте `journalctl -u opendkim`. - HELO не совпадает с PTR. Hardfail в строгих проверках. Всегда выставляйте `myhostname` в Postfix и PTR-запись соответственно.
- Отсутствие `OversignHeaders From` в OpenDKIM. Без него злоумышленник может переподписать фишинговое письмо с `From:` вашего домена.
Настроим почту вашего домена правильно
Полный аудит и настройка SPF/DKIM/DMARC/MTA-STS на Postfix, Exim, Exchange. Разблокировка IP из RBL, прогрев после смены провайдера, мониторинг отчётов. 15+ лет в корпоративной почте, работаю с доменами от 5 до 500 сотрудников.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы по DKIM/SPF/DMARC
- Что такое SPF, DKIM и DMARC?
- SPF — TXT-запись в DNS, в которой перечислены IP-адреса, которым разрешено отправлять почту от имени домена. DKIM — цифровая подпись каждого письма приватным ключом, публичный ключ публикуется в DNS. DMARC — политика, которая говорит получателю, что делать с письмами, не прошедшими SPF/DKIM: пропускать, класть в спам или отклонять.
- Нужно ли всё три?
- Да. SPF проверяет отправителя-сервер, DKIM — целостность письма, DMARC — связку между заголовками From и доменом, прошедшим SPF/DKIM. Без всех трёх провайдеры (Mail.ru, Yandex, Gmail) с высокой вероятностью положат ваше письмо в спам или отвергнут.
- Какую политику DMARC выбрать?
- Начинайте с p=none с rua=mailto:dmarc@yourdomain.ru — только отчёты, без блокировки. Через 2-4 недели, когда увидите, какие легитимные отправители не проходят аутентификацию, переходите на p=quarantine, потом на p=reject.
- Что такое MTA-STS?
- MTA-STS — политика, обязывающая другие почтовые серверы доставлять вам письма только по TLS с валидным сертификатом. Защищает от downgrade-атак и перехвата. Публикуется как HTTPS-файл на mta-sts.yourdomain.ru и TXT-запись _mta-sts.
- Почему письма всё равно в спам?
- SPF/DKIM/DMARC — лишь база. Дополнительно важны репутация IP (PTR, RBL), содержание писем, соотношение открытий, отписки, жалобы. Новый IP прогревается 2–6 недель с низких объёмов. Используйте постмастеры Mail.ru и Gmail для анализа.