SPF — Sender Policy Framework — запись, которая указывает, с каких адресов (доменов и/или IP) следует ожидать почту, и как интерпретировать ошибку в случае несоответствия. По сути, это всего лишь рекомендация отправителя по проверке, но сейчас все почтовые системы обязывают отправителя иметь данную запись в DNS и, скорее всего, письма без SPF и/или выдающие ошибку проверки при приеме почтой либо отвергаются почтовым сервисом, либо помещаются в папку спам, либо будут иметь предупреждение для получателя о возможной угрозе нежелательности данного письма.
Стандарт описывает, как принимающая сторона должна обрабатывать результат, но по некоторым причинам принимающая сторона фактически может: полностью соблюсти описанные правила, интерпретировать по-своему или же вообще проигнорировать рекомендации.
Технические детали
Для размещения данных используется поле TXT в DNS.
Так IANA (функция управления пространствами IP-адресов, доменов верхнего уровня, а также регистрирующая типы данных MIME и параметры прочих протоколов Интернета. Исполняется компанией Public Technical Identifiers, которая находится под контролем ICANN) назначила DNS поле с кодом 99 для SPF.
Формат SPF поля идентичен TXT.
Некоторые системные администраторы прописывают SPF-запись как поле типа SPF и, в принципе, это правильно, но не всякий DNS сервер и клиент понимает такой тип записи. Поэтому совместное использование TXT и SPF считается хорошим подходом, обеспечивающим совместимость и будущее развитие. Но лучше, если запись будет в формате ТХТ, а когда почтовые сервисы перейдут на новый тип записи — я уверен — они оповестят всех заблаговременно.
Стандарт рекомендует доменам, удовлетворяющим требованиям SPF, иметь записи обоих типов. Вместе с тем, как минимум одна запись должна присутствовать обязательно. В случае наличия двух записей они должны быть идентичны.
Например:
example.com. IN TXT «v=spf1 +mx a:colo.example.com/28 -all» example.com. IN SPF «v=spf1 +mx a:colo.example.com/28 -all» Если установлена запись SPF, то TXT записи должны быть проигнорированы.
Механизм взаимодействия
Почтовый обмен с использованием SPF происходит по следующему алгоритму:
- Почтовый сервер mx.example.com отправляет письмо на адрес user@example.net.
В DNS записи example.com содержатся такие строки:
mx.example.com. IN A 208.77.188.166 example.com. IN MX 10 mx.example.com. example.com. IN TXT «v=spf1 +mx -all» - mx.example.com устанавливает соединение с SMTP example.net и получает от него, например:
>> 220 example.net ESMTP Service (Mailer v1.0) ready at 30.07.2009 12:28:21 UTC - затем mx.example.com представляется через HELO/EHLO:
<< HELO mx.example.com - В зависимости от настроек принимающей стороны после данного представления уже может быть проверка на соответствие представленного имени правилам SPF, но в данном месте это необязательно:
>> 250 example.net Hello mx.example.com., pleased to meet you << MAIL From:<user@example.com> - После выдачи отправителем "MAIL FROM" должна последовать обязательная проверка, интерпретация результата и реакция на него.
- В данный момент модуль, отвечающий за проверку SPF, делает следующие вещи:
Осуществляет запрос к DNS; Запрашивают SPF и TXT поля; Если в полученном ответе присутствует правило SPF, то оно разбирается и происходит анализ на соответствие. В нашем примере это правило «v=spf1 +mx -all». - Согласно правилам проверяются MX-записи и проводится сверка указанных в записях IP-адресов, полученных из представления DNS-имени и IP-адреса подключившегося отправителя.
В данном случае все совпадает, управление возвращается почтовому серверу, и он начинает прием сообщения.
Если фактический IP подключившегося отправителя был иным, то анализатор сообщил бы почтовому серверу, что входящее сообщение невалидно, и, вероятно, его не стоит принимать или на крайний случай отмаркировать отдельно (например, «Спам»).
Формат записи
Запись SPF выглядит примерно так:
example.com. IN SPF «v=spf1 +mx a:colo.example.com/28 -all» Эта запись содержит следующую информацию:
- Версия «SPF1» (кстати, пока единственная используемая);
- Письмо может иметь отправителя с IP-адресом, соответствующим записям в MX для домена example.com;
- Письмо может иметь отправителя с IP-адресом, соответствующим одному из адресов в подсети colo.example.com/28;
- Во всех остальных случаях, когда адрес не соответствует перечисленным условиям, считать отправителя недостоверным.
Вообще, в условии есть 2 части — определитель и механизм.
Определители могут быть: «+» (Pass), «-» (Fail), «~» (SoftFail), «?» (Neutral);
Механизмы: «all», «include», «A», «MX», «PTR», «IP4», «IP6», «exists».
Результатами проверки условий могут являться следующие определенные результаты:
- None — означает, что-либо в домене нет записей, либо вообще не удается проверить домен;
- Neutral — возникает в ситуации, когда хозяин домена не хочет или не может сообщить, разрешен ли IP. Этот результат должен обрабатываться так же, как и «None»;
- Pass — означает, что все ОК, и получатель может принять письмо;
- Fail — явно указывает на то, что письмо принимать не следует;
- SoftFail — находится где-то между «Fail» и «Neutral». Принимающая сторона не должна отбрасывать письмо на основании только этого результата;
- TempError — результат, возникающий, если клиент в момент проверки получает временную ошибку. Сообщение можно принять или временно отвергнуть;
- PermError — ошибка, возникающая при невозможности корректной интерпретации DNS записей отправителя.
Проблема пересылки Достаточно часто подписчики могут переслать из своего почтового клиента ваше письмо другому получателю, в этом случае SPF не пройдет проверку и письмо придет с ошибкой в RFC-заголовках (например, «SoftFail»).
В дополнение к SPF некоторые почтовые серверы поддерживают SRS (Sender Rewriting Scheme — схема перезаписи отправителя) — механизм перезаписи адреса отправителя перенаправляемых сообщений так, чтобы они могли пройти проверку SPF. SRS помогает обеспечить доставку сообщений при использовании SPF, чтобы запись была валидной (прошла проверку легитимности).
Технология спорная. Публичные почтовые системы официально ее не поддерживают.