Перейти к содержимому

Spf, Dkim и Dmarc: как работает email-аутентификация и защита от подделки писем

SPF, DKIM и DMARC на примере обычного письма: как работает email-аутентификация

Когда в почтовом ящике появляется письмо с адресом `support@bank.ru` или `security@google.com`, один только видимый адрес ещё ничего не доказывает. Его можно подменить так же легко, как написать на бумажном конверте любое имя отправителя. Поэтому принимающий почтовый сервер должен проверить: действительно ли сообщение отправлено от имени указанного домена и не было ли изменено по дороге.

Для этого используются три взаимосвязанных механизма: SPF, DKIM и DMARC. Каждый отвечает за свою часть проверки, а вместе они помогают снизить риск спуфинга, фишинга и доставки поддельных писем от имени компании.

Что происходит с письмом после отправки

Рассмотрим обычное сообщение:

```text
From: promo@romashka.ru
To: ivan@gmail.com
```

После нажатия кнопки "Отправить" письмо передаётся через SMTP-серверы. Однако сервер получателя не обязан сразу помещать его во "Входящие". Сначала он анализирует:

- с какого IP-адреса установлено соединение;
- какой технический адрес указан во время SMTP-диалога;
- разрешён ли этому серверу исходящий трафик от имени домена;
- присутствует ли цифровая подпись;
- совпадает ли содержимое письма с подписанными данными;
- связаны ли результаты проверок с адресом в поле `From`.

Затем принимающая сторона выбирает дальнейшее действие: принять сообщение, отправить его в спам или отклонить ещё до доставки.

Важно различать видимый адрес отправителя и технический адрес, используемый при передаче. Поле `From` показывается пользователю, но само по себе не является доказательством подлинности. Именно эту проблему и решают SPF, DKIM и DMARC.

SPF: какие серверы имеют право отправлять почту

SPF расшифровывается как Sender Policy Framework. Это правило, опубликованное в DNS-зоне домена. В нём владелец домена перечисляет серверы и сервисы, которым разрешено отправлять письма от его имени.

Упрощённо SPF можно представить как список доверенных курьеров. Компания "Ромашка" заранее сообщает: "Наши письма могут доставлять серверы с такими-то IP-адресами и почтовые платформы, указанные в записи".

Когда письмо поступает на сервер получателя, тот сопоставляет IP отправителя с SPF-записью домена, указанного в техническом адресе отправки - `Mail From`, или envelope sender. Если адрес входит в разрешённый список, проверка SPF завершается успешно. Если нет, сервер получает результат `fail`, `softfail`, `neutral` или другой статус в зависимости от настроек.

Пример SPF-записи может выглядеть так:

```text
v=spf1 ip4:203.0.113.10 include:mailer.example -all
```

Она означает, что отправку разрешают конкретный IP-адрес и почтовая платформа, подключённая через `include`. Остальные источники запрещены благодаря параметру `-all`.

Где размещается SPF

SPF хранится в DNS домена как TXT-запись. Получающий сервер запрашивает её самостоятельно и сравнивает сведения с фактическим IP-адресом отправителя.

При настройке SPF важно учитывать все системы, которые отправляют письма от имени домена:

- корпоративную почту;
- CRM;
- сервисы рассылок;
- системы чеков и уведомлений;
- платформы поддержки клиентов;
- серверы транзакционных сообщений.

Для одного домена должна существовать одна итоговая SPF-запись. Добавление нескольких независимых записей часто приводит к ошибке `permerror`, и проверка перестаёт работать корректно. Кроме того, SPF ограничен десятью DNS-запросами, поэтому слишком сложная цепочка `include` может превысить допустимый лимит.

Почему SPF не подтверждает адрес в поле From

Главное ограничение SPF заключается в том, что он проверяет не обязательно тот адрес, который видит пользователь. Проверка выполняется для технического домена `Mail From`.

Например, в интерфейсе указано:

```text
From: promo@romashka.ru
```

А во время SMTP-сеанса используется:

```text
Mail From: bounce@mailer-service.example
```

SPF может успешно подтвердить право сервера отправлять письма от `mailer-service.example`, но это не означает, что он имеет отношение к `romashka.ru`. Поэтому одного SPF недостаточно: злоумышленник способен отправить письмо через разрешённый сервис, сохранив в видимом поле чужой адрес.

DKIM: цифровая подпись сообщения

DKIM - DomainKeys Identified Mail - добавляет к письму криптографическую подпись. Отправляющий сервер формирует подпись на основе выбранных заголовков и содержимого сообщения, после чего помещает её в специальный заголовок `DKIM-Signature`.

Получатель извлекает из подписи имя домена и селектор, а затем ищет соответствующий открытый ключ в DNS. Закрытый ключ хранится только у отправляющей стороны, открытый публикуется для проверки.

Если подпись корректна, это подтверждает два обстоятельства:

1. письмо действительно прошло через систему, располагающую закрытым ключом домена;
2. подписанные части сообщения не были изменены после отправки.

DKIM не шифрует письмо и не скрывает его содержимое. Его задача - подтвердить целостность и происхождение сообщения.

Что такое селектор

Селектор позволяет использовать несколько DKIM-ключей одновременно. Например, разные ключи могут применяться для корпоративной почты, маркетинговой платформы и транзакционных уведомлений.

В DNS ключ размещается по адресу вида:

```text
selector1._domainkey.romashka.ru
```

Это упрощает замену ключей: новый ключ можно опубликовать заранее, переключить отправку на него, а старый удалить после завершения переходного периода.

Почему одного DKIM тоже недостаточно

Злоумышленник может подписать письмо собственным доменом. В результате DKIM будет технически успешным, но подпись окажется связана, например, с `mailer-attacker.example`, тогда как пользователь увидит `romashka.ru` в поле `From`.

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

DMARC связывает проверки с видимым отправителем

DMARC расшифровывается как Domain-based Message Authentication, Reporting and Conformance. Этот механизм связывает SPF и DKIM с доменом из поля `From`, а также сообщает принимающему серверу, что делать при провале проверок.

DMARC считается пройденным, если выполняется хотя бы одно условие:

- SPF успешен, а домен технического отправителя совпадает с доменом в `From`;
- DKIM успешен, а домен, указанный в подписи, совпадает с доменом в `From`.

Такое соответствие называют alignment - выравниванием доменов. Оно может быть строгим или ослабленным. При строгом режиме домены должны совпадать полностью, при ослабленном допускается использование поддомена.

Пример DMARC-записи:

```text
v=DMARC1; p=quarantine; rua=mailto:dmarc@romashka.ru
```

Политики DMARC

Параметр `p` определяет реакцию на сообщения, не прошедшие проверку.

`p=none`

Почтовый сервер не обязан блокировать письмо. Сообщение может попасть во "Входящие" или в спам, а владелец домена получает отчёты. Такой режим используют на начальном этапе внедрения, чтобы выявить легитимные источники отправки и не нарушить существующие рассылки.

`p=quarantine`

Письма с проваленной аутентификацией рекомендуется помещать в спам или карантин. Это промежуточная мера: сообщения не обязательно отклоняются, но их доверие снижается.

`p=reject`

Получателю рекомендуется отклонять неподтверждённые письма. Это наиболее строгий режим, который затрудняет подделку домена, но требует аккуратной подготовки. Если забыть добавить в SPF или DKIM легитимный сервис, его сообщения также могут перестать доставляться.

Зачем нужны отчёты DMARC

DMARC поддерживает агрегированные отчёты, позволяющие увидеть, кто отправляет письма от имени домена и проходят ли они проверки. В отчётах обычно отражаются:

- IP-адреса отправляющих серверов;
- количество сообщений;
- результаты SPF и DKIM;
- домены, обнаруженные в письмах;
- применённая политика.

Это помогает обнаружить неизвестные платформы, ошибки в настройках и попытки массовой подмены домена. Отчёты не всегда содержат полный текст писем - обычно они предназначены именно для статистического анализа.

Почему письмо с успешными SPF, DKIM и DMARC может попасть в спам

Аутентификация не гарантирует доставку во "Входящие". Она только доказывает, что сообщение связано с заявленным доменом и прошло технические проверки.

На решение почтового сервиса также влияют:

- репутация IP-адреса;
- история домена;
- жалобы пользователей на спам;
- процент недоставленных писем;
- качество базы получателей;
- частота отправок;
- содержание сообщения;
- наличие подозрительных ссылок и вложений;
- поведение получателей;
- корректность обратного DNS;
- соблюдение требований к отписке.

Даже идеально настроенный домен может столкнуться с фильтрацией, если его письма массово игнорируют или помечают как нежелательные.

Зачем выделяют отдельный поддомен для рассылок

Для маркетинговых и транзакционных сообщений часто используют отдельный поддомен, например:

```text
news.romashka.ru
mail.romashka.ru
notify.romashka.ru
```

Это позволяет отделить репутацию рассылок от основной корпоративной почты. Если рекламная кампания получит много жалоб, риски для адресов сотрудников и важных служебных писем будут ниже.

Поддомен также удобен для раздельных SPF-записей, DKIM-ключей и DMARC-политик. Например, для корпоративной почты можно применить строгие правила, а для нового маркетингового канала сначала использовать режим наблюдения.

Что означает делегирование поддомена

Делегирование поддомена не означает передачу всей зоны или основного домена стороннему сервису. Владелец может делегировать только часть DNS-пространства, например `mail.romashka.ru`.

После этого сервис получает возможность управлять DNS-записями внутри выделенного поддомена: размещать DKIM-ключи, настраивать SPF и технические адреса возврата. Основной домен `romashka.ru`, его корпоративная почта и остальные записи при этом остаются под контролем компании.

Иногда вместо полного делегирования используют отдельные CNAME-записи. Такой вариант позволяет сохранить управление DNS у владельца домена, но предоставить платформе нужные технические указатели.

Как внедрять email-аутентификацию без риска

Настройку лучше проводить поэтапно:

1. составить список всех сервисов, которые отправляют письма;
2. привести в порядок SPF и удалить дублирующие записи;
3. включить DKIM для каждого легитимного источника;
4. добавить DMARC с политикой `none`;
5. проанализировать отчёты и найти неизвестные источники;
6. устранить ошибки выравнивания доменов;
7. перейти к `quarantine`;
8. после тестирования установить `reject`.

Также важно регулярно проверять срок действия и актуальность DKIM-ключей, контролировать лимит DNS-запросов SPF и не использовать общий домен для несвязанных рассылок.

Итог

SPF отвечает на вопрос: "Имеет ли этот сервер право отправлять письма от имени домена?". DKIM проверяет: "Подписано ли сообщение доверенной системой и не изменилось ли оно?". DMARC уточняет: "Соответствуют ли эти подтверждения адресу, который видит получатель, и что делать при нарушении?".

Ни один механизм не является абсолютной защитой от спама, однако совместная настройка SPF, DKIM и DMARC значительно усложняет подмену отправителя, улучшает контроль над почтовыми потоками и помогает поддерживать репутацию домена.

Прокрутить вверх