✉️ SPF

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

SPF-запись размещается в DNS как TXT и выглядит примерно так:

 v=spf1 ip4:192.0.2.1 include:_spf.google.com -all

Разберем её по частям:

Часть Значение
v=spf1Обязательное начало SPF-записи. Указывает на версию SPF. Сейчас актуальна только v=spf1.
ip4:192.0.2.1Разрешено отправлять почту с IP-адреса 192.0.2.1.
include:_spf.google.comРазрешено использовать все IP-адреса, которые указаны в SPF-записи _spf.google.com.
-allВсё остальное запрещено (жесткий отказ).

Вот список поддерживаемых механизмов, которые можно использовать в SPF-записи:

МеханизмОписание
allСовпадает со всеми адресами. Обычно используется в конце.
ip4:IPv4-адрес или подсеть, с которой разрешена отправка.
ip6:IPv6-адрес или подсеть.
aРазрешены IP-адреса, указанные в A-записи домена.
mxРазрешены IP-адреса, указанные в MX-записи домена.
ptrНе рекомендуется. Проверяет обратное разрешение IP-адреса.
exists:Проверяет существование домена.
include:Включает SPF-запись другого домена.

Квалификаторы указывают, как следует интерпретировать результат проверки:

СимволПоведение
+PassРазрешено (по умолчанию).
-FailЗапрещено — письмо отклоняется.
~SoftFailНе рекомендуется — может быть помечено как спам.
?NeutralНет четкого правила — оставлено на усмотрение получателя.

Примеры:

  • -all — только указанные источники разрешены, остальным отказ.
  • ~all — мягкий отказ (чаще используется при тестировании).
  • ?all — нейтрально, ничего не запрещено.

Простой пример:

v=spf1 ip4:203.0.113.5 -all

Только IP 203.0.113.5 может отправлять почту от домена.

Google Workspace:

v=spf1 include:_spf.google.com ~all

Несколько отправителей:

v=spf1 ip4:198.51.100.10 include:mailgun.org include:_spf.google.com -all
  • DNS-запросов не более 10 (включая include, a, mx, ptr, exists).
  • Общая длина TXT-записи — до 255 символов на строку, но может быть разбита на несколько строк, смотри spf у alfabank.ru
  • Использовать только один SPF-запись TXT типа на домен. Если их две — это ошибка.
nslookup -type=txt example.com | grep "spf"

Проверка SPF осуществляется по домену и это является обязательным. Рекомендованым является проверка по имени хоста, который передаётся в HELO. Например домен mydomain.ru, а имя хоста HELO mail.mydomain.ru. Необходимо продублировать SPF запись для домена mail.mydomain.ru, чтобы проверка по имени хоста тоже проходила.

 mydomain.ru v=spf1 ip4:203.0.113.5 -all
 mail.mydomain.ru v=spf1 ip4:203.0.113.5 -all
  1. Используй -all только когда точно уверен в списке серверов.
  2. Начни с ~all, протестируй отправку, потом переходи на -all.
  3. Не превышай 10 DNS-запросов (следи за количеством include, a, mx).(я попадал в ситуацию, когда из-за вложений проверок было больше 10 и статутс PermError, письма не доставлялись).
  4. Если у вас внешние ip адреса меняются редко, то лучше не использовать проверки A MX, а указывать только ip4.
  5. Все проверки сводятся к преобразованию A→IP, MX→A→IP, поэтому лучше использовать ipv4
  6. Разбор spf идёт слева направо и если первый IP или преобразование в IP совпадает с IP сервера, то дальше обработка не осуществляется.
  7. Публикуйте запись "v=spf1 -all" для доменов, которые принадлежат вам, но не посылают почту, смотри spf для example.com.