Кратко о Sender Policy Framework (SPF)

SPF является одним из инструментов для борьбы со спамом и поддельными письмами. Он позволяет получателю проверить - имеет ли право приславший почту хост отправлять почту от имени данного домена.
Выражение SPF хранится в обычной TXT записи доменной зоны и имеет следующий вид:

"ver=spf1 <механизмы>"

Результаты выражения

РезультатОписаниеОжидаемое действие
PassОтправитель имеет право отправлять почтупринять
FailОтправитель не имеет прав на отправку почтыотклонить
SoftFailОтправитель не имеет прав на отправку почты, но принять, но пометить
NeutralВыражение не может составить мнение об отправителепринять
NoneДомен не содержит SPF запись, или она не выдала никакого результатапринять
PermErrorПерманентная ошибка (например неверный синтаксис SPF записи)неопредлено
TempErrorВременная ошибкапринять или отклонить

Префиксы

+ - Разрешено
- - Запрещено
~ - SoftFail (запрещено, но письмо будет принято), может использоваться для анти-спама
? - Нейтральный результат, данная spf запись не может дать свое мнение о конкретном хосте

Механизмы

all

Всегда совпадает с запросом, обычно располагается в конце правила.

ip4:<ip4-network>
ip4:<ip4-network>/<prefix-length>

Указание конкретного адреса хоста или подсети.

a
a/<prefix-length>
a:<domain>
a:<domain>/<prefix-length>

Проверяет все A записи на точное совпадение IP отправителя, если не указан <prefix-length>. При указании префикса поиск будет происходит по всей подсети полученных адресов. Если указан параметр <domain>, то поиск будет производится по указанному домену, нежели по домену отправителя.

mx
mx/<prefix-length>
mx:<domain>
mx:<domain>/<prefix-length>

Та же логика и для mx записей, только они проверяются по приоритету который им назначен в зоне DNS. Проверяется только MX запись с наименьшим весом, остальные MX записи не проверяются.

ptr
ptr:<domain>

Сначала идет поиск PTR записи отправителя, затем происходит валидация по A записи: хотя бы одна из A записей указанных в PTR разрешается в IP адрес отправителя, то выражение возвращает Pass.

exists:<domain>

Проверка на существование домена. Если домен существует, то результат будет положительным независимо от того, в какой адрес он разрешился.

include:<domain>

Выдает результат проверки SPF располагающейся на другом домене. Если эта запись не вернет совпадения или ошибки, то обработка перейдет к следующему механизму в текущей SPF записи. Внимание! Если на указанном домене не существует SPF запись, то выражение вернет PermError.

Примеры

"ver=spf1 mx -all"

Запретить отправлять почту всем кроме хостов указанных в MX записях.

"ver=spf1 a mx -all"

Запретить отправлять почту всем кроме хостов указанных в А и MX записях.

"ver=spf1 -mx ~all"

Хостам указанным в MX записях не разрешено отправлять почту. Всем остальным хостам тоже не разрешено, тем не менее почта будет обработана.

"ver=spf1 include:spf.example.com ~all"

Сначала будет интерпретирована запись на домене spf.example.com, если она не вернет определенного значения, то применится механизм ~all, который говорит, что почту можно пропустить, но сделать отметку.

"ver=spf1 mx/24 -all"

Допустим mx.example.com с адресом 192.168.10.10 отправляет письмо. Данная SPF запись говорит получателю проверить диапазон сети 192.168.10.10/24 на наличие IP адреса отправителя, т.к. mx.example.com может принимать почту на одном IP адресе, а отправлять с разных.

По мотивам данного материала

Ваш комментарий. Вики-синтаксис разрешён:
O X M​ C᠎ G