Думаю, что вам хорошо известен такой протокол, как 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)
antonwork
23.04.2016 22:23+3Если я ничего не путаю, у аэрофлота как раз все правильно.
"v=spf1 " "ip4:80.92.36.15..." - правильный вариант, а "v=spf1" "ip4:80.92.36.15..." (без пробела в первых кавычках) - неправильный.
Ответ из нескольких кусков склеится без пробелов, именно поэтому пробел и добавляют. Это особенность работы dns, а не spf1.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.
yermulnik
23.04.2016 22:38then 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).
am83
23.04.2016 22:40Не увидел ничего неправильного в настройке spf. Строки в txt записи будут соединены правильно. Более интересно почему ваши системы помечают их письма как «не прошедшие проверку»
navion
Постмастеру писали?
У них и антиспам какой-то самопальный с реджектом по RBL, что тоже не есть хорошо. А звонить на общую линию нет смысла, отнесутся как городскому сумасшедшему и отправят заявку в /dev/null.