SPF запись может быть только одна для одного домена. В рамках одной SPF может быть несколько записей. Для поддоменов нужны свои записи.
SPF-запись выглядит примерно следующим образом:
v=spf1 ip4:75.123.48.0/24 ip4:77.137.178.0/22 ip4:ip_вашего_сервера/32 ~all
Такая запись означает, что письма с данного домена могут отправляться из подсетей 75.123.48.0/24 и 77.137.178.0/24, а письма, пришедшие с других серверов (all), должны проходить дополнительную проверку (~).
Основной синтаксис
Любая SPF-запись начинается с v=spf1, этот параметр не изменяется. Он указывает на версию записи, и в настоящее время поддерживается только spf1.
Далее указываются параметры (механизмы). Чаще всего используются следующие: all, ip4, ip6, a, mx, include, redirect. Также существуют, но используются значительно реже: ptr, exists, exp. Они все будут рассмотрены ниже.
Помимо механизмов используются префиксы (определители):
«+» — Pass, принимать почту. Прописывать этот параметр необязательно, он установлен по умолчанию (т.е. значения «+a +mx» и «a mx» — идентичны).
«-» — Fail, отклонять почту.
«~» — SoftFail, «мягко» отклонять (принимать почту, но помещать ее в «Спам»).
«?» — нейтрально (обрабатывать как обычное письмо).
Параметр «all» подразумевает все серверы, не упомянутые отдельно в SPF-записи. «all» задает обработку полученных с них писем и указывается в конце записи.
Например:
v=spf1 ip4:176.57.223.0/24 ~all
— принимать почту только из подсети 176.57.223.0/24; письма с других адресов должны быть помечены как спам.
v=spf1 a -all
— принимать почту только с A-записи домена; письма с других адресов должны отвергаться.
v=spf1 -all
— отвергать все письма с домена. Такую настройку можно использовать для доменов, с которых не должна отправляться вообще никакая почта.
В последующих примерах мы не будем дополнительно комментировать значения параметров ~all и -all в SPF-записях.
ip4 / ip6 — Используется для указания конкретных адресов и подсетей, из которых могут отправляться письма. Синтаксис для IPv4 и IPv6 идентичен.
v=spf1 ip4:75.123.48.0/24 ~all
— принимать почту из подсети 75.123.48.0/24.
v=spf1 ip6:2002::4b7b:300b ~all
— принимать почту с IPv6-адреса 2002::4b7b:300b.
a — IP отправителя проверяется на соответствие A-записи домена.
v=spf1 a ~all
— принимать почту с A-записи текущего домена.
v=spf1 a:sub.domain.com ~all
— принимать почту с A-записи домена sub.domain.com.
mx — IP отправителя проверяется на соответствие IP-адресам серверов, указанных в MX-записях домена. На текущий день для многих современных сервисов эта директива уже не так важна, так как серверы входящей и исходящей почты зачастую имеют разные IP.
v=spf1 mx mx:sub.domain.com -all
— принимать почту с MX-серверов текущего домена и домена sub.domain.com.
v=spf1 mx/24 -all
— принимать почту из подсети, в которую входят MX-серверы текущего домена.
include — позволяет учитывать в SPF-записи настройки SPF другого домена.
v=spf1 a include:other-domain.com -all
— принимать почту с A-записи текущего домена и серверов, указанных в SPF-записи домена other-domain.com.
При такой настройке проверяется SPF домена other-domain.com; если это, допустим, «v=spf1 a -all», то далее IP отправителя проверяется на соответствие A-записи домена other-domain.com.
redirect — технически, redirect является модификатором, а не механизмом. Он выполняет одну основную функцию: сообщает, что необходимо применять настройки SPF другого домена.
v=spf1 redirect=other-domain.com
— почта должна приниматься или отклоняться согласно настройкам домена other-domain.com.
Прочие механизмы
Здесь мы рассмотрим оставшиеся механизмы, которые используются в настройках значительно реже.
ptr — PTR-запись IP-адреса отправителя проверяется на соответствие указанному домену. Данный механизм требует большого количества DNS-запросов при проверке, поэтому без острой необходимости использовать его в SPF не рекомендуется.
v=spf1 ptr:other-domain.com -all
— принимать почту со всех адресов, PTR-запись которых направлена на домен other-domain.com
exists — запрашивается А-запись указанного домена; если она существует, проверка считается пройденной. Другими словами, проверяется, резолвится ли домен на какой-либо (любой) IP-адрес.
v=spf1 exists:mydomain.com -all
— принимать почту, если существует A-запись домена mydomain.com.
exp — Параметр «exp» применяется для отправки сообщения об ошибке отправителю письма. С помощью «exp» в SPF прописывается определенный поддомен, в TXT-записи которого указан текст сообщения об ошибке. Имя поддомена и текст ошибки может быть любым.
Параметр «exp» всегда указывается в конце записи (после all).
v=spf1 mx -all exp=error-spf.mydomain.com
При этом TXT-запись домена error-spf.mydomain.com содержит: «Not authorized to send mail for this domain».
Примеры настроек
Настройка SPF для «Почты для доменов» от Mail.Ru
Если вы отправляете почту только с серверов Mail.Ru:
v=spf1 redirect=_spf.mail.ru
Если вы отправляете почту так же и с других серверов (укажите IP-адреса или подсети вместо IP1, IP2 и т.д.):
v=spf1 ip4:IP1 ip4:IP2 ip4:IP3 include:_spf.mail.ru ~all
Настройка SPF для Яндекс.Почты
При использовании только серверов Яндекса:
v=spf1 redirect=_spf.yandex.net
При использовании также и других серверов (укажите IP-адреса или подсети вместо IP1, IP2 и т.д.):
v=spf1 ip4:IP1 ip4:IP2 ip4:IP3 include:_spf.yandex.net ~all
Настройка SPF для Google
При использовании только серверов Google:
v=spf1 include:_spf.google.com ~all
При использовании также и других серверов (укажите IP-адреса или подсети вместо IP1, IP2 и т.д.):
v=spf1 ip4:IP1 ip4:IP2 include:_spf.google.com ~all
Другие примеры
v=spf1 a ip4:75.123.48.11 include:extdomain.com -all
— принимать почту с IP-адресов, соответсвующих A-записям текущего домена, с IP-адреса 75.123.48.11 и серверов, указанных в SPF-записи extdomain.com; прочие письма отклонять.
v=spf1 mx/24 a:extdomain.com/24 ~all
— принимать почту из подсети, в которую входят MX-серверы текущего домена, и из подсети, в которую входят A-записи домена extdomain.com; прочие письма отклонять.
v=spf1 a ip4:75.123.48.11 include:extdomain.com -all
— принимать почту с A-записи текущего домена, IP-адреса 75.123.48.11, а также с серверов, указанных в SPF домена extdomain.com.
N.B!: Настройка SPF необходима для установки политики DMARC (Domain-based Message Authentication, Reporting and Conformance — идентификация сообщений, создание отчётов и определение соответствия по доменному имени). Т.е. DMARC — это подпись, которая позволяет принимающему серверу решить, что делать с письмом. DMARC использует DKIM и SPF.