Коротко. Спецификация SPF (RFC 7208) разрешает не более 10 DNS-запросов при вычислении записи. Механизмы include, a, mx, ptr и exists каждый расходуют лимит, а вложенные include — рекурсивно. Превышение даёт результат permerror, и SPF перестаёт проходить. Исправляют сокращением include, заменой на ip4 (флаттенинг) и удалением неиспользуемых сервисов.
Почему есть лимит в 10 запросов
Лимит защищает почтовые серверы от чрезмерной нагрузки и DoS-атак через бесконечно вложенные SPF-записи. Каждый DNS-запрос при проверке стоит времени, поэтому RFC жёстко ограничивает их число десятью.
Что расходует лимит
- include — каждый плюс все запросы внутри подключённой записи.
- a и mx — по одному запросу (mx ещё разрешает каждое имя).
- ptr — расходует лимит и не рекомендуется к использованию.
- exists — один запрос.
- ip4 / ip6 и all — НЕ расходуют лимит (это статичные данные).
Как посчитать запросы
# Исходная запись с перебором лимита:
dig +short txt example.com
# "v=spf1 include:_spf.google.com include:sendgrid.net include:mailgun.org
# include:_spf.mailjet.com include:amazonses.com mx a ~all"
# Каждый include раскрывается рекурсивно:
dig +short txt _spf.google.com
# "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com
# include:_netblocks3.google.com ~all"
Способы исправить
- Уберите лишние сервисы. Каждый бывший рассыльщик в SPF — это потраченные запросы.
- Замените include на ip4 (флаттенинг). Подставьте реальные подсети сервиса напрямую;
ip4не считается в лимит. - Не используйте ptr — медленный и расходует лимит.
- Используйте поддомены для разных потоков рассылки, разнося нагрузку.
- Авто-флаттенинг у SPF-провайдеров — динамически держит запись в пределах лимита.
| Механизм | Считается в лимит? | Совет |
|---|---|---|
| include | Да (рекурсивно) | Минимизируйте число |
| a / mx | Да | Заменяйте на ip4 при возможности |
| ptr | Да | Не используйте |
| ip4 / ip6 | Нет | Предпочтительный способ флаттенинга |
| all | Нет | Всегда завершайте запись |
Флаттенинг ускоряет проверку, но фиксирует IP вручную: если провайдер сменит подсети, SPF перестанет проходить. Поэтому пересматривайте флэт-записи периодически.
Лимит 10 — это про вложенные DNS-запросы, а не про число IP. Одна запись ip4:203.0.113.0/24 покрывает 256 адресов и стоит ноль запросов.
Как enterno.io помогает
Инструмент /email-check раскрывает все вложенные include вашей SPF-записи, считает фактическое число DNS-запросов и сразу показывает, превышен ли лимит 10 и какой include виноват. Это экономит часы ручного раскручивания цепочек через dig. enterno диагностирует и подсказывает — флаттенинг и правку TXT в зоне выполняет владелец домена. Бесплатно — 48+ инструментов, DNS-проверка и разбор SPF.
Частые вопросы
Что произойдёт при превышении лимита?
SPF вернёт permerror, и проверка считается непройденной. Это может уронить и DMARC-выравнивание по SPF, ухудшив доставляемость.
Считается ли ip4 в лимит 10?
Нет. ip4 и ip6 — статичные данные без DNS-запроса. Именно поэтому флаттенинг через ip4 решает проблему лимита.
Безопасен ли автоматический флаттенинг?
Он удобен, но создаёт зависимость от провайдера, который обновляет подсети. Следите, чтобы запись регулярно синхронизировалась с актуальными IP.
Проверьте лимит: запустите /email-check и посмотрите фактическое число запросов в SPF. См. также синтаксис SPF и почему письма уходят в спам.