Проверка SPF-записи

Введите домен, чтобы найти его запись SPF, или вставьте запись, которую собираетесь опубликовать. Вы увидите, каким серверам разрешено отправлять почту домена, что означает каждый элемент, сколько из 10 запросов DNS она использует и что исправить.

Что проверить
Домен из адреса в From, например example.com. Вставленный адрес e-mail или URL тоже подойдёт.
Запись SPF Введите домен и нажмите «Проверить SPF», чтобы увидеть его запись, что значит каждый элемент и сколько запросов DNS она стоит.

Отправляете почту со своего VPS? Добавьте его адреса IPv4 и IPv6 в SPF через ip4 и ip6 (запросы DNS при этом не нужны), задайте для обоих обратный DNS с именем сервера и до заказа спросите провайдера, открыт ли исходящий порт 25. Сейчас от 4,46 € в месяц, на выбор: 2 132 сервера.

Проверяемый домен отправляется на наш сервер, а оттуда по HTTPS — публичному резолверу Cloudflare (1.1.1.1), вместе с доменами из include его записи. Вставленная запись проверяется в вашем браузере и никуда не отправляется. Ни то, ни другое мы не сохраняем.

Как работает проверка SPF

Наш сервер запрашивает у публичного резолвера Cloudflare TXT-записи домена и выбирает ту, что начинается с v=spf1. Затем он ищет запись SPF каждого домена, указанного в include или redirect, и доменов, которые указаны в них, — не более 20 записей и шесть уровней вложенности, как это сделал бы принимающий почтовый сервер. К самим почтовым серверам он не подключается.

Каждый элемент разбирается по правилам RFC 7208. Получатель сверяет адрес сервера, отправившего письмо, с элементами слева направо; решает первый совпавший, а его квалификатор определяет результат: + пройдено, - отказ, ~ мягкий отказ, ? нейтрально. Элемент без квалификатора означает «пройдено».

Элементы include, a, mx, ptr, exists и redirect стоят по одному запросу DNS, как и те, что находятся внутри каждой подключённой записи. RFC 7208 допускает 10 за проверку: если больше, получатель останавливается, и SPF не проходит для всей почты домена. ip4, ip6 и all ничего не стоят. В режиме вставки запись читается в вашем браузере, поэтому считаются только её собственные запросы.

Механизмы и квалификаторы SPF

Элементы, которые может содержать запись SPF, что соответствует каждому и сколько из 10 запросов он стоит:

ЭлементСовпадает, когда отправляющий сервер…Запросы
ip4имеет адрес IPv4 из указанного адреса или диапазона, например ip4:192.0.2.0/24.0
ip6имеет адрес IPv6 из указанного адреса или диапазона, например ip6:2001:db8::/32.0
aимеет адрес из записи A или AAAA домена (этого домена или a:other.example).1
mxявляется одним из почтовых серверов домена (его записи MX).1
includeпроходит по записи SPF другого домена, обычно почтового сервиса.1 + запросы его записи
existsделает так, что существует имя, которое получатель составляет из письма; для особых случаев.1
ptrимеет имя в обратном DNS внутри домена. Не используйте: медленно и ненадёжно.1
allлюбой сервер. Ставится последним: определяет, что происходит с каждым сервером, которого нет в списке.0
redirect=разрешён записью другого домена; используется, если в этой записи ничего не совпало.1 + запросы его записи
exp=никогда: он только указывает текст, объясняющий отказ.0

Квалификаторы

  • + пройдено (по умолчанию, если ничего не написано): серверу отправлять можно.
  • - отказ: серверу отправлять нельзя; получатели могут отклонить письмо.
  • ~ мягкий отказ: скорее всего, нельзя; письмо принимается, но считается подозрительным.
  • ? нейтрально: без вердикта, как будто записи SPF нет.

Пример

example.com публикует «v=spf1 ip4:192.0.2.10 mx include:spf.mailer.example ~all». Элемент ip4 запросов не требует, mx стоит один запрос, а include — один запрос плюс то, что нужно записи spf.mailer.example. Эта запись — «v=spf1 ip4:198.51.100.0/24 include:spf2.mailer.example -all»: ещё один запрос, а spf2.mailer.example перечисляет только диапазоны адресов. Итого 3 из 10. Письмо с 192.0.2.10 проходит на первом элементе; письмо с 203.0.113.5, которого нет ни в одном элементе, доходит до ~all и получает мягкий отказ: его обычно принимают, но считают подозрительным.

Вопросы

Что такое запись SPF и как её проверить?

SPF (Sender Policy Framework) — это TXT-запись в DNS домена, которая начинается с v=spf1 и перечисляет серверы, которым разрешено отправлять почту от его имени. Чтобы проверить её, введите домен выше: инструмент найдёт запись, пройдёт по её include и покажет, что означает каждый элемент и что не так. Чтобы проверить запись до публикации, переключитесь в режим вставленной записи.

Как исправить ошибку «слишком много запросов DNS» в SPF?

SPF допускает 10 запросов DNS за одну проверку: считается каждый include, a, mx, ptr, exists и redirect, в том числе внутри подключённых записей. Если больше 10, проверка заканчивается постоянной ошибкой (permerror). Удалите include сервисов, которыми больше не пользуетесь, замените a и mx на адреса ip4 и ip6, которые за ними стоят, а массовую рассылку отправляйте с поддомена с собственной записью SPF. Помогает и «сплющивание» (flattening — копирование адресов сервиса в вашу запись), но запись устаревает, когда сервис меняет адреса.

Может ли у домена быть две записи SPF?

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

Чем отличается ~all от -all?

-all (отказ) сообщает получателям, что почта с серверов, которых нет в списке, не разрешена и может быть отклонена. ~all (мягкий отказ) говорит, что она, скорее всего, не разрешена: её обычно принимают и помечают как подозрительную. При включённом DMARC получатели в любом случае следуют политике DMARC, поэтому чаще выбирают ~all; -all подходит домену, который вообще не отправляет почту. Избегайте ?all и +all: они ничего не защищают.

Защищает ли SPF адрес в From, который видят люди?

Сам по себе нет. SPF проверяет домен адреса возврата (Return-Path), которого люди не видят, поэтому злоумышленник может пройти SPF со своим доменом и при этом показывать в From ваш. DMARC закрывает эту лазейку: он требует, чтобы SPF или DKIM проходили для домена в строке From. Проверка DMARC покажет, так ли это у вас.