Думаю, что вам хорошо известен такой протокол, как DMARC и как он связан с SPF и DKIM.
Недавно выяснилось, что письма от Аэрофлота не проходят проверку по данному протоколу.
Кому интересно, почему, прошу под кат.

DMARC разработан для того, чтобы можно было защититься от фишинговых сообщений электронной почты. Делается это настройкой политик для домена, все настройки прописываются в DNS домена.
На Хабре о DMARC есть несколько статей.
Например, здесь и здесь.

В общем функция данного протокола заключается в том, что делать принимающему почтовому серверу с почтовыми сообщения от вашего домена, если они не прошли проверку SPF и DKIM.
То есть для работы DMARC в вашем домене должны быть корректно настроены SPF и DKIM.
Про DKIM, тоже есть не мало статей в Сети, поэтому на его специфике останавливаться не буду.

В почтовых системах своих клиентов я всегда настраиваю пометку сообщений, которые не прошли проверку DMARC, путем изменения темы сообщения, чтобы пользователь был осторожен с данным сообщением.
Периодически я провожу аудит подобных сообщений путем изучения их заголовков.
Примерно неделю назад заметил, что письмо от Аэрофлота было помечено одной из систем, как не прошедшее проверку.
Начал разбираться и оказалось, что в домене aeroflot.ru неправильно прописана запись SPF.

Смотрим SPF при помощи nslookup

> nslookup
> set type=txt
> aeroflot.ru
aeroflot.ru text = "v=spf1 " "ip4:80.92.36.15 ip4:80.92.36.16 ip4:80.92.36.63 ip4:80.92.36.64 ip4:80.92.39.28 ip4:80.92.36.156 ip4:80.92.36.157 ip4:80.92.39.17 ip4:80.92.39.18 " "ip4:213.219.245.120 ip4:213.219.245.121 ip4:79.137.209.178 ip4:151.193.220.17 ip4:151.193.220.18 ip4:151.193.220.20 ip4:151.193.224.244 ip4:151.193.224.245 ip4:5.104.224.147 " "ip4:185.69.80.40 ip4:185.69.81.40 ip4:185.69.82.20 ip4:185.69.83.20 ip4:89.208.149.202 ip4:5.8.180.34 ip4:77.95.225.47 ip4:95.213.152.75 " "ip4:185.69.80.10 ip4:185.69.80.20 ip4:185.69.80.30 ip4:185.69.81.10 ip4:185.69.81.20 ip4:185.69.81.30 a:mta.mindbox.ru include:mailgun.org ~all"

Ошибку видно почти сразу. В RFC4408, который описывает SPF, в 3.1.3 написано:

3.1.3. Multiple Strings in a Single DNS record

As defined in [RFC1035] sections 3.3.14 and 3.3, a single text DNS
record (either TXT or SPF RR types) can be composed of more than one
string. If a published record contains multiple strings, then the
record MUST be treated as if those strings are concatenated together
without adding spaces. For example:

IN TXT "v=spf1 .... first" "second string..."

MUST be treated as equivalent to

IN TXT "v=spf1 .... firstsecond string..."


То есть, если у вас в домене, в записи SPF содержится несколько строк, то они должны объединяться без пробелов.
Например, в SPF Аэрофлота, в строке "v=spf1 " "ip4:80.92.36.15... лишний пробел после "v=spf1 "
Должно быть "v=spf1" "ip4:80.92.36.15...
Также лишние пробелы содержаться в других строках.

Я сразу же попытался связаться с админами Аэрофлота, но это было безуспешно. Звонил по номерам Аэрофлота, просил переключить на ИТ-отдел, но оператор сказала, что не может этого сделать.
Создал в их системе заявку, где детально описал проблему. Пришло подтверждение, что заявка создана и вскоре будет обработана, но ответа так и нет.

Данную заметку пишу с надеждой, что админы Аэрофлота читают Хабр, или кто-то из вас знает данных админов и передаст им информацию.
P.S! Знаю, что не совсем корректно писать об ошибках своих коллег, но другого способа донести до них важную информацию, к сожалению, не вижу.
Коллеги, если вы считаете, что данная заметка кому-либо навредит, то напишите мне об этом. Убрать ее в черновики не сложно.

Спасибо!
Всем добра!

Комментарии (5)


  1. navion
    23.04.2016 22:21

    Постмастеру писали?
    У них и антиспам какой-то самопальный с реджектом по RBL, что тоже не есть хорошо. А звонить на общую линию нет смысла, отнесутся как городскому сумасшедшему и отправят заявку в /dev/null.


  1. antonwork
    23.04.2016 22:23
    +3

    Если я ничего не путаю, у аэрофлота как раз все правильно.

    "v=spf1 " "ip4:80.92.36.15..." - правильный вариант, а
    "v=spf1" "ip4:80.92.36.15..." (без пробела в первых кавычках) - неправильный.
    

    Ответ из нескольких кусков склеится без пробелов, именно поэтому пробел и добавляют. Это особенность работы dns, а не spf1.


    1. NRinat
      23.04.2016 22:35

      Может быть я что-то перевел не так.
      If a published record contains multiple strings, then the
      record MUST be treated as if those strings are concatenated together
      without adding spaces.


  1. yermulnik
    23.04.2016 22:38

    then the record MUST be treated as if those strings are concatenated together
    without adding spaces. For example:
    IN TXT «v=spf1… first» «second string...»
    MUST be treated as equivalent to
    IN TXT «v=spf1… firstsecond string...»

    Мне кажется, что тут явно описано, что строки «склеиваются» без добавления в них пробела. Т.е. у Аэрофлота всё правильно сделано. Конечно, если не считать этой толпы ip4 записей: ведь можно создать поддомен аля _spf.aeroflot.ru, всунуть в него все ip4 и заинклюдить или заредиректить его в spf-запись (как пример, google.com, mail.ru etc).


  1. am83
    23.04.2016 22:40

    Не увидел ничего неправильного в настройке spf. Строки в txt записи будут соединены правильно. Более интересно почему ваши системы помечают их письма как «не прошедшие проверку»