✉️ SPF
🔐 Что такое SPF-запись?
SPF (Sender Policy Framework) — это механизм аутентификации электронной почты, который позволяет владельцу домена указать, какие почтовые серверы могут отправлять письма от имени его домена. SPF-запись — это DNS-запись типа TXT, которая указывается в настройках домена.
🧱 Формат SPF-записи
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
Вот список поддерживаемых механизмов, которые можно использовать в SPF-записи:
Механизм | Описание |
---|---|
all | Совпадает со всеми адресами. Обычно используется в конце. |
ip4: | IPv4-адрес или подсеть, с которой разрешена отправка. |
ip6: | IPv6-адрес или подсеть. |
a | Разрешены IP-адреса, указанные в A-записи домена. |
mx | Разрешены IP-адреса, указанные в MX-записи домена. |
ptr | Не рекомендуется. Проверяет обратное разрешение IP-адреса. |
exists: | Проверяет существование домена. |
include: | Включает SPF-запись другого домена. |
✅ Квалификаторы
Квалификаторы указывают, как следует интерпретировать результат проверки:
Символ | Поведение | |
---|---|---|
+ | Pass | Разрешено (по умолчанию). |
- | Fail | Запрещено — письмо отклоняется. |
~ | SoftFail | Не рекомендуется — может быть помечено как спам. |
? | Neutral | Нет четкого правила — оставлено на усмотрение получателя. |
Примеры:
- -all — только указанные источники разрешены, остальным отказ.
- ~all — мягкий отказ (чаще используется при тестировании).
- ?all — нейтрально, ничего не запрещено.
📌 Примеры SPF-записей
Простой пример:
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
🚨 Ограничения SPF
- DNS-запросов не более 10 (включая include, a, mx, ptr, exists).
- Общая длина TXT-записи — до 255 символов на строку, но может быть разбита на несколько строк, смотри spf у alfabank.ru
- Использовать только один SPF-запись TXT типа на домен. Если их две — это ошибка.
🧪 Проверка SPF
Через команду:
nslookup -type=txt example.com | grep "spf"
Онлайн-инструменты:
📣 SPF и HELO
Проверка 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
💡 Рекомендации
- Используй -all только когда точно уверен в списке серверов.
- Начни с ~all, протестируй отправку, потом переходи на -all.
- Не превышай 10 DNS-запросов (следи за количеством include, a, mx).(я попадал в ситуацию, когда из-за вложений проверок было больше 10 и статутс PermError, письма не доставлялись).
- Если у вас внешние ip адреса меняются редко, то лучше не использовать проверки A MX, а указывать только ip4.
- Все проверки сводятся к преобразованию A→IP, MX→A→IP, поэтому лучше использовать ipv4
- Разбор spf идёт слева направо и если первый IP или преобразование в IP совпадает с IP сервера, то дальше обработка не осуществляется.
- Публикуйте запись "v=spf1 -all" для доменов, которые принадлежат вам, но не посылают почту, смотри spf для example.com.