О проекте

Протокол SMTP, по которому передается электронная почта, был создан в 1980-х годах и изначально не имел встроенной защиты от подмены отправителя. Любой спамер мог отправить письмо, указав в поле «От кого» адрес вашего генерального директора.

Чтобы бороться со спамом и фишингом, современные почтовые провайдеры (Google, Microsoft, Яндекс) требуют обязательного подтверждения того, что сервер имеет право отправлять письма от имени вашего домена. Для этого используется связка из трех DNS-записей: SPF, DKIM и DMARC.


Для чего нужен DKIM?

DKIM (DomainKeys Identified Mail) — это цифровая подпись письма. Работает это на базе асимметричного шифрования: закрытый ключ хранится на вашем почтовом сервере (например, в Mailcow), а открытый ключ публикуется в DNS-зоне домена. Когда сервер отправляет письмо, он подписывает его заголовки и содержимое закрытым ключом.

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

  1. Письмо действительно отправлено сервером владельца домена.
  2. Содержимое письма и вложения не были изменены (перехвачены) в процессе доставки.

SPF: В чем разница между тильдой (~) и дефизом (-)?

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

Рассмотрим пример записи: v=spf1 include:_spf.mx.cloudflare.net ~all Здесь мы разрешаем отправку через серверы Cloudflare (что актуально, например, при использовании Cloudflare Email Routing), а в конце стоит критически важный модификатор ~all.

В чем отличие ~ (SoftFail) от - (Fail)?

  • -all (Жесткий отказ / Fail): Если письмо пришло с сервера, не указанного в SPF, сервер получателя сразу отклонит его на этапе соединения. Это максимально безопасно, но может сломать пересылку писем (форвардинг), когда письмо транзитом проходит через сторонние серверы.
  • ~all (Мягкий отказ / SoftFail): Если сервер не совпал, письмо будет принято, но получит штрафные баллы спам-фильтра (скорее всего, попадет в папку “Спам” или будет помечено как подозрительное). Я часто использую ~all на этапе миграции серверов или при настройке сложных цепочек пересылки, чтобы не потерять важную корреспонденцию.

Моя конфигурация DMARC: Строгий контроль

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

v=DMARC1; p=reject; aspf=s; adkim=s; sp=quarantine;

Разберем, почему именно так:

  • p=reject (Policy = Reject): Главное правило. Если кто-то пытается отправить письмо от моего домена, и оно не проходит проверку (нет валидного DKIM или не совпал SPF), письмо уничтожается. Никаких папок “Спам”, мошенник просто не сможет ничего прислать от моего имени.
  • aspf=s и adkim=s (Strict Alignment): Флаг строгого выравнивания (s - strict). Это значит, что домен в техническом заголовке письма должен в точности совпадать с доменом в поле “От кого” (From). Это защищает от хитрых атак, когда спамер использует валидный SPF для поддомена, но в видимом адресе подставляет основной домен.
  • sp=quarantine (Subdomain Policy): Политика для поддоменов. Если рассылка идет с незарегистрированного поддомена (например, mail.my-domain.com), такие письма не отбиваются жестко, а отправляются в карантин (спам). Это дает пространство для маневра, если маркетологи внезапно подключат новый сервис рассылок на поддомене без ведома IT-отдела.

Выводы

Правильная настройка триады SPF, DKIM и DMARC — это не просто галочка в чек-листе системного администратора. Это гарантия того, что корпоративные письма дойдут до клиентов во входящие, а репутация домена будет защищена от спуфинга и действий злоумышленников. Настройка строгих политик (p=reject) требует ювелирной точности, но дает 100% защиту от подделки адреса.