Sender Policy Framework, SPF (инфраструктура политики отправителя[1]) — расширение для протокола отправки электронной почты через SMTP. SPF определен в RFC 7208.
Благодаря SPF можно проверить, не подделан ли домен отправителя.
SPF позволяет владельцу домена указать в доменной зоне запись типа TXT[К. 1], соответствующей имени домена, список серверов, имеющих право отправлять email-сообщения с обратными адресами в этом домене.
Агенты передачи почты, получающие почтовые сообщения, могут запрашивать SPF-информацию с помощью простого DNS-запроса, верифицируя таким образом сервер отправителя.
Пример SPF-данных в TXT-записи DNS:
example.org. IN TXT "v=spf1 +a +mx -all"
Символ "+" является квалификатором по умолчанию и может быть опущен. Следующий пример аналогичен предыдущему:
example.org. IN TXT "v=spf1 a mx -all"
v= определяет используемую версию SPF. Далее следует перечисление механизмов верификации: в данном случае a разрешает прием писем от узла, IP-адрес которого совпадает с IP-адресом в A-записи для example.org; mx разрешает приём писем, если отправляющий узел указан в одной из MX-записей для example.org. Строка завершается -all — указанием того, что сообщения, не прошедшие верификацию с использованием перечисленных механизмов, следует отвергать. Также может использоваться ~all — в этом случае письмо, не прошедшее верификацию, не должно быть отклонено, но может быть изучено более тщательно (SoftFail).
Следует заметить, что RFC 7208 определяет различные результаты проверки, в том числе "Permerror" в случае некорректной SPF-записи. Одним из случаев некорректной записи является наличие более чем одной записи v=spf1 (3.2. Multiple DNS Records). Следует быть внимательным при формировании записи и сверяться с документом RFC 7208. В Сети можно найти онлайн-сервисы для проверки SPF-записи.
Формат
Запись TXT для SPF начинается с параметра v, значением которого является версия стандарта SPF: v=spf1[2].
Следом через пробел перечислены команды разрешения отправителей и политики приёма-отказа для писем от неуказанных отправителей[2]:
mx – обозначает серверы почты, перечисленные в записях типа «MX» для доменной зоны;
a – обозначает сервер с именем, совпадающим с именем доменной зоны (например, для доменной зоны example.net это будет сервер example.net);
a:доменное имя – указывает сервер или подсеть по доменному имени узла с возможным указанием маски подсети в формате CIDR;
ip4:адрес/маска – указывает адрес IPv4 сервера или подсеть IPv4 (маска подсети указывается в формате CIDR);
ip6:адрес/маска – указывает адрес IPv6 сервера или подсеть IPv6 (маска подсети указывается в формате CIDR);
all – обозначает все прочие узлы-отправители, используется для описания политики приёма электронной почты от прочих отправителей.
В формате записи spf предусмотрены модификаторы:
redirect – используется для указания на другую запись SPF, где описаны собственно правила обработки политики;
exp – (англ.explanation), используется при отказе по другим правилам в записи SFP;
include – дополняет описанные с текущей записи правила правилами из другой записи (например, из записи оператора электронной почты на хостинге);
В командах и модификаторах предусмотрены макросы, каждый макрос состоит из знака % и буквы:
s – адрес email отправителя;
l – локальная часть адреса email отправителя;
o – доменная часть адреса email отправителя;
d – домен;
i – адрес IP
p – (не рекомендуется к использованию) доменное имя отправителя после проверки (англ.validated)
v – строка in-addr в случае адреса IPv4 и строка ip6 в случае адреса IPv6;
h – доменное имя, указанное отправителем в команде HELO или EHLO;
c – (допускается только в команде exp) адрес IP клиента SMTP (сервера, подключившегося к нашему);
r – (допускается только в команде exp) доменное имя хоста (сервера), проводящего проверку;
t – (допускается только в команде exp) текущее время.
Пример записи
@ IN TXT "v=spf1 a:authorized-spf.example.com mx -all"