DMARC, DKIM, SPF для корпоративной почты: защита домена и попадание в inbox
Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. В 2025 году у одного из моих клиентов — оптовая компания, 24 сотрудника, поставки электротоваров — произошёл классический BEC-инцидент: злоумышленник отправил клиентам письмо от имени директора с новыми реквизитами для оплаты, два контрагента перевели деньги — суммарно 1.4 млн руб. Ни одного из трёх писем в их логах не было — злоумышленник просто подменил поле From без аутентификации. А у клиента не было настроен DMARC. Расскажу, как три DNS-записи спасают бизнес от таких атак и заодно решают проблему «наши письма уходят в спам».
Зачем нужны все три — SPF, DKIM и DMARC
Каждая из трёх записей закрывает свою часть задачи. По отдельности они работают плохо, вместе — отлично.
| Запись | Что защищает | Где слабая |
|---|---|---|
| SPF | Проверяет, что IP отправителя в белом списке | Ломается при форвардинге через почтовые списки |
| DKIM | Криптографическая подпись заголовков + тела | Не проверяет соответствие Frommy |
| DMARC | Alignment: From домен ДОЛЖЕН совпадать с SPF/DKIM доменом | Нужны отчёты, чтобы видеть, что происходит |
Без DMARC любой злоумышленник с арендованным IP у хостинга может отправить письмо «От: директор@example.ru» — SPF/DKIM его не трогают, получатели часто пропускают. С DMARC при aligned=strict такие письма падают в quarantine/reject.
SPF — основа основ
SPF-запись — это TXT в DNS, где перечислены разрешённые отправители. Пример моей стандартной записи для клиента:
example.ru. IN TXT "v=spf1 ip4:203.0.113.10 ip4:203.0.113.20 \
include:_spf.mailgun.org include:amazonses.com -all"
Что это означает:
ip4:203.0.113.10— ваш собственный почтовый сервер.ip4:203.0.113.20— резервный почтовый (если есть).include:_spf.mailgun.org— добавить все IP сервиса Mailgun (транзакционные письма).include:amazonses.com— добавить Amazon SES (маркетинг).-all— всё остальное отклонять (hardfail).
Важные принципы:
- Только одна SPF-запись на домен (иначе ошибка permerror).
- Не больше 10 DNS-запросов на раскрытие include (counting-limit — смотрите через Kitterman SPF-checker).
- Для subdomains — отдельные SPF.
DKIM — подпись криптоключом
DKIM — публичный ключ в DNS + приватный на почтовом сервере. Сервер подписывает исходящие письма, получатель проверяет подпись.
Генерация ключа на Linux:
# OpenDKIM
opendkim-genkey -b 2048 -d example.ru -s mail -v
# Создаст mail.private (приватный) и mail.txt (публичный для DNS)
# Добавить в DNS-зону:
mail._domainkey.example.ru. IN TXT "v=DKIM1; k=rsa; \
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7Xr..."
# Подключение в Postfix через rspamd / opendkim
# После этого все исходящие получают заголовок
# DKIM-Signature: v=1; a=rsa-sha256; d=example.ru; s=mail; ...
Selector (mail) в записи позволяет иметь несколько ключей — можно ротировать их без простоя. Я рекомендую 2048 бит минимум (1024 уже считается слабым) и ротацию раз в 6 месяцев.
Проверить DKIM на живом письме — посмотрите заголовки через View Raw в любом клиенте, должно быть Authentication-Results: ...dkim=pass header.i=@example.ru.
DMARC — политика и отчёты
DMARC-запись собирает всё воедино: какой политике следовать и куда слать отчёты. Моя стандартная запись для клиентов:
_dmarc.example.ru. IN TXT \
"v=DMARC1; p=quarantine; sp=quarantine; adkim=s; aspf=s; \
pct=100; \
rua=mailto:dmarc-reports@example.ru; \
ruf=mailto:dmarc-failures@example.ru; \
fo=1"
Что означает:
p=quarantine— неаутентифицированные → в спам. Альтернативы:none(только мониторинг),reject(отклонить).sp=quarantine— такая же политика для sub-доменов.adkim=s— strict alignment DKIM: From и DKIM-домен должны совпадать точно (не sub).aspf=s— strict для SPF.pct=100— применять к 100% писем (можно начать с 10% для плавного rollout).rua=— адрес для aggregate-отчётов (суммарно от провайдеров).ruf=— адрес для failure-отчётов (конкретные письма, которые не прошли).fo=1— слать failure-отчёт при любом failure.
Поэтапное внедрение — обязательно
Главный совет: никогда не ставьте сразу p=reject на боевом домене. Порядок:
- Неделя 0: настраиваете SPF + DKIM. Записи должны проходить mail-tester на 9-10/10.
- Неделя 1: ставите DMARC p=none. Собираете aggregate-отчёты в течение 2 недель.
- Неделя 3: анализируете отчёты — видите, кто отправляет от имени вашего домена. Легитимные добавляете в SPF/DKIM, нелегитимные изучаете (может, это ваши старые сервисы, о которых забыли).
- Неделя 4: p=quarantine, pct=10 (10% неправильных писем в спам).
- Неделя 5-6: pct=50.
- Неделя 7-8: pct=100.
- Неделя 9: p=reject, pct=100 (если нет ошибок).
Анализ DMARC-отчётов через parsedmarc
Отчёты — XML-файлы, приходят на rua-адрес от каждого провайдера (Mail.ru, Gmail, Yahoo, Microsoft). Вручную читать невозможно — ставим parsedmarc + Elasticsearch + Kibana:
# docker-compose.yml
services:
parsedmarc:
image: jwillmer/parsedmarc
volumes:
- ./config:/etc/parsedmarc
environment:
- IMAP_HOST=mail.example.ru
- IMAP_USER=dmarc-reports@example.ru
- ELASTICSEARCH_HOSTS=elasticsearch:9200
elasticsearch:
image: elasticsearch:8.15.0
kibana:
image: kibana:8.15.0
ports: ["5601:5601"]
В Kibana получаете дашборд: какие IP шлют от вашего домена, какие проходят SPF/DKIM, какие нет, какой объём каждый месяц. Плюс вы сразу увидите фишинговые домены, которые пытаются прикинуться вашим доменом.
Типовые источники, о которых забывают
Вот список систем, которые часто отправляют от имени вашего домена и которые забывают добавить в SPF/DKIM:
- 1С:Предприятие — если отправляет письма через SMTP-сервер (счета, уведомления).
- Bitrix24 / amoCRM — транзакционные письма клиентам.
- Zabbix / Prometheus alerts — на support@ и admin@.
- GitLab / Jira / Confluence — уведомления для команды.
- WordPress / Bitrix сайт компании — contact-form notifications.
- Email-маркетинг (Unisender, SendPulse, MailChimp).
- Онлайн-касса / банк-клиент — чеки, выписки.
Каждый источник должен быть либо в SPF напрямую, либо через include. И у каждого — свой DKIM-селектор.
Кейс с 1.4 млн руб — продолжение
Возвращаясь к клиенту, с которого начал статью. После BEC-инцидента мы пришли разбираться.
Что обнаружили:
- SPF стоял, но с
~all(softfail) вместо-all(hardfail). Mail.ru пропускает такие письма в inbox. - DKIM не было вообще.
- DMARC не было вообще.
- В логах почтового сервера не было упоминания о подделанных письмах — они ушли с сервера злоумышленника на почту клиентов напрямую.
Что сделали за 3 рабочих дня:
- Провели аудит всех систем, отправляющих от имени домена (нашли 6 источников, добавили все в SPF).
- Настроили SPF с
-all, DKIM 2048-бит, DMARC p=none для warmup. - Развернули parsedmarc на отдельной VM, настроили rua/ruf на отдельный ящик.
- Через 2 недели наблюдения нашли 3 попытки подделки (один из них был именно тот мошенник, который украл 1.4 млн — ещё раз попытался). В reports видно его IP и полный header.
- Через 4 недели — p=quarantine pct=100, через 6 недель p=reject.
- Параллельно — инструктаж сотрудников: при получении письма с новыми реквизитами ВСЕГДА звонок отправителю по голосу.
После перехода на p=reject все попытки подделки отклоняются на уровне Mail.ru и Google ещё до того, как письмо попадает к клиенту. Повторных инцидентов не было. Стоимость проекта — 44 тыс руб.
Дополнительно: BIMI и MTA-STS
Если DMARC стоит на p=reject и всё работает стабильно, можно добавить:
- BIMI — показывает логотип вашей компании рядом с письмом у получателя (сейчас в Gmail, Yahoo; в 2026 обещают в Mail.ru). Повышает узнаваемость бренда.
- MTA-STS — защита TLS-соединения между почтовыми серверами от даунгрейда. Ставится через DNS + HTTPS-файл.
- TLSRPT — отчёты о проблемах TLS при доставке.
Настроим DMARC/DKIM/SPF и защитим ваш домен — от 28 000 руб.
Я лично провожу аудит защиты email-домена и настраиваю SPF/DKIM/DMARC для компаний в Москве и области. Включая поэтапное внедрение, анализ через parsedmarc, выявление всех источников отправки, переход на p=reject без потерь. Типовой проект — 1-2 недели с учётом warmup. Предварительный аудит через open-source-инструменты — бесплатно.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — DMARC/DKIM/SPF
- Что такое SPF простыми словами?
- SPF (Sender Policy Framework) — список IP-адресов, которым разрешено отправлять письма от имени вашего домена. Получатель проверяет: если письмо от example.ru пришло с IP, которого нет в SPF-записи, оно помечается как подозрительное. Защита от простого спуфинга адреса отправителя.
- Чем DKIM лучше SPF?
- DKIM (DomainKeys Identified Mail) ставит криптографическую подпись на заголовки и тело письма. Получатель проверяет подпись через публичный ключ в DNS. Даже если письмо прошло через форвардинг (где SPF ломается), DKIM остаётся валидным. SPF + DKIM работают вместе — одного мало.
- Что такое DMARC и зачем он?
- DMARC (Domain-based Message Authentication) — политика, которая говорит получателям: 'если SPF или DKIM моего домена не проходят, делай quarantine или reject'. И ещё — присылай отчёты о нарушениях на указанный email. Это защита от подмены домена в фишинге и одновременно аналитика.
- Какую политику DMARC выставить — none, quarantine или reject?
- Поэтапно: начинать с p=none (только мониторинг, отчёты собираем, анализируем). Через 2-4 недели, если все легитимные отправители аутентифицированы, переход на p=quarantine (в спам). Через ещё 2-4 недели — p=reject (полное отклонение). Резкий старт с reject блокирует маркетинговую рассылку и транзакционные письма.
- Сколько стоит настройка DMARC под ключ?
- Для компании с одним основным доменом и 1-3 отправителями (почта + CRM + маркетинг) — от 28 тыс руб: аудит текущих DNS-записей, настройка SPF/DKIM/DMARC, подключение parsedmarc для аналитики, недельное наблюдение. Для компаний с 5+ источниками отправки (several brands, dept-level domains) — от 60 тыс руб.