Как работает проверка SPF-записи
Инструмент читает TXT-записи указанного домена и выбирает запись, которая начинается с v=spf1. Затем он проходит по всем include и redirect так же, как принимающий сервер, учитывает каждое обращение к DNS и проверяет синтаксис каждого механизма.
IP-адрес здесь не используется. Проверяется, корректна ли запись и не превышает ли она допустимое число DNS-запросов для любого сервера, которому придется ее обрабатывать, а не то, разрешено ли отправлять почту одному конкретному серверу. Чтобы проверить это, отправьте письмо через полный тест. В отчете будет показан результат, который фактически получил принимающий сервер.
Слишком много DNS-запросов: лимит 10
RFC 7208 ограничивает проверку SPF десятью механизмами, требующими запроса DNS: include, a, mx, ptr, exists и redirect. Учитывается все дерево, поэтому include, который сам содержит еще три include, использует четыре запроса. При превышении лимита результатом будет permerror, который DMARC считает непрохождением SPF.
Инструмент учитывает каждый механизм, включая те, до которых проверка может не дойти, поскольку реальная проверка останавливается при первом совпадении. Серверы, указанные в начале, продолжают проходить проверку, а указанные дальше начинают ее проваливать. Со стороны это выглядит так, будто почта работает для одних писем и не работает для других.
Механизмы ip4 и ip6 не расходуют лимит. Замена include диапазонами адресов, то есть уплощение записи, сокращает число запросов, но такие диапазоны придется вручную синхронизировать с данными ваших провайдеров.
Какие ошибки стоит проверить
Две SPF-записи для одного домена. Это происходит, когда в инструкции по настройке второго провайдера сказано добавить запись, но ее никто не объединяет с первой. Наличие двух записей само по себе приводит к permerror.
Окончание +all, которое разрешает пройти проверку любому серверу в интернете, или ?all, которое ничего ни о ком не сообщает и поэтому ничего не защищает. Механизм ptr, который RFC 7208 не рекомендует использовать. Include для сервисов, которыми компания перестала пользоваться много лет назад, по-прежнему расходуют по одному DNS-запросу.
Вопросы
Как выглядит SPF-запись?
Это одна TXT-запись домена, которая начинается с v=spf1, перечисляет разрешенных отправителей и заканчивается правилом для всех остальных. v=spf1 include:_spf.google.com ip4:203.0.113.5 ~all разрешает отправку через Google Workspace и один сервер, а для остальных возвращает softfail. Домен может публиковать только одну такую запись.
SPF softfail или hardfail: ~all или -all?
После настройки DMARC подходят оба варианта, поскольку DMARC определяет, что происходит с письмом, которое не прошло проверку. ~all (softfail) безопаснее, пока вы выявляете все сервисы, отправляющие письма от вашего имени. Перейдите на -all, когда отчеты DMARC покажут, что ни одно легитимное письмо не проваливает проверку.
Почему в полной проверке моя запись проходит, а здесь указано больше десяти DNS-запросов?
Получатель прекратил проверку на первом условии, которому соответствовал ваш сервер, поэтому остальные DNS-запросы не выполнялись. Другой сервер, находящийся дальше в списке, привел бы к тому, что та же проверка превысила бы лимит в десять запросов и завершилась ошибкой.
Что такое пустой DNS-запрос?
Это DNS-запрос, который не возвращает записей или обращается к несуществующему имени. RFC 7208 допускает два таких результата при проверке, третий приводит к permerror. Обычная причина, include для доменов, которые больше не существуют.
Может ли у домена быть две SPF-записи?
Нет. RFC 7208 допускает одну запись, начинающуюся с v=spf1. При наличии двух таких записей любая проверка завершается permerror. Объедините их: оставьте одну запись v=spf1, добавьте в нее директивы include и ip4 из обеих записей и завершите одним all. v=spf1 include:_spf.google.com include:servers.mcsv.net ~all охватывает двух провайдеров в одной записи.
Полное руководство: Multiple SPF records
Что означает SPF permerror?
Постоянная ошибка: опубликованную запись невозможно проверить, поэтому повторная попытка даст тот же результат. Обычные причины: более 10 DNS-запросов, две SPF-записи у одного домена, синтаксическая ошибка и третий DNS-запрос без результата. Для DMARC результат permerror означает, что SPF не пройден.
Полное руководство: SPF permerror: too many DNS lookups
Что делать, если SPF-запись не найдена?
Получающие серверы получают результат none, который DMARC обрабатывает так же, как fail. При этом любой может указать ваш домен в адресе отправителя конверта. Опубликуйте одну TXT-запись для самого домена, которая начинается с v=spf1, перечисляет сервисы, отправляющие почту от вашего имени, и заканчивается на ~all или -all.