Sender Policy Framework, SPF (инфраструктура политики отправителя) — расширение для протокола отправки электронной почты через SMTP. SPF определен в RFC 7208.

Благодаря SPF можно проверить, не подделан ли домен отправителя.

SPF позволяет владельцу домена, в TXT-записи, соответствующей имени домена, указать список серверов, имеющих право отправлять email-сообщения с обратными адресами в этом домене.

Агенты передачи почты, получающие почтовые сообщения, могут запрашивать SPF-информацию с помощью простого DNS-запроса, верифицируя таким образом сервер отправителя.

Пример SPF-данных в TXT-записи DNS:

example.org. IN TXT "v=spf1 a mx -all"

v= определяет используемую версию SPF. Далее следует перечисление механизмов верификации: в данном случае «a» разрешает прием писем от узла, IP-адрес которого совпадает с IP-адресом в A-записи для example.org; «mx» разрешает прием писем, если отправляющий узел указан в одной из MX-записей для example.org. Строка завершается «-all» — указанием того, что сообщения, не прошедшие верификацию с использованием перечисленных механизмов, следует отвергать. Также может использоваться «~all» — в этом случае письмо, не прошедшее верификацию, не должно быть отклонено, но может быть изучено более тщательно (SoftFail).

Распространённость

Программное обеспечение для фильтрации спама SpamAssassin версии 3.0.0 и ASSP (англ.) обеспечивают поддержку SPF. Многие агенты передачи почты (MTA) имеют встроенную поддержку SPF (CommuniGate Pro, Wildcat, Exim, Microsoft Exchange Server). Для других MTA существуют патчи или расширения, обеспечивающие реализацию SPF (Postfix, Sendmail, qmail).

В настоящий момент большинство известных сервисов интернета (Amazon, AOL, EBay, Google, Hotmail, Microsoft, W3C) и рунета (Mail.ru, Яндекс, Rambler, Pochta.ru) предоставляют SPF информацию о своих доменах.

Теперь более детально о допустимых опциях. Рассмотрим варианты поведения получателя, в зависимости от используемых опций:

  • «v=spf1» — используемая версия SPF.
  • «+» — принимать корреспонденцию (Pass). Этот параметр установлен по умолчанию. То есть, если никаких параметров не установлено, то это «Pass»;
  • «-» — Отклонить (Fail);
  • «~» — «мягкое» отклонение (SoftFail). Письмо будет принято, но будет помечено как СПАМ;
  • «?» — нейтральное отношение;
  • «mx» — включает в себя все адреса серверов, указанные в MX-записях домена;
  • «ip4» — опция позволяет указать конкретный IP-адрес или сеть адресов;
  • «a» — указываем поведение в случае получения письма от конкретного домена;
  • «include» — включает в себя хосты, разрешенные SPF-записью указанного домена;
  • «all» — все остальные сервера, не перечисленные в SPF-записи.
example.org. IN TXT "v=spf1 +a +mx -all"

Итак, попробуем разобраться, что же значит SPF-запись, указанная выше.

  • «+a» — разрешает прием писем от узла, IP-адрес которого совпадает с IP-адресом в A-записи для example.org;
  • «+mx» —  разрешает прием писем, если отправляющий хост указан в одной из MX-записей для example.org;
  • «-all» — все сообщения, не прошедшие верификацию с использованием перечисленных механизмов, следует отвергать.

Для лучшего понимания того, как работает SPF, рассмотрим еще один, более сложный пример.

example.org. IN TXT "v=spf1 mx ip4:195.3.159.250 +a:smtp.mail.ru include:gmail.com ~all"

Теперь более подробно о используемых опциях:

  • «mx» — принимать письма от серверов, указанных в MX-записях;
  • «ip4:195.3.159.250» — принимать письма, отправленные с IP-адреса 195.3.159.250;
  • «+a:smtp.mail.ru» — то же, что и a:smtp.mail.ru. Принимать от smtp.mail.ru;
  • «include:gmail.com» — принимать письма с серверов, разрешенных SPF-записями gmail.com;
  • «~all» — принимать письма со всех остальных серверов, но помечать их как СПАМ

А теперь рассмотрим еще более «экзотичный» пример. В описании возможных опций указывалось, что возможно указание сетей ip-адресов. Стоит отметить, что это применимо и к записям «a» и «mx». Рассмотрим следующий пример.

example.org. IN TXT "v=spf1 mx/24 a:muff.kiev.ua/24 -all"
  • «mx/24» — в список разрешенных отправителей входят все IP-адреса, находящихся в тех же сетях класса С, что и MX-ы домена;
  • «a:muff.kiev.ua/24» — в список разрешенных отправителей входят все IP-адреса, находящихся в тех же сетях класса С, что и А-записи домена muff.kiev.ua;
  • «-all» — всех остальных отправителей — блокируем.

Иногда можно встретить следующие записи (очень редко):

  • «ptr» — проверяет PTR-запись IP-адреса отправителя. Если она сходится с указанным доменом, то механизм проверки выдает положительный результат. То есть, разрешено отправлять всем IP-адресам, PTR-запись которых направлены на указанный домен. Серьезным недостатком данного метода есть то, что генерируется очень большое количество DNS-запросов;
  • «exists» — выполняется проверка, резолвится ли домен на какой-либо IP-адрес. То есть, по существу, выполняется проверка работоспособности доменного имени. Кстати, не имеет значения, на какой IP-адрес резолвится домен, даже если это «серые» сети (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) или loopback (127.0.0.1).

Пример использования:

example.org. IN TXT «v=spf1 ptr:example.org exist:example.org -all»

Также не будет излишним ознакомиться со следующими опциями: redirect и exp.

«redirect» — указывает получателю, что нужно проверять SPF-запись указаного домена, вместо текущего домена. Пример:

example.org. IN TXT «v=spf1 redirect:example.com ~all»

В данном примере будет проводится проверка SPF-записи домена example.com, а не example.org.

«exp» — использование данной опции позволяет задать сообщение о ошибке, которое будет передано отправителю при возникновении таковой. Размещается в конце SPF-записи, даже после опции all. Рассмотрим более детально механизм работы опции exp.

Допустим, что у домена example.org следующая SPF-запись:

example.org. IN TXT "v=spf1 +a +mx -all exp=spf.example.org"

Теперь создаем TXT-запись для домена spf.example.org:

spf.example.org. IN TXT "You host not allowed e-mail to me"
Теги: