Что такое SPF?
SPF (Sender Policy Framework) - DNS-политика, перечисляющая серверы, которым разрешено отправлять почту от имени домена. SPF помогает обнаруживать подделку, но не заменяет DKIM и DMARC.
Почему SPF важен
SPF позволяет принимающему серверу сравнить IP отправителя с опубликованной политикой и классифицировать результат pass, fail, softfail или ошибку.
Как работает SPF
Получатель получает TXT-запись домена отправителя, обрабатывает механизмы и проверяет IP envelope-from. Лимит DNS-запросов и временные ошибки влияют на результат.
Синтаксис SPF-записи
v=spf1 [mechanisms] [qualifier]all
Примеры SPF-записей
Политика начинается с v=spf1 и завершается механизмом all. Пример из исходной документации сохранён ниже.
v=spf1 ip4:203.0.113.50 -all
v=spf1 include:_spf.google.com ~all
v=spf1 include:_spf.google.com include:sendgrid.net ip4:203.0.113.50 -all
Механизмы SPF
ip4, ip6, a, mx, include, exists и redirect описывают разрешённые источники. Используйте include только для доверенных провайдеров.
| Механизм | Описание | Пример |
|---|---|---|
| ip4 | IPv4-адрес или диапазон | ip4:203.0.113.0/24 |
| ip6 | IPv6-адрес или диапазон | ip6:2001:db8::/32 |
| include | Включить SPF другой зоны | include:_spf.google.com |
| a | IP-адреса A-записей домена | a:mail.example.com |
| mx | IP-адреса MX-серверов домена | mx |
| all | Совпадает со всеми (обычно последний) | -all, ~all, ?all |
Квалификаторы
+, -, ~ и ? задают pass, fail, softfail и neutral. Выбирайте строгую политику после проверки легитимных отправителей.
| Квалификатор | Результат | Значение |
|---|---|---|
| + (по умолчанию) | Pass | Разрешённый отправитель |
| - | Fail | Несанкционированный, отклонить |
| ~ | SoftFail | Вероятно несанкционированный, принять с отметкой |
| ? | Neutral | Политика не заявлена |
Лучшие практики внедрения SPF
Начните с SoftFail
Используйте ~all во время инвентаризации источников и анализа отчётов, не принимая его за полноценную защиту.
v=spf1 include:_spf.google.com ~all
Перейдите к Fail
После проверки всех сервисов замените политику на -all и отслеживайте неожиданные отказы.
v=spf1 include:_spf.google.com -all
Держите DNS lookup ниже 10
RFC ограничивает число DNS-механизмов. Сокращайте include, избегайте циклов и проверяйте permerror.
# Counts as DNS lookups:
include:_spf.google.com # 1 (plus nested includes)
a:mail.example.com # 1
mx # 1
# Does NOT count:
ip4:203.0.113.50 # 0
ip6:2001:db8::1 # 0
Только одна SPF-запись
Публикуйте одну TXT-политику SPF для домена. Несколько записей дают permerror и требуют объединения.
# Wrong - two SPF records
v=spf1 include:_spf.google.com ~all
v=spf1 include:sendgrid.net ~all
# Correct - combined
v=spf1 include:_spf.google.com include:sendgrid.net ~all
Проверка SPF-записей
Используйте dig, официальные панели и заголовок Authentication-Results, фиксируя время, resolver, IP и envelope-from.
dig example.com TXT | grep spf
curl "https://domscan.net/v1/health?domain=example.com"
# Returns hasSPF status
Частые проблемы SPF
Слишком много DNS-запросов
Сократите вложенные include, уберите устаревшие сервисы и повторно проверьте лимит.
Нет сторонних сервисов
Добавьте только подтверждённые источники отправки, иначе легитимная почта может получить fail.
Слишком разрешающая политика SPF
?all или ~all не ограничивают подделку так строго, как -all. Выбор должен основываться на проверенных данных и процедуре отката.