Коротко
SPF (Sender Policy Framework) — это список серверов, которым разрешено отправлять почту от имени вашего домена. Список публикуется как TXT-запись в DNS, а принимающий сервер при доставке сверяется с ним: «письмо пришло с этого адреса — он здесь есть?»
Как выглядит запись
v=spf1 include:_spf.google.com include:spf.protection.outlook.com ~all
Читается слева направо:
v=spf1— версия, с которой начинается любая запись SPF.include:— «серверы этого сервиса тоже мои». Самый распространённый механизм: сервисы сами поддерживают свои списки адресов.ip4:/ip6:— конкретный адрес или подсеть, если вы отправляете почту со своего сервера.~allили-all— что делать со всем, что в список не попало.
Последний элемент важен:
| Квалификатор | Значение | Когда использовать |
|---|---|---|
~all |
Softfail — «скорее всего чужое, но пропустите» | Пока вы не уверены, что перечислили всех отправителей |
-all |
Fail — «чужое, отклоняйте» | Когда список полон и проверен |
+all |
Разрешить всем | Никогда. Это отменяет смысл SPF |
Два правила, на которых спотыкаются чаще всего
Одна запись на домен. Две отдельные записи v=spf1 — гарантированный сбой проверки, независимо от их содержимого. Новый сервис добавляется ещё одним include: в существующую запись, а не отдельной строкой в DNS.
Не больше 10 DNS-запросов. Каждый include:, a, mx и redirect тратит как минимум один запрос, а вложенные include: тратят свои. Почта плюс CRM плюс хелпдеск плюс сервис рассылок — и лимит исчерпан. При превышении проверка возвращает permerror, и SPF перестаёт работать полностью: даже перечисленные явно серверы больше не считаются разрешёнными.
Посчитать запросы и собрать корректную запись поможет генератор SPF.
Чего SPF не умеет
Три ограничения, из-за которых SPF сам по себе не защищает домен:
SPF проверяет технический адрес, а не тот, который видит человек. Проверяется домен из обратного пути (
Return-Path), а в почтовом клиенте видно полеFrom:. Это разные вещи, и у злоумышленника может быть безупречный SPF по собственному домену при вашем домене вFrom:. Закрывает этот разрыв только согласование DMARC.SPF ломается при пересылке. Если получатель настроил пересылку, письмо отправляет уже сервер-посредник — его адреса в вашем списке нет, и проверка проваливается. Это нормальное поведение протокола. Именно поэтому в паре с SPF нужен DKIM, подпись которого пересылку переживает.
SPF ничего не говорит о том, что делать с письмом. Он лишь возвращает результат. Инструкцию для принимающего сервера задаёт DMARC.
Порядок действий
- Составьте список всех сервисов, которые отправляют почту от вашего имени.
- Соберите из них одну запись SPF, удерживаясь в пределах десяти запросов.
- Пока не уверены в полноте списка, оставьте
~all. - Когда отчёты DMARC подтвердят, что легитимных источников вне списка нет, переходите на
-all.
Посмотреть текущую запись SPF своего домена можно бесплатной проверкой.