Определение простыми словами
SPF (RFC 7208) — список разрешённых отправителей домена. Когда чужой почтовый сервер получает письмо с адресом @example.com, он запрашивает у DNS зону example.com, читает строку начинающуюся с v=spf1 и решает: совпадает ли IP подключающегося сервера со списком. Если нет — письмо помечается как spam или отклоняется.
SPF работает в связке с DKIM и DMARC. Только три механизма вместе закрывают спуфинг. SPF в одиночку защищает Envelope From, а не видимое поле From, поэтому DMARC обязателен для брендовой почты.
Сравнение SPF, DKIM и DMARC
| Параметр | SPF | DKIM | DMARC |
|---|---|---|---|
| Что проверяет | IP отправителя | Подпись тела письма | Согласованность SPF/DKIM с From |
| Хранение | TXT-запись | TXT с публичным ключом | TXT с политикой |
| Защищает | Return-Path | Целостность письма | Видимый From |
| Что делать при провале | Указывается ~all/-all | Игнор или fail | none/quarantine/reject |
Кейсы использования
- Корпоративный домен с рассылками через Mailgun, Unisender и собственный сервер — все источники включены в одну запись.
- Магазин на Bitrix отправляет уведомления через SMTP хостера — IP хостера попадает в include.
- Холодные рассылки маркетинга с отдельного поддомена, чтобы репутация основного не страдала.
- Негатив: больше 10 DNS-запросов в SPF — провал по «permerror». Цепочки include от SaaS быстро упираются в лимит.
- Негатив: SPF не защищает от подделки видимого From — без DMARC бренд всё ещё уязвим.
Технические детали
# Проверить текущую SPF домена
dig +short TXT example.com | grep spf1
# Подсчитать DNS lookups (лимит 10)
spfquery --scope mfrom --identity user@example.com --ip-address 1.2.3.4
# Пример валидной записи для домена с Google Workspace и Mailgun
v=spf1 include:_spf.google.com include:mailgun.org ip4:203.0.113.10 ~all
# Жёсткая политика: всё, что не из списка, отклонять
v=spf1 mx ip4:203.0.113.0/24 -all
Механизм ~all даёт softfail (письмо доходит, но помечается), -all — hardfail с отбрасыванием. Для production-доменов с настроенным DMARC ставят -all, для тестовых — ~all.
🔥 Где это применяется
Частые вопросы
Сколько SPF-записей разрешено в одной зоне?
Только одна. Если их несколько, проверяющие серверы возвращают permerror и письма отклоняются. Все механизмы объединяются в одну строку.
Что делать, если упёрлись в 10 DNS lookups?
Используйте SPF-flattening: сторонние сервисы (DMARCLY, EasyDMARC) разворачивают include в IP-блоки и автоматически обновляют запись.
Поможет ли SPF от фишинга бренда?
Только частично. Подделать видимое поле From SPF не мешает — нужен DMARC с политикой quarantine или reject.