SPF, DKIM, DMARC: почему письма всё ещё в спаме
АйТи Фреш
Информационная безопасность

Аутентификация проходит — почему письмо всё равно в спаме?

Автор: , директор ООО «АйТи-Фреш» · · ~12 мин чтения
Письмо проходит SPF, DKIM и DMARC, но решение о доставке зависит и от других проверок
Аутентификация помогает, но не обещает входящие.

SPF, DKIM и DMARC помогают подтвердить отправителя, но не обещают письмо во «Входящих»: получатель отдельно оценивает соответствие доменов, PTR, репутацию и жалобы. Я покажу, как разбирать результаты по заголовкам и что исправлять первым — без замены ~all на -all вслепую.

Почему SPF, DKIM и DMARC не гарантируют «Входящие»

SPF, DKIM и DMARC отвечают на вопрос, можно ли связать письмо с доменом отправителя и насколько успешно пройдена проверка. Они не управляют папкой назначения и не отменяют остальные фильтры принимающей стороны. Если письмо прошло аутентификацию, это полезный сигнал, а не пропуск мимо фильтра. В аудите корпоративной почты я разделяю две задачи: сначала выясняю, что именно подтвердили DNS-записи, затем ищу причину решения почтового сервиса.

SPF проверяет IP-адрес для домена конверта SMTP, DKIM — криптографическую подпись и домен подписанта, а DMARC сопоставляет эти результаты с доменом в заголовке From. Провал одной проверки не равен автоматическому помещению в спам, как и успешный результат не гарантирует доставку во «Входящие». Окончательное решение зависит от правил принимающего сервиса; аутентификация — лишь часть этой картины. Поэтому фраза «в DNS всё зелёное» не закрывает расследование.

Я начинаю с одного конкретного письма, принятого внешним почтовым ящиком: открываю полные заголовки и смотрю результаты Authentication-Results, добавленные именно этим получателем. Важны SPF-результат и проверенный домен, статус DKIM и значение d=, результат DMARC и выравнивание с From. Нельзя верить одноимённой строке, которую добавил сам отправитель: до доверенного сервера заголовки могли подделать. В условной сети «Юнона» я бы сначала сохранил такой заголовок и время отправки, а уже потом менял DNS. Иначе через день будет непонятно, какое изменение что исправило.

Схема SPF, DKIM, DMARC и репутации при решении о доставке письма
Проверки влияют, но не решают всё.

SPF: что на самом деле означают ~all, -all и дубли

Механизм ~all возвращает softfail: домен сообщает, что отправитель, вероятно, не разрешён, но владелец домена не делает такого же строгого заявления, как при -all. Это разные результаты политики SPF, а не оценка «слабой» или «сильной» репутации. RFC прямо говорит, что получатель не должен отклонять письмо только из-за softfail, хотя может проверить его внимательнее. Значит, заменить тильду на минус ради «доставляемости» — не лечение, а смена смысла записи.

-all уместен, когда вы учли все источники отправки: рабочую почту, сайт, бухгалтерские уведомления, CRM и сторонние рассылки. Если забытый сервис отправляет от имени домена, он окажется за пределами списка. Это может стать причиной SPF fail, а дальше решение примет почтовая система адресата. Я сначала собираю фактические источники из журналов и отчётов, затем проверяю, каким доменом пользуется каждый поток. Только после этого выбираю квалификатор. В примере с условной «Юноной» наличие ~all само по себе не доказывает, что оно вызвало спам: нужна строка результата из заголовка и сравнение до и после.

Для одного доменного имени публикуют одну SPF-политику в одной TXT-записи. Если получатель находит несколько записей с v=spf1 для того же имени, стандарт предписывает результат permerror: сервер не выбирает «подходящую» строку за администратора. У поддомена может быть собственная политика, потому что это отдельное имя; его запись не надо склеивать с записью корневого домена. Дубликаты устраняют, сведя разрешённые источники в одну корректную запись для конкретного имени.

Есть и менее заметный предел: при одной проверке SPF учитывается не более десяти механизмов и модификаторов, которые вызывают DNS-запросы; к ним относятся include, a, mx, ptr, exists и redirect. Превышение даёт permerror даже тогда, когда запись на глаз выглядит аккуратно. Поэтому длинную цепочку include нужно считать по фактическим DNS-переходам, а не по числу слов в исходной строке. Механизм ptr для новых SPF-политик RFC отдельно не рекомендует; если подрядчик предлагает добавить его «для надёжности», попросите объяснить, какую задачу он решает.

Два SPF-поля для одного домена не дают получателю выбор: это ошибка обработки записи.

DKIM: подпись, селектор и ротация без мифов об истечении

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

В заголовке DKIM-Signature параметр d= указывает домен подписанта, а s= — селектор, который помогает найти соответствующий публичный ключ в DNS. Поэтому проверять надо именно пару домен плюс селектор из конкретного сообщения, а не просто наличие какой-нибудь DKIM TXT-записи. Если от имени компании отправляет несколько систем, у них могут быть отдельные селекторы или подписи; главное, чтобы поток, который должен проходить DMARC, имел выровненный домен подписи.

У DKIM-ключа нет обязательного срока истечения, который администратор должен «продлить» раз в несколько месяцев. В стандарте есть необязательный срок x= для самой подписи письма, и по умолчанию срок не задан. Ротация ключей остаётся операционной мерой: новый селектор позволяет опубликовать новый ключ и переключить подпись, а старый ключ отозвать после согласованного перехода. Ротировать следует по политике безопасности, при компрометации ключа или изменении поставщика, а не потому, что календарь сам внезапно запретит DKIM.

Для условной сети «Юнона» я бы проверил каждую исходящую систему отдельно: какой селектор она использует, какой открытый ключ видит DNS и остаётся ли подпись валидной после почтовых шлюзов и пересылки. Если результат DKIM — fail, сравниваю заголовок подписи и опубликованный ключ, а не меняю DMARC на reject. Разбор отдельного симптома описан в статье DKIM не подписывает письма.

Сравнение шагов безопасного перехода на новый DKIM-селектор
Сначала проверьте новый ключ, затем завершайте переход.

PTR: проверьте прямое и обратное разрешение имени

PTR — это обратная DNS-запись, по которой адрес получающего соединение IP сопоставляется с именем. Дальше имя должно разрешаться обратно в отправляющий IP: это прямая и обратная проверка, а не сравнение с отображаемым адресом From. Наличие PTR само по себе не доказывает хорошую репутацию, а отсутствие записи не превращает любой сервер и любое письмо в спам во всех почтовых системах. Требования получателей различаются.

Google, например, требует для отправляющих доменов или IP корректные прямые и обратные DNS-записи. В справке Gmail указано, что отсутствие PTR или несовпадение при обратной прямой проверке может привести к ограничению скорости либо блокировке сообщения. Это конкретное требование Gmail, а не универсальная формула для всех адресатов. Если сервер размещён у провайдера, который управляет адресным блоком, PTR обычно меняет именно он; в панели домена отправителя может просто не быть такой настройки.

Я проверяю адрес, с которого фактически установилось SMTP-соединение с внешним получателем, затем сверяю имя из PTR с прямой записью этого имени. Важен внешний маршрут после NAT или исходящего шлюза: внутренний адрес почтового сервера может не совпадать с публичным IP, который видит получатель. В условном кейсе «Юноны» запись следует запросить у владельца внешнего IP и после обновления повторить отправку на тестовый ящик. Если PTR исправен, но письмо всё равно отклоняется, не надо бесконечно переставлять DNS — пора изучить ответ сервера и соседние проверки.

Указанный адрес может принадлежать облачному почтовому поставщику, и тогда клиент не управляет его PTR. В таком случае смотрю на заголовки полученного письма и документированные требования самого поставщика, а не пытаюсь выставить чужую обратную зону самостоятельно. Это простая граница ответственности, но она экономит часы переписки с DNS-панелью.

PTR особенно важен для собственного исходящего IP. Проверяйте публичный адрес SMTP-соединения, а не адрес интерфейса внутри сети.

DMARC: выравнивание и реальный смысл p=none

DMARC проверяет не просто наличие SPF и DKIM. Для результата DMARC pass хотя бы один механизм должен успешно пройти аутентификацию и быть выровнен с доменом в видимом заголовке From. SPF pass для другого домена или валидная DKIM-подпись с чужим d= сами по себе такого результата не дают. В этом месте часто скрыта причина: по отдельности проверки зелёные, а домены отправителя и подписи не совпали. Именно поэтому я смотрю Authentication-Results целиком, а не на три значка в онлайн-проверке.

Политика p=none не просит получателя менять обращение с письмом на основании DMARC. Но это не отключает сами проверки SPF и DKIM и не означает, что письмо обязательно примут: другие фильтры продолжают работать. Для полезной диагностики укажите rua с адресом для агрегированных отчётов и убедитесь, что отчёты действительно приходят. Без rua вы не получите агрегированную картину отправляющих систем через этот механизм; одна запись p=none не создаёт волшебную панель мониторинга.

В актуальном RFC 9989 для первоначального сбора данных обычно предлагается начать с p=none и rua, чтобы обнаружить пропущенные серверы и сторонние отправки. Я сначала раскладываю отчёты по источнику, домену SPF, домену DKIM и выравниванию, затем связываю неизвестный поток с ответственным сервисом. Только когда легитимные отправители понятны и исправлены, обсуждаю с владельцем домена p=quarantine или p=reject. Переход — управленческое решение о том, что получатель должен делать с письмами, которые не проходят DMARC; это не кнопка «доставлять лучше».

В отчёте DMARC могут быть полезные сведения о результатах и количестве сообщений по источникам. Я не называю каждый неизвестный источник атакой: это может быть старый сайт, забытая рассылка или неправильно настроенная переадресация. Отчёт помогает составить список для разбора, но сам по себе не доказывает намерение отправителя. Отдельно о проблеме, когда жёсткая политика влияет на легитимную почту, — в статье почему p=reject мешает доставке.

p=none — режим наблюдения за DMARC, а не команда получателю фильтровать письмо в спам.
Если в отчётах не сходятся домены SPF, DKIM и From, мы разберём отправляющие системы, найдём забытые потоки и подготовим порядок безопасной смены DMARC-политики. Обсудить задачу
Дерево DMARC: выравнивание SPF или DKIM и действия политики
Для DMARC pass достаточно одного выровненного результата.

Если все проверки прошли, исследуйте репутацию и поток

Когда SPF, DKIM и DMARC проходят, а письмо остаётся в спаме, я переключаюсь с DNS на факторы отправки: жалобы получателей, внезапный рост объёма, качество адресной базы и репутацию IP и домена. В правилах Gmail для отправителей указано держать долю жалоб на спам, видимую в Postmaster Tools, ниже 0,3 %. Это порог из рекомендаций Google для его получателей, а не универсальная граница, после которой любой другой почтовый сервис обязан принять письмо.

Проверяю, отправляются ли письма только тем, кто их ожидает, одинаков ли объём изо дня в день, нет ли скачка после импорта контактов или смены сервиса. Затем сравниваю SMTP-ответ, папку назначения и заголовки нескольких сообщений от разных отправителей и адресатов. При миграции отдельно сверяю старый и новый маршрут, потому что новые IP, подписи и конвертные домены могут изменить результаты. Для этого пригодится проверка доставки после переезда почты, а отдельную оценку IP-репутации разбирает материал как проверить репутацию IP.

Порядок действий у меня такой: зафиксировать письмо, его время и адресата; проверить SPF, DKIM, DMARC и PTR именно для фактического исходящего пути; сопоставить результаты с SMTP-ответом; затем проверить репутационные сигналы и историю отправок. Если найден конкретный отказ SPF или DKIM, исправляю соответствующий источник. Если все аутентификационные результаты и выравнивание корректны, не придумываю DNS-ошибку — уточняю правила получателя, частоту отправки и жалобы. Так появляется проверяемая причина, а не очередной круг замен ~all на -all.

Перед закрытием инцидента я отправляю контрольные письма нескольким внешним адресатам, сохраняю их заголовки и сравниваю результат с исходным. Если один сервис принимает письмо, а другой кладёт его в спам, это важная улика: политики и репутационные оценки у них различаются. Записываю, какое изменение сделано и на каком домене, чтобы следующий администратор не отменил его «для чистоты». Проблему считают решённой не тогда, когда DNS-панель стала зелёной, а когда понятны результаты проверок у нужных получателей.

Частые вопросы

Почему письмо попадает в спам, если SPF, DKIM и DMARC проходят?

Аутентификация подтверждает отдельные свойства отправки, но не гарантирует папку назначения. Проверьте PTR для исходящего IP, репутацию домена и адреса, жалобы, объём отправки и правила конкретного получателя.

Нужно ли обязательно менять SPF ~all на -all?

Нет. Сначала найдите все законные источники отправки и проверьте SPF для реальных писем. -all сообщает, что не перечисленные источники не разрешены, но сам по себе не улучшает доставку.

Что значит несколько записей SPF?

Для одного имени должна быть одна SPF-политика. Несколько записей v=spf1 для этого имени приводят к permerror; разрешённые источники объединяют в одну корректную запись.

Нужно ли обновлять DKIM-ключ по расписанию?

У DKIM-ключа нет стандартного срока истечения. Ротацию планируют по требованиям безопасности и при изменениях инфраструктуры; необязательный x= в подписи относится к сроку самой подписи.

Означает ли DMARC p=none, что письма не проверяются?

Нет. SPF и DKIM продолжают проверяться, а p=none означает, что DMARC не просит получателя менять обращение с письмом. Для агрегированных отчётов настройте rua.

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи