SPF (Sender Policy Framework)
SPF (Sender Policy Framework)
SPF — это стандарт для email, который позволяет владельцу домена публично объявить в DNS список серверов, которым разрешено отправлять письма от имени этого домена. Приёмный сервер сверяет реального отправителя со списком и решает, доверять письму или считать его подделкой.
История
Начало 2000-х, США. Meng Weng Wong (Мэн Вэн Вон), сооснователь провайдера pobox.com — один из первых массово формулирует идею: пусть домен сам скажет, кто имеет право слать от его имени. До этого злоумышленник мог тривиально поставить в поле «From» любой адрес: почтовый протокол SMTP (Simple Mail Transfer Protocol — простой протокол пересылки почты) образца 1982 года никакой проверки отправителя не предусматривал вообще. Это делало возможным массовые спам-рассылки и фишинг «от имени банка».
2003 — первый черновик SPF и объединение с параллельным проектом RMX (Reverse MX) Хадмута Данеша. Идея простая: добавить в DNS-зону домена специальную TXT-запись, где перечислены IP-адреса и другие домены, которым разрешено отправлять почту. Приёмник смотрит IP отправителя, тянет TXT-запись домена из письма и сверяет.
2006 — RFC 4408. Первый официальный экспериментальный стандарт. Он же ввёл отдельный тип DNS-записи SPF (номер 99) — казалось, что это правильнее, чем перегружать общий TXT. На практике почти все реализации остались на TXT — многие DNS-провайдеры долго не умели заводить кастомные типы, а поддерживать две записи параллельно оказалось хуже, чем одну.
2014 — RFC 7208. Обновлённая версия, уже proposed standard (полноценный стандарт-кандидат). Именно она действует сегодня. Здесь окончательно закрепили: тип DNS-записи — только TXT, отдельный тип SPF (99) объявлен устаревшим. Также RFC 7208 уточнил лимиты по количеству DNS-запросов при разборе одной SPF-записи (не больше 10 lookup-ов, о них ниже).
Текущий статус (2026). SPF — базовый обязательный кирпич для любой массовой рассылки. С 2024 года Gmail и Yahoo официально требуют SPF вместе с DKIM и DMARC для отправителей от 5000 писем в сутки — без этого набора письма отбрасывают или ставят «спам» автоматически. Российские провайдеры (Mail.ru Group, Яндекс.Почта) держат похожие требования.
Что это такое
SPF — это механизм авторизации отправляющего сервера. Не проверка содержимого письма и не подпись, а именно вопрос: «имеет ли право этот конкретный SMTP-сервер отправлять почту от имени этого домена?».
Всё держится на трёх сущностях:
- Домен отправителя — берётся не из «красивого» поля From, которое видит человек, а из так называемого MAIL FROM (envelope sender, «конверт-адрес»). Это адрес, который SMTP-сервер передаёт в команде
MAIL FROM:<...>при доставке. Может отличаться от From (например,bounces@newsletter.example.comв MAIL FROM иhello@example.comв From — обычная практика для рассылок). - DNS TXT-запись — публикуется владельцем домена, начинается с
v=spf1, дальше идут механизмы разрешения и запретительная политика в конце. - Проверяющий сервер — обычно принимающий MTA (Mail Transfer Agent — почтовый узел) вроде Gmail, Postfix, Exim. Он тянет TXT-запись домена из MAIL FROM и проверяет, входит ли IP подключившегося отправителя в разрешённый список.
SPF vs DKIM. SPF отвечает на вопрос «правильный ли сервер отправил?», DKIM (DomainKeys Identified Mail) — «не подделали ли содержимое по пути и подписал ли его правильный домен?». Это разные слои. SPF ломается при пересылке (forwarding): если Вася переслал письмо со своего почтового ящика на другой адрес, конверт-отправитель может остаться прежним, а слать будет уже сервер Васи — SPF не сойдётся. DKIM в этой ситуации обычно выживает, потому что подпись едет вместе с телом. Именно поэтому современный подход — использовать оба вместе.
SPF vs DMARC. DMARC — это надстройка, которая описывает, что делать, когда SPF или DKIM не прошли. Сам по себе SPF только выдаёт вердикт «pass/fail/softfail», но не диктует принимающему серверу, что с этим делать. DMARC говорит: «если ни SPF, ни DKIM не прошли — отправляй в спам» или «отбрасывай совсем» и «шли мне отчёт вот сюда». Без DMARC даже жирный SPF-fail часто не приводит к отклонению — приёмник просто «ставит галочку».
Как выглядит SPF-запись. Примерно так:
v=spf1 ip4:192.0.2.10 ip4:192.0.2.11 include:_spf.google.com include:sendgrid.net -all
Читается: «версия 1; разрешаем IP 192.0.2.10 и .11; разрешаем всё, что перечислено в SPF-записи домена google (это MX-серверы Gmail); разрешаем всё, что перечислено у SendGrid; всё остальное — жёсткий fail». -all в конце — это «политика»: -all — жёстко отклонять, ~all — softfail (пометить, не отклонять), +all — разрешить всех (никогда так не делай, это буквально «слать от нашего домена может кто угодно»).
Аналогии из жизни
Пропуск на охраняемой парковке.
У торгового центра есть охраняемая парковка. У ресепшена — список номеров машин, которым разрешено ставиться от имени арендатора «Кафе Ромашка». Приезжает грузовик, говорит: «Я от Ромашки». Охранник смотрит номер по списку — есть, впускает. Нет — заворачивает. SPF — этот самый список у ресепшена, только в DNS.
Где ломается: если владелец Ромашки нанял новую службу доставки и забыл добавить их машины в список — легитимные грузовики завернут. Так же и с SPF: подключил новый сервис рассылок (условный UniSender, SendGrid, Mailchimp), но не дописал их в TXT-запись — почта от этого сервиса пойдёт в спам, хотя ты сам её заказал. Это самая частая причина «наши письма не доходят» после переезда на новый провайдер рассылок.
Штамп «Отправлено с моего аккаунта на почте».
Раньше в некоторых странах на конвертах ставили штамп почтового отделения — «принято отделением №42, город N». Получатель по штампу мог убедиться: если письмо якобы от банка, а штамп какой-то мелкой сельской почты в другом регионе — что-то не так. SPF — это проверка штампа: реально ли письмо ушло из «отделения», которое разрешено домену.
Где ломается: если письмо пришло тебе на почту, а ты пересылаешь его другу — на новом конверте будет уже штамп твоего отделения, не банковского. Формально «неправильный отправитель», хотя содержание оригинальное. Именно так SPF ломается при forwarding-е: пересылающий сервер меняет envelope sender-а, и SPF-проверка на стороне финального получателя выдаёт fail. Против этого придумали SRS (Sender Rewriting Scheme) и подход, при котором пересылщик добавляет свой DKIM.
Шенгенская виза и авиакомпания.
Когда ты летишь в Европу, авиакомпания перед посадкой в самолёт проверяет визу — это её обязанность (Directive 2004/82/EC), иначе штраф. Виза — «право въезда», а не «право лететь». Похоже и с SPF: он подтверждает не то, что письмо законное по содержанию, а только то, что отправитель имеет право «лететь под флагом» этого домена.
Где ломается: виза не означает, что тебя точно впустят на границе — пограничник может завернуть по другим основаниям (мало денег, подозрительная цель поездки). Так же SPF-pass не гарантирует, что письмо попадёт во «Входящие»: приёмник смотрит ещё и на репутацию IP, содержимое, DKIM, DMARC, поведение пользователей. SPF — необходимое, но далеко не достаточное условие доставляемости.
Как это работает
Пошагово, что происходит при отправке одного письма.
Шаг 1. Сервер-отправитель (условно mail.example.com) устанавливает SMTP-соединение с сервером-получателем (например, gmail-smtp-in.l.google.com). Уже на этом этапе получатель видит IP-адрес отправителя — из TCP-соединения.
Шаг 2. Отправитель произносит команду MAIL FROM:<newsletter@example.com> — это и есть envelope sender. Именно домен из MAIL FROM (example.com) будет использован для SPF-проверки. Если MAIL FROM пустой (иногда бывает при bounce-сообщениях) — SPF проверяют по домену из HELO / EHLO, то есть по имени, которым сервер представился в начале разговора.
Шаг 3. Приёмник делает DNS-запрос типа TXT для домена example.com. Получает ответ, ищет среди TXT-записей ту, что начинается с v=spf1. Если таких записей больше одной — по стандарту это ошибка permerror (нельзя иметь две SPF-записи на один домен).
Шаг 4. Приёмник разбирает механизмы SPF-записи слева направо и для каждого проверяет, подходит ли под него IP отправителя. Основные механизмы:
ip4:192.0.2.0/24— конкретный IPv4 или диапазон.ip6:2001:db8::/32— то же для IPv6.a— разрешить IP, соответствующий A-записи домена (домен из SPF-записи по умолчанию, либо явно указанный).mx— разрешить IP всех MX-серверов домена (то есть тех, кто принимает почту для домена).include:_spf.google.com— подключить SPF-запись другого домена целиком. Каждый такой include стоит один DNS-запрос.exists:foo.example.com— pass, если A-записьfoo.example.comвообще существует (используется для сложных динамических конфигураций).
Шаг 5. Как только один из механизмов совпал, применяется его квалификатор (символ перед именем): + (по умолчанию) — pass, - — hardfail, ~ — softfail, ? — neutral. Разбор останавливается. Если ни один механизм не совпал — применяется «all» из конца записи.
Шаг 6. Приёмник получает результат и добавляет его в служебный заголовок письма — Received-SPF: pass|fail|softfail|neutral|none|temperror|permerror, а также включает в общий заголовок Authentication-Results. Что делать с результатом — решает DMARC-политика домена или локальная политика приёмника.
Ограничение 10 DNS-запросов. Ключевое место, где рушится куча реальных конфигураций. RFC 7208 говорит: при разборе одной SPF-записи приёмнику разрешено сделать не более 10 DNS-запросов. Каждый include, a, mx, exists — это один запрос. include рекурсивен: если внутри тоже есть include-ы, они тоже считаются. Если превысил — результат permerror, и с точки зрения многих приёмников это как fail. Практически это значит: подключил SendGrid + Mailchimp + Google Workspace + Zendesk + ещё пару сервисов — и уже уткнулся в лимит. Спасение — так называемый SPF flattening (замена всех include-ов на конкретные IP-адреса) или использование сервисов вроде autospf.com, которые генерируют «плоскую» запись автоматически.
Псевдокод логики приёмника (упрощённо):
ip = tcp_source_ip
domain = mail_from.split('@')[1] # или HELO, если MAIL FROM пуст
spf_record = dns_txt(domain).filter(startswith("v=spf1"))
if len(spf_record) != 1: return "none" or "permerror"
for mechanism in parse(spf_record):
if match(mechanism, ip):
return quality(mechanism) # pass / fail / softfail / neutral
if dns_lookups_used > 10: return "permerror"
return apply(all_mechanism) # обычно fail или softfail
Где встречается в обычной жизни
- Ты нажимаешь «Отправить» в Gmail или Яндекс.Почте. Приёмный сервер твоего адресата (например, корпоративный Outlook) сразу же дёргает SPF-запись домена gmail.com или yandex.ru. Ты этого не видишь, но это происходит каждый раз.
- Тебе пришло письмо «от Сбербанка», ты сомневаешься. Открой исходник письма (в Gmail — «Показать оригинал»). Ищи заголовок
Received-SPFилиAuthentication-Results. Если тамspf=failилиspf=noneдля домена sberbank.ru — почти наверняка фишинг. - Тебе не приходит подтверждение регистрации на каком-нибудь сервисе. Часто причина именно в SPF: сервис отправляет с их серверов, но настроен так, что MAIL FROM указывает на твой корпоративный домен (например, если сервис умеет отправлять «от твоего имени»). Твоя SPF-запись сервис не разрешает — письмо к тебе же обратно уходит в спам.
- Ты сменил хостинг сайта или почтового провайдера. Пока не обновил SPF-запись — часть писем от твоего домена начинает не доходить. Симптом: «мои клиенты не получают наши уведомления после переезда».
- Массовая рассылка от отдела маркетинга. Если у компании есть отдел, который рассылает промо через Unisender или Mailchimp, а SPF-запись домена не содержит
include:этого сервиса — доставляемость падает в разы. Обычно это вылезает через 1–2 месяца работы, когда репутация домена уже подпорчена.
Где встречается в IT и бизнесе
- Транзакционные рассылки (регистрация, восстановление пароля, чеки, уведомления). Без SPF львиная доля таких писем осядет в спаме — а это прямо ломает пользовательский путь и выручку.
- Маркетинговые рассылки. Классика: письмо готовит дизайнер и маркетолог, шлёт через Unisender/Mindbox/Sendsay/Mailchimp, дизайн идеальный, оффер хороший, а open rate 3% вместо 20%. Смотришь — SPF не настроен или настроен так, что сервис-отправитель не входит в разрешённых.
- Защита бренда от фишинга. Даже если ты сам не рассылаешь массово — SPF нужен, чтобы посторонние не могли рассылать спам «от твоего имени». Строгая политика
-allбез разрешённых отправителей — сигнал всем приёмникам: «письма якобы от нас, но не с этих IP — подделка». - Соответствие требованиям Gmail/Yahoo/Mail.ru для крупных отправителей (5000+ писем в сутки). С 2024 года SPF + DKIM + DMARC — обязательный минимум, иначе автоматический бан.
- B2B-интеграции. Партнёры, которые слют документы (акты, счета, инвойсы) на твой домен, часто требуют, чтобы твой домен был правильно настроен — иначе их приёмники будут бросать твои ответы в спам, ломая деловую переписку.
Кто пользуется
По сути, все, у кого есть корпоративный домен и электронная почта. По разным оценкам, SPF-запись присутствует у 70–80% крупных доменов мира (данные из отчётов Google, Cloudflare, Valimail за последние годы — точные числа плавают). Среди топ-1000 сайтов по посещаемости SPF имеют почти 100%. У малого бизнеса — обычно только там, где кто-то из подрядчиков однажды дошёл до настройки.
Крупнейшие «сервисы, которые слют почту от чужого имени» и которых обычно приходится добавлять в свою SPF-запись:
- Google Workspace (
_spf.google.com) — стандарт для корпоративной почты. - Microsoft 365 (
spf.protection.outlook.com) — то же для Microsoft-стека. - SendGrid, Mailgun, Postmark, Amazon SES — транзакционные рассылки.
- Mailchimp, Unisender, Mindbox, Sendsay, Klaviyo — маркетинговые рассылки.
- Zendesk, Intercom, HubSpot — сервисы поддержки и CRM, которые тоже слют письма от твоего имени.
Приёмная сторона: все крупные почтовые провайдеры проверяют SPF на входе. Gmail, Outlook.com, Yahoo, ProtonMail, Mail.ru, Яндекс, iCloud — все. Разница только в том, как строго они трактуют fail: одни сразу в спам, другие спрашивают DMARC-политику.
Альтернативы и конкуренты
- DKIM (DomainKeys Identified Mail). Плюс: подпись едет с письмом, выживает при пересылке; проверяет ещё и целостность содержимого. Минус: сложнее в настройке (нужны ключи, ротация), не защищает от подмены envelope-адреса.
- DMARC (Domain-based Message Authentication, Reporting and Conformance). Плюс: описывает политику и даёт отчёты, кто и как рассылает от твоего имени. Минус: сам по себе ничего не проверяет — он надстройка над SPF и DKIM.
- ARC (Authenticated Received Chain). Плюс: сохраняет цепочку аутентификации при пересылках — решает проблему «SPF ломается при forwarding». Минус: пока не все приёмники его учитывают, распространение неравномерное.
- BIMI (Brand Indicators for Message Identification). Плюс: рядом с письмом в почте показывается логотип бренда, что повышает доверие. Минус: требует уже настроенных SPF + DKIM + DMARC + VMC-сертификата (Verified Mark Certificate — платного), не альтернатива SPF, а надстройка над всем стеком.
Строго говоря, у SPF нет прямого конкурента — DKIM и DMARC не заменяют его, а работают вместе. Единственная реальная альтернатива — вообще ничего не настраивать, но это не альтернатива, а решение «принять, что письма будут в спаме».
Когда НЕ стоит использовать
- Никогда не стоит НЕ использовать. Если у тебя есть домен и с него отправляется хоть какое-то количество писем — SPF должен быть. Даже пустая запись
v=spf1 -all(означает «с этого домена вообще никто не имеет права отправлять почту») лучше, чем отсутствие записи — она защищает бренд от фишинга. - Не ставь
+all. Технически это «разрешено использовать», но по смыслу это самострел: буквально «слать от нашего имени может любой сервер мира». Это хуже, чем не иметь записи вообще, потому что приёмник видит явное разрешение и уже не будет применять эвристики. - Не полагайся только на SPF без DKIM и DMARC для массовых рассылок. Крупные провайдеры с 2024 года требуют все три. Один SPF — это как замок только на нижнем язычке двери.
- Не превышай лимит 10 DNS-запросов. Если у тебя больше 3–4 сервисов рассылки, лучше использовать SPF flattening или отдельный поддомен для каждой категории рассылок (например,
newsletter.example.comдля маркетинга иmail.example.comдля транзакционных).
Связанные понятия
- DKIM (DomainKeys Identified Mail) — криптографическая подпись письма на стороне отправителя, публичный ключ в DNS.
- DMARC (Domain-based Message Authentication, Reporting and Conformance) — политика и отчёты поверх SPF и DKIM: что делать при провале и куда слать статистику.
- MX-запись — DNS-запись, указывающая, какие серверы принимают почту для домена (то есть куда доставлять входящие); SPF смотрит на исходящие.
- DNS TXT-запись — общий тип DNS-записи для произвольных текстовых данных; именно в ней и живёт SPF (и DKIM, и DMARC).
- SMTP (Simple Mail Transfer Protocol) — базовый протокол пересылки почты, поверх которого работает вся эта аутентификация.
- ARC (Authenticated Received Chain) — механизм, сохраняющий цепочку аутентификации при пересылках, спасающий SPF/DKIM от разрыва при forwarding.
- SRS (Sender Rewriting Scheme) — приём, когда пересылщик переписывает envelope sender, чтобы SPF-проверка проходила и на пересланных письмах.
- BIMI (Brand Indicators for Message Identification) — стандарт для показа логотипа бренда рядом с письмом при пройденных SPF/DKIM/DMARC.
Литература и источники
- RFC 7208, «Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1» (2014) — актуальная официальная спецификация, en. Ищи на
rfc-editor.orgилиdatatracker.ietf.org. - RFC 4408 (2006) — исторический интерес, первая версия. Отменена RFC 7208, но полезна для понимания эволюции.
- Wikipedia: «Sender Policy Framework» (en, ru) — хорошее обзорное чтение, ссылки на RFC и связанные стандарты.
en.wikipedia.org/wiki/Sender_Policy_Framework. - Документация Google Workspace: «Authorize email senders with SPF» — практическое руководство от одного из крупнейших приёмников. Ищи в справке Google по запросу «SPF Google Workspace».
- dmarc.org — официальный сайт консорциума DMARC, много практических материалов про весь стек SPF + DKIM + DMARC.
- Инструменты для проверки:
mxtoolbox.com/spf.aspx,dmarcian.com/spf-survey, консольная утилитаdig TXT example.comдля быстрой проверки текущей записи.
Где встретилось у меня
Вчера настраивал массовую email-рассылку через сервис-провайдера и разбирался, почему письма падают в спам Gmail. Проверил DNS-записи домена отправителя, SPF и DKIM оказались на месте, а вот DMARC отсутствовал — именно из-за этого приёмник не понимал, как трактовать письма от нового сервиса, и осторожно отправлял всё в спам.
Краткое резюме
- SPF — DNS TXT-запись, где домен перечисляет разрешённые серверы-отправители для писем от своего имени.
- Проверяется по envelope sender (MAIL FROM), а не по видимому From — это два разных поля.
- Работает вместе с DKIM и DMARC, а не вместо них: SPF отвечает за IP отправителя, DKIM — за подпись содержимого, DMARC — за политику и отчёты.
- Главные грабли: лимит 10 DNS-запросов (легко превысить с 3+ сервисами), поломка при пересылке писем, и
+all, который делает домен беззащитным. - Без правильно настроенного SPF массовые рассылки с 2024 года автоматически банят Gmail, Yahoo и Mail.ru — это уже не «желательно», а обязательный минимум для любого домена, с которого шлют почту.