Применяется ли обычно лимит 10-DNS-поиска в спецификации SPF?


24

Насколько я понимаю, в спецификации SPF указывается, что получателю электронной почты не нужно выполнять более 10 поисков DNS, чтобы собрать все разрешенные IP-адреса для отправителя. Таким образом, если запись SPF имеет include:foo.com include:bar.com include:baz.comи у каждого из этих трех доменов есть записи SPF, которые также имеют 3 includeзаписи, то теперь мы имеем до 3 + 3 + 3 + 3 = 12 поисков DNS.

  1. правильно ли мое понимание выше?

  2. Я использую только 2 или 3 услуги для своего домена, и я уже преодолел этот предел. Этот ли предел обычно (или когда-либо) применяется крупными / второстепенными почтовыми провайдерами?


3
RFC4408 s10.1 говорит, что « реализации SPF ДОЛЖНЫ ограничивать количество механизмов и модификаторов, которые выполняют поиск DNS, максимум 10 для каждой проверки SPF », но это ограничение на количество механизмов и модификаторов, которые делают ... поиск , а не количество проверок, которые они делают. Не могли бы вы дать нам более четкое представление о том, как, по вашему мнению, ваша запись SPF нарушает этот предел?
MadHatter поддерживает Монику

@MadHatter спасибо за эту информацию! я уточнил свой вопрос
Джон Башир

Потенциально может быть даже больше 12, если включения относятся к записям CNAME или MX, а не только к IP-адресам. Если только я неправильно понимаю, на что ссылается @ MadHatter.
Саймон Ист

Ответы:


29

И libspf2(C), и Mail::SPF::Query(perl, используемый в sendmail-spf-milter ) реализуют ограничение в 10 механизмов , вызывающих DNS , но последний (AFAICT) не применяет ограничения MX или PTR. libspf2ограничивает каждый из mx и ptr до 10 также.

Mail::SPF(perl) имеет ограничение в 10 вызывающих DNS механизмов и ограничение в 10 поисков на механизм, на MX и на PTR. (Два пакета perl обычно, но не по умолчанию, используются в MIMEDefang .)

pyspfимеет ограничения по 10 для всех: «поиск», MX, PTR, CNAME; но он явно умножает MAX_LOOKUPS на 4 во время работы. Если только не в «строгом» режиме, он также умножает MAX_MX и MAX_PTR на 4.

Я не могу комментировать коммерческие / проприетарные реализации, но вышеприведенные (кроме pyspf) явно реализуют верхний предел 10 механизмов запуска DNS (подробнее об этом ниже), дают или принимают, хотя в большинстве случаев он может быть переопределен при запуске время.

В вашем конкретном случае вы правы, оно включает 12 включений и превышает лимит 10. Я ожидаю, что большинство программ SPF возвратит «PermError», однако сбои будут влиять только на конечных «включенных» поставщиков, поскольку будет рассчитываться как промежуточный итог: механизмы SPF оцениваются слева направо, и проверки будут «ранними» на проходе, поэтому это зависит от того, где в последовательности появляется отправляющий сервер.

Обходной путь - использовать механизмы, которые не запускают поиск DNS, например, ip4и ip6, а затем использовать, mxесли это возможно, так как это дает вам до 10 дополнительных имен, каждое из которых может иметь более одного IP.

Поскольку SPF приводит к произвольным запросам DNS с потенциально экспоненциальным масштабированием, его можно легко использовать для атак DOS / усиления. У него есть преднамеренно низкие пределы, чтобы предотвратить это: он не масштабируется так, как вы хотите.


10 механизмов (строго механизмы + модификатор «редирект»), вызывающих поиск DNS, не совсем то же самое, что 10 поисков DNS. Даже «DNS-поиски» открыты для интерпретации, вы не знаете заранее, сколько требуется дискретных поисков, и вы не знаете, сколько дискретных поисков может потребоваться вашему рекурсивному преобразователю (см. Ниже).

RFC 4408 §10.1 :

Реализации SPF ДОЛЖНЫ ограничивать число механизмов и модификаторов, которые выполняют поиск DNS, максимум 10 для каждой проверки SPF, включая любые запросы, вызванные использованием механизма «include» или модификатора «redirect». Если это число превышено во время проверки, ДОЛЖНА быть возвращена PermError. Механизмы «include», «a», «mx», «ptr» и «exist», а также модификатор «redirect» учитывают этот предел. Механизмы «all», «ip4» и «ip6» не требуют поиска DNS и, следовательно, не учитываются в этом ограничении.

[...]

При оценке механизмов «mx» и «ptr» или макроса% {p} ДОЛЖЕН быть установлен предел не более 10 MX или PTR RR.

Таким образом, вы можете использовать до 10 механизмов / модификаторов, которые запускают поиск DNS. (Формулировка здесь плохая: кажется, что она устанавливает только верхнюю границу ограничения, подтверждающая реализация может иметь предел 2.)

§5.4 для механизма mx и §5.5 для механизма ptr имеют ограничение в 10 поисков такого типа имени, и это относится только к обработке этого механизма, например:

Чтобы предотвратить атаки типа «отказ в обслуживании» (DoS), НЕ ДОЛЖНО проверяться более 10 имен MX во время оценки механизма «mx» (см. Раздел 10).

т. е. у вас может быть 10 mx-механизмов с до 10 MX-именами, поэтому каждый из них может вызвать 20 операций DNS (10 MX + 10 A DNS-запросов каждый) на общую сумму 200. Это похоже на ptr или % {p} , вы может искать 10 механизмов ptr , следовательно, 10x10 PTR, каждый PTR также требует поиска A, опять же всего 200.

Это именно то, что проверяет тестовый набор 2009.10 , см. Тесты « Пределы обработки ».

Не существует четко установленного верхнего предела общего количества операций поиска DNS-клиента для каждой проверки SPF, я вычисляю это как неявно 210, отдача или взятие. Существует также предложение ограничить объем данных DNS для каждой проверки SPF, хотя фактическое ограничение не предлагается. Вы можете получить приблизительную оценку, поскольку записи SPF ограничены 450 байтами (что, к сожалению, является общим для всех других записей TXT), но общий объем может превысить 100 кБ, если вы щедры. Оба эти значения явно открыты для потенциального злоупотребления в качестве усиления атаки, что именно то, что §10.1 говорит, что вам следует избегать.

Эмпирические данные свидетельствуют общие 10 механизмов подстановок обычно реализуются в записях (проверить SPF для microsoft.com , которые , кажется, пошли на некоторые длины , чтобы держать его ровно 10). Трудно собрать доказательства сбоя слишком большого числа поисков, потому что обязательный код ошибки - просто «PermError», который охватывает все виды проблем ( хотя в этом может помочь отчетность DMARC ).

Часто задаваемые вопросы по OpenSPF увековечивают ограничение в «10 поисков DNS», а не более точные «10 механизмов, вызывающих или перенаправляющих DNS». Этот FAQ, возможно, неправильный, так как на самом деле он говорит:

Поскольку существует ограничение в 10 запросов DNS на каждую запись SPF, указывается IP-адрес [...]

который не согласен с RFC, который налагает ограничения на операцию «проверки SPF», не ограничивает операции поиска DNS таким образом и ясно заявляет, что запись SPF представляет собой отдельную текстовую запись DNS RR. Часто задаваемые вопросы подразумевают, что вы перезапускаете счетчик при обработке «включения», поскольку это новая запись SPF. Какой беспорядок


DNS-поиск

Что такое DNS-поиск? Как пользователь . Я бы подумал, что « ping www.microsoft.com» включает в себя один DNS-запрос: есть одно имя, которое я ожидаю превратить в один IP. Просто? К сожалению нет.

Как администратор, я знаю, что www.microsoft.com может быть не простой записью A с одним IP-адресом, это может быть CNAME, который, в свою очередь, нуждается в другом дискретном поиске для получения записи A, хотя тот, который, вероятно, будет выполнять мой восходящий преобразователь а не решатель на моем рабочем столе. Сегодня для меня www.microsoft.com представляет собой цепочку из 3 CNAME, которые в конечном итоге становятся записью A на akamaiedge.net, то есть (по крайней мере) для 4 операций DNS-запросов для кого-то. SPF может видеть CNAME с механизмом «ptr», хотя запись MX не должна быть CNAME.

Наконец, как администратор DNS, я знаю, что для ответа (почти) на любой вопрос требуется много отдельных операций DNS, отдельных вопросов и транзакций ответов (UDP-дейтаграммы) - при условии, что пустой кеш, рекурсивный преобразователь должен запускаться в корне DNS и работать по-своему вниз: .commicrosoft.comwww.microsoft.comзапрашивать конкретные типы записей (NS, A и т. д.), как требуется, и иметь дело с CNAME. Вы можете увидеть это в действии с dig +trace www.microsoft.com, хотя вы, вероятно, не получите тот же самый ответ из-за хитрости геолокации (пример здесь ). (Существует даже немного больше этой сложности, так как SPF встраивается в записи TXT, а устаревшие ограничения в 512 байт для ответов DNS могут означать повторную попытку запросов через TCP.)

Так что же SPF считает поиском? Он действительно наиболее близок к точке зрения администратора , ему необходимо знать специфику каждого типа DNS-запросов (но не до той точки, где ему фактически необходимо подсчитывать отдельные дейтаграммы DNS или соединения).


Этот инструмент позволяет узнать, есть ли у вас более 10 поисков: tools.bevhost.com/spf
Gaia

не могли бы вы дать мне ELI5 версию вашего поста? Где я должен иметь менее 10 записей в emailstuff.org/spf ? На вкладке DNS? На вкладке «результат» я вижу только 5 записей (каждая с большим количеством IP-адресов.
Gaia

2
Вот еще два инструмента SPF, которые показались вам полезными: dmarcian.com/spf-survey - показывает ярко-красное сообщение об ошибке, если ваш SPF превышает 10 поисков. emailstuff.org/spf - нажмите на вкладку DNS, как только вы получите отчет (но вы должны считать их самостоятельно).
medmunds

Я все еще в замешательстве. Не могли бы вы привести пример того, как «поиск» отличается от «механизма»? Или вы пришли к выводу, что это на самом деле не имеет значения - что вы все равно должны оставаться в пределах 10 поисков?
Саймон Ист

1
@SimonEast добавил пояснение: SPF должен понимать последствия каждого типа записи DNS, чтобы он мог получить приблизительную оценку «стоимости» DNS без фактического подсчета всех компонентов.
mrsspuratic

11

Как вы отметили, RFC4408 s10.1 накладывает некоторые ограничения на работу DNS. В частности:

Реализации SPF ДОЛЖНЫ ограничивать число механизмов и модификаторов, которые выполняют поиск DNS, максимум 10 для каждой проверки SPF, включая любые запросы, вызванные использованием механизма «include» или модификатора «redirect». Если это число превышено во время проверки, ДОЛЖНА быть возвращена PermError. Механизмы «include», «a», «mx», «ptr» и «exist», а также модификатор «redirect» учитывают этот предел. Механизмы «all», «ip4» и «ip6» не требуют поиска DNS и, следовательно, не учитываются в этом ограничении. Модификатор «exp» не учитывается в этом пределе, поскольку поиск DNS для извлечения строки объяснения происходит после оценки записи SPF.

и более того

При оценке механизмов «mx» и «ptr» или макроса% {p} ДОЛЖЕН быть установлен предел не более 10 MX или PTR RR.

Обратите внимание, что первый ограничивает количество механизмов , а не количество выполненных поисков; но это все еще предел.

Насколько я могу сказать, да, эти ограничения применяются довольно жестко. Они предназначены для того, чтобы люди не могли создавать произвольно сложные записи SPF и использовать их для серверов DoS, которые проверяют свои записи, останавливая их в огромной цепочке поисков DNS, поэтому в интересах тех, кто внедряет средство проверки SPF для почитай их.

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

В результате, как представляется, проблемы обычно возникают, когда люди решают использовать как SPF, так и несколько отдельных и разрозненных компаний для обработки своей исходящей электронной почты. Из вашего вопроса я делаю вывод, что вы вписываетесь в эту категорию. SPF, похоже, не предназначен для обслуживания людей, которые решили это сделать . Если вы настаиваете на этом, вам, скорее всего, придется иметь какую-то задачу cron на вашем DNS-сервере, которая постоянно оценивает все записи SPF, которые вы хотели бы включить, выражает их в виде последовательности ip4:и ip6:механизмов (от числа которых нет предела) и повторно публикует результат как запись SPF.

Не забудьте закончить с -all, или все упражнение было бессмысленным.


Ваш инструмент теперь, кажется, не работает, @ JánSáreník
Саймон Ист

@SimonEast Я ничего не могу сделать, когда модератор удаляет сообщение. spf-tools работают на github (попробуйте найти spf-tools github), я один из авторов, это бесплатное программное обеспечение, предназначенное для того, чтобы вернуть сообществу, от которого я так много взял, и было бы радо, если бы оно помогло кому-то еще. Самореклама они называют это. И нет места для обсуждения.

@ JánSáreník О, как странно, теперь MadHatter и мои комментарии не имеют смысла вне контекста. Хм. Ах хорошо.
Саймон Ист

@SimonEast, извините за удаление этих комментариев. Я сделал это и не осознавал, что другие комментарии будут выглядеть вне контекста.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.