среда, 13 июля 2011 г.

SPF: разбираемся с include

Что такое SPF, уже было. Что значат a mx в начале записей там тоже можно найти.

Когда нужен include? Представим, что у нас много своих айпи или просто много доменов и мы хотим при переезде 1 сервера на новые айпи менять не все домены, что там сидели (а это может быть даже 1500 доменов), а 1 общий. В этом случае на этих доменах создается TXT запись вида
@ TXT "v=spf1 a mx include:OurMainDomain.ru -all"
Теперь достаточно поменять запись только для OurMainDomain.ru и всё.
Могут быть варианты и сложнее, с несколькими include, хотя тут уже лучше не увлекаться.
А что если для самого OurMainDomain.ru также нужна SPF запись? В этом случае надо вынести нашу служебную TXT на отдельный поддомен.

Для начала, посмотрим на include:_spf.google.com

host -a _spf.google.com
Trying "_spf.google.com"
;; ->>HEADER<<- data-blogger-escaped-25361="25361" data-blogger-escaped-br="br" data-blogger-escaped-id:="id:" data-blogger-escaped-noerror="noerror" data-blogger-escaped-opcode:="opcode:" data-blogger-escaped-query="query" data-blogger-escaped-status:="status:"> ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;_spf.google.com. IN ANY

;; ANSWER SECTION:
_spf.google.com. 300 IN TXT "v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20 ip4:173.194.0.0/16 ?all"

;; AUTHORITY SECTION:
google.com. 324838 IN NS ns2.google.com.
google.com. 324838 IN NS ns4.google.com.
google.com. 324838 IN NS ns1.google.com.
google.com. 324838 IN NS ns3.google.com.

;; ADDITIONAL SECTION:
ns1.google.com. 206645 IN A 216.239.32.10
ns2.google.com. 206645 IN A 216.239.34.10
ns3.google.com. 206645 IN A 216.239.36.10
ns4.google.com. 140190 IN A 216.239.38.10

Похоже, что для такого подключения сейчас стандарт _spf.domain, типа TXT
Таким образом, на нашем OurMainDomain.ru надо добавить запись
_spf IN TXT "v=spf1 ip4:x.x.x.x ?all"
?all нужен: если у нас после этого include идёт ещё (можно писать больше 1 include), чтобы проверка почтовиком не остановилась и проверяла записи дальше.
Означает "если адрес не подошёл ни к одному правилу, считать, что проверка не проводилась".

Важный нюанс: не стоит делать include, который показывает на нестабильный dns: если не удалось получить эти данные, почта перестанет ходить. Во всяком случае, так пишут во всех мануалах. Как я понимаю, ошибка подключения фактически выдаст "-all".

2 комментария:

  1. Извините - но это какая-то странная чушь...

    > Похоже, что для такого подключения сейчас стандарт _spf.domain, типа TXT
    > Таким образом, надо добавить запись
    > _spf IN TXT "v=spf1 ip4:x.x.x.x ?all"

    Даже если ничего про SPF не знаешь - официальная документация на первой странице результатов поиска... Вполне понятная и несложная...
    Чтобы SPF работало, необходимо _для_самого_почтового_домена_ сделать запись в зоне... что-то вроде:
    @ IN TXT "v=spf1 a mx -all"
    _Для_домена_, а не _в_ нём, как тут описывается...
    А гугль просто активно использует редирект SPF. Вот его SPF-запись собственно из почтового домена:

    $ host -t txt gmail.com
    gmail.com descriptive text "v=spf1 redirect=_spf.google.com"

    А в этой статье рассматривается сразу вторая запись из цепочки, без ссылок на то, что без первой она просто бесполезна - SMTP-сервер до неё просто не доберётся.

    ОтветитьУдалить
    Ответы
    1. А теперь читаем тему. Где хоть слово сказано про то, что мы подключаем для текущего домена?
      А нужно это, если например у нас есть 100 доменов и мы хотим сделать 1 общий SPF для инклуда, чтобы при сменен айпи серверов, откуда может уходить почта, не переписывать 100 TXT для этих доменов.

      Заметку уточню.

      Удалить