· 11 мин чтения

DMARC, DKIM, SPF для корпоративной почты: защита домена и попадание в inbox

Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. В 2025 году у одного из моих клиентов — оптовая компания, 24 сотрудника, поставки электротоваров — произошёл классический BEC-инцидент: злоумышленник отправил клиентам письмо от имени директора с новыми реквизитами для оплаты, два контрагента перевели деньги — суммарно 1.4 млн руб. Ни одного из трёх писем в их логах не было — злоумышленник просто подменил поле From без аутентификации. А у клиента не было настроен DMARC. Расскажу, как три DNS-записи спасают бизнес от таких атак и заодно решают проблему «наши письма уходят в спам».

Зачем нужны все три — SPF, DKIM и DMARC

Каждая из трёх записей закрывает свою часть задачи. По отдельности они работают плохо, вместе — отлично.

ЗаписьЧто защищаетГде слабая
SPFПроверяет, что IP отправителя в белом спискеЛомается при форвардинге через почтовые списки
DKIMКриптографическая подпись заголовков + телаНе проверяет соответствие Frommy
DMARCAlignment: 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"

Что это означает:

Важные принципы:

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=reject на боевом домене. Порядок:

  1. Неделя 0: настраиваете SPF + DKIM. Записи должны проходить mail-tester на 9-10/10.
  2. Неделя 1: ставите DMARC p=none. Собираете aggregate-отчёты в течение 2 недель.
  3. Неделя 3: анализируете отчёты — видите, кто отправляет от имени вашего домена. Легитимные добавляете в SPF/DKIM, нелегитимные изучаете (может, это ваши старые сервисы, о которых забыли).
  4. Неделя 4: p=quarantine, pct=10 (10% неправильных писем в спам).
  5. Неделя 5-6: pct=50.
  6. Неделя 7-8: pct=100.
  7. Неделя 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:

Каждый источник должен быть либо в SPF напрямую, либо через include. И у каждого — свой DKIM-селектор.

Кейс с 1.4 млн руб — продолжение

Возвращаясь к клиенту, с которого начал статью. После BEC-инцидента мы пришли разбираться.

Что обнаружили:

Что сделали за 3 рабочих дня:

  1. Провели аудит всех систем, отправляющих от имени домена (нашли 6 источников, добавили все в SPF).
  2. Настроили SPF с -all, DKIM 2048-бит, DMARC p=none для warmup.
  3. Развернули parsedmarc на отдельной VM, настроили rua/ruf на отдельный ящик.
  4. Через 2 недели наблюдения нашли 3 попытки подделки (один из них был именно тот мошенник, который украл 1.4 млн — ещё раз попытался). В reports видно его IP и полный header.
  5. Через 4 недели — p=quarantine pct=100, через 6 недель p=reject.
  6. Параллельно — инструктаж сотрудников: при получении письма с новыми реквизитами ВСЕГДА звонок отправителю по голосу.

После перехода на p=reject все попытки подделки отклоняются на уровне Mail.ru и Google ещё до того, как письмо попадает к клиенту. Повторных инцидентов не было. Стоимость проекта — 44 тыс руб.

Дополнительно: BIMI и MTA-STS

Если DMARC стоит на p=reject и всё работает стабильно, можно добавить:

Настроим 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 тыс руб.