SPF (Sender Policy Framework) — дает возможность добавить
DNS записи типа TXT к
доменному имени и указать в них
IP адреса серверов, с которых разрешена отправка электронной почты. Это необходимо для защиты репутации домена и снижения вероятности попадания писем в спам. Дело в том, что при отправке письма, можно подставить абсолютно любой адрес отправителя в поле
"From:", чем и пользуются злоумышленники при рассылке спама и фишинга от чужого имени. Такие рассылки могут значительно навредить репутации вашего домена, и создать проблемы с доставкой электронной почты с вашего домена. А вот IP адреса почтового сервера, с которого была произведена отправка, подделать нельзя. Соответственно если SPF запись для домена есть, то почтовые службы сначала проверят с того ли IP адреса идет рассылка и если не с того, то будут действовать согласно правилам указанным в SPF.
Как создать SPF запись
Как уже писалось выше, SPF это обычная текстовая запись, но данные указываются с использованием определенного синтаксиса, который мы сейчас и рассмотрим.
Пример SPF записи:
"v=spf1 +a +mx -all". Означает эта запись следующее — принимать почту с IP адресов, которые указаны в
DNS записях типа A и MX для этого же домена (имеется ввиду домен, для которого это запись указана), со всех остальных почту отклонить. Можно ее немного укоротить и написать так:
"v=spf1 a mx -all", результат работы будет тот же. Рассмотрим синтаксис более детально.
- "v=spf1" — используемая версия SPF. На текущий момент она одна, первая версия.
- "+" — принимать почту. Этот параметр установлен по умолчанию, его отсутствие означает то же самое, что и его наличие.
- "-" — отклонять почту.
- "~" — принимать почту, но помещать ее в спам.
- "?" — относится нейтрально. То есть, принимать как обычное письмо.
- "mx" — содержит IP адреса всех серверов, указанных в DNS записях типа MX для домена.
- "ip4" — позволяет указать конкретные IPv4 адреса.
- "ip6" — то же, что и "Ip4", только указывается IPv6 адрес.
- "a" — указывает на IP адреса, которые указаны в DNS записях типа A для домена.
- "include" — разрешает получение почты, согласно SPF другого домена.
- "all" — все остальные, не перечисленные в SPF записи.
Рассмотрим сложный пример SPF записи
"v=spf1 mx a ip4:154.56.125.94 a:some-domain.com mx:some-domain.com include:some-domain.com ~all"
mx — принимать почту со своих почтовых серверов.
a — принимать почту с серверов, которые указаны в записях типа A для своего домена.
ip4:154.56.125.94 — принимать почту отправленную с IP 154.56.125.94. Также можно указывать подсети в формате 154.56.125.0/24.
a:some-domain.com — принимать почту с серверов, которые указаны в записях типа A для домена some-domain.com. Здесь также есть возможность указать подсеть в формате some-domain.com/24.
mx:some-domain.com — принимать почту с почтовых серверов, указанных в записях типа MX для домена some-domain.com. Возможно указание подсети аналогично с a:some-domain.com.
include:some-domain.com — разрешает получать почту согласно правилам, указанным в SPF для домена some-domain.com.
~all — помещать в спам все письма, отправленные с адресов, не указанных в SPF. Если указать -all, почта будет отклонятся.
Это наиболее часто используемые конструкции для создания SPF, но есть и другие, редко используемые, но о которых стоит знать.
- "ptr" — проверяется PTR запись IP адреса отправителя на совпадение с указанным доменом.
"v=spf1 ptr:your-domain.com -all"
- "exists" — проверяется резолвится ли домен по какому либо IP адресу, причем IP адрес может быть абсолютно любой.
"v=spf1 exists:your-domain.com -all"
- "redirect" — говорит о том, что правила в SPF записи необходимо проверять на другом домене, а не на текущем.
"v=spf1 redirect:some-domain.com -all"
- "exp" — позволяет указать текст, который будет отправляеться отправителю письма в случае не соответствия правил, указанных в SPF. Указывается самым последним.
"v=spf1 a mx -all exp=spferror.your-domain.com"
Небольшое пояснение, для того, что бы отдавался текст ошибки, необходимо создать домен spferror.your-domain.com и добавить для него TXT запись с желаемым текстом.