O limite de pesquisa de 10 DNS na especificação do SPF normalmente é imposto?

24

Meu entendimento é que a especificação do SPF especifica que um receptor de email não deve fazer mais de 10 pesquisas de DNS para reunir todos os IPs permitidos para um remetente. Portanto, se um registro SPF possui include:foo.com include:bar.com include:baz.come esses três domínios possuem registros SPF que também possuem 3 includeentradas, agora temos até 3 + 3 + 3 + 3 = 12 pesquisas de DNS.

  1. meu entendimento acima está correto?

  2. Uso apenas 2 ou 3 serviços para o meu domínio e já estou muito além desse limite. Esse limite é tipicamente (ou nunca) imposto por provedores de e-mail importantes?

John Bachir
fonte
3
A RFC4408 s10.1 diz que "as implementações de SPF DEVEM limitar o número de mecanismos e modificadores que fazem pesquisas de DNS a no máximo 10 por verificação de SPF ", mas essa é uma limitação no número de mecanismos e modificadores que fazem ... pesquisas , não o número de verificações que eles fazem. Você poderia nos dar uma idéia mais clara de como você acha que seu registro SPF está caindo em desuso com esse limite?
MadHatter apoia Monica
@ MadHatter obrigado por essa informação! esclarei minha pergunta.
precisa
Pode ser potencialmente ainda maior que 12 se as inclusões se referirem aos registros CNAME ou MX, e não apenas aos endereços IP. A menos que eu entenda mal o que @ MadHatter está se referindo.
Simon East

Respostas:

29

Ambos libspf2(C) e Mail::SPF::Query(perl, usado no sendmail-spf-milter ) implementam um limite de 10 mecanismos causadores de DNS , mas o último não (AFAICT) aplica os limites MX ou PTR. libspf2limita cada um de mx e ptr a 10 também.

Mail::SPF(perl) tem um limite de 10 mecanismos causadores de DNS e um limite de 10 pesquisas por mecanismo, por MX e por PTR. (Os dois pacotes perl geralmente são usados, embora não por padrão, no MIMEDefang .)

pyspftem limites de 10 em todos os: "pesquisas", MX, PTR, CNAME; mas multiplica explicitamente MAX_LOOKUPS por 4 durante a operação. A menos que no modo "estrito", ele também multiplique MAX_MX e MAX_PTR por 4.

Não posso comentar sobre implementações comerciais / proprietárias, mas as opções acima (exceto pyspf) claramente implementam um limite superior de 10 mecanismos de acionamento de DNS (mais sobre isso abaixo), mais ou menos, embora na maioria dos casos possam ser substituídos em execução. Tempo.

No seu caso específico, você está correto, são 12 inclusões e excede o limite de 10. Eu esperaria que a maioria dos softwares SPF retornasse "PermError"; no entanto , as falhas afetarão apenas os provedores "incluídos" finais, porque a contagem será calculado como um total corrente: os mecanismos SPF são avaliados da esquerda para a direita e as verificações serão antecipadas em um passe, portanto, depende de onde na sequência o servidor de envio aparece.

A maneira de contornar isso é usar mecanismos que não acionem pesquisas de DNS, por exemplo, ip4e ip6, e depois usar, mxse possível, pois você recebe até mais 10 nomes, cada um dos quais com mais de um IP.

Como o SPF resulta em solicitações arbitrárias de DNS com escala potencialmente exponencial, ele pode ser facilmente explorado para ataques de DOS / amplificação. Ele tem limites deliberadamente baixos para evitar isso: não é dimensionado da maneira que você deseja.


10 mecanismos (estritamente mecanismos + o modificador "redirecionar") que causam pesquisas de DNS não são exatamente a mesma coisa que 10 pesquisas de DNS. Até as "pesquisas de DNS" estão abertas à interpretação, você não sabe quantas pesquisas discretas são necessárias e não sabe quantas pesquisas discretas seu resolvedor recursivo pode precisar realizar (veja abaixo).

RFC 4408 §10.1 :

As implementações de SPF DEVEM limitar o número de mecanismos e modificadores que fazem pesquisas de DNS a no máximo 10 por verificação de SPF, incluindo quaisquer pesquisas causadas pelo uso do mecanismo "incluir" ou do modificador "redirecionar". Se esse número for excedido durante uma verificação, um PermError DEVE ser retornado. Os mecanismos "incluir", "a", "mx", "ptr" e "existe", bem como o modificador "redirecionar", contam para esse limite. Os mecanismos "todos", "ip4" e "ip6" não exigem pesquisas de DNS e, portanto, não são contabilizados nesse limite.

[...]

Ao avaliar os mecanismos "mx" e "ptr" ou a macro% {p}, DEVE haver um limite de não mais do que 10 MXs ou PTR RRs consultados e verificados.

Portanto, você pode usar até 10 mecanismos / modificadores que acionam pesquisas de DNS. (A redação aqui é ruim: parece indicar apenas o limite superior do limite, uma implementação de confirmação pode ter um limite de 2.)

§5.4 para o mecanismo mx e §5.5 para o mecanismo ptr têm, cada um, um limite de 10 pesquisas com esse tipo de nome, e isso se aplica apenas ao processamento desse mecanismo, por exemplo:

Para evitar ataques de negação de serviço (DoS), mais de 10 nomes MX NÃO devem ser consultados durante a avaliação de um mecanismo "mx" (consulte a Seção 10).

ou seja, você pode ter 10 mecanismos mx, com até 10 nomes MX, para que cada um deles possa causar 20 operações DNS (10 pesquisas MX + 10 A DNS cada) para um total de 200. É semelhante para ptr ou % {p} . pode olhar para cima 10 ptr mecanismos, por conseguinte, 10x10 PTR, cada PTR também requer uma pesquisa a, novamente com um total de 200.

É exatamente isso que a suíte de testes 2009.10 verifica, consulte os testes " Limites de processamento ".

Não há um limite superior claramente definido para o número total de operações de pesquisa de DNS do cliente por verificação do SPF, calculo-o como implicitamente 210, mais ou menos. Há também uma sugestão para limitar o volume de dados DNS por verificação do SPF, mas nenhum limite real é sugerido. Você pode obter uma estimativa aproximada, pois os registros SPF estão limitados a 450 bytes (que infelizmente são compartilhados com todos os outros registros TXT), mas o total pode exceder 100 kB se você for generoso. Ambos os valores estão claramente abertos a possíveis abusos como um ataque de amplificação, que é exatamente o que § 10.1 diz que você precisa evitar.

As evidências empíricas sugerem que um total de 10 mecanismos de pesquisa é comumente implementado nos registros (confira o SPF do microsoft.com que parece ter se esforçado para mantê-lo exatamente em 10). É difícil coletar evidências de falha de muitas pesquisas, porque o código de erro obrigatório é simplesmente "PermError", que abrange todos os tipos de problemas (os relatórios do DMARC podem ajudar nisso).

O FAQ do OpenSPF perpetua o limite de um total de "10 pesquisas de DNS", em vez dos "10 mecanismos ou redirecionamentos que causam 10 DNS mais precisos". Este FAQ está indiscutivelmente errado, uma vez que realmente diz:

Como existe um limite de 10 pesquisas de DNS por registro SPF, especificando um endereço IP [...]

que está em desacordo com o RFC que impõe os limites em uma operação "verificação de SPF", não limita as operações de pesquisa de DNS dessa maneira e afirma claramente que um registro SPF é um único texto de DNS RR. As perguntas frequentes implicariam que você reinicie a contagem ao processar uma "inclusão", pois esse é um novo registro SPF. Que bagunça.


Pesquisas de DNS

O que é uma "pesquisa de DNS" de qualquer maneira? Como usuário . Eu consideraria " ping www.microsoft.com" envolver uma única "pesquisa" de DNS: há um nome que espero transformar em um IP. Simples? Infelizmente, não.

Como administrador, eu sei que www.microsoft.com pode não ser um registro A simples com um único IP, pode ser um CNAME que, por sua vez, precisa de outra pesquisa discreta para obter um registro A, embora o meu resolvedor upstream provavelmente execute em vez do resolvedor na minha área de trabalho. Hoje, para mim, www.microsoft.com é uma cadeia de 3 CNAMEs que finalmente acaba como um registro A no akamaiedge.net, que representa (pelo menos) quatro operações de consulta DNS para alguém. O SPF pode ver CNAMEs com o mecanismo "ptr", mas um registro MX não deve ser um CNAME.

Finalmente, como administrador de DNS , sei que responder (quase) a qualquer pergunta envolve muitas operações DNS discretas, perguntas individuais e transações de resposta (datagramas UDP) - assumindo um cache vazio, um resolvedor recursivo precisa iniciar na raiz do DNS e seguir seu caminho down: .commicrosoft.comwww.microsoft.comsolicitando tipos específicos de registros (NS, A etc) conforme necessário e lidando com CNAMEs. Você pode ver isso em ação com dig +trace www.microsoft.com, embora provavelmente não obtenha exatamente a mesma resposta devido a truques de localização geográfica (exemplo aqui ). (Há um pouco mais nessa complexidade, uma vez que o SPF pega nos registros TXT, e limites obsoletos de 512 bytes nas respostas DNS podem significar tentar novamente as consultas pelo TCP.)

Então, o que o SPF considera como uma pesquisa? É realmente o ponto de vista do administrador , ele precisa estar ciente das especificidades de cada tipo de consulta DNS (mas não ao ponto em que realmente precisa contar datagramas ou conexões DNS individuais).

mr.spuratic
fonte
Esta ferramenta permite que você saiba se você tem mais de 10 pesquisas: tools.bevhost.com/spf
Gaia
você poderia me dar a versão ELI5 do seu post? Onde devo ter menos de 10 entradas no emailstuff.org/spf ? Na guia DNS? Na guia 'resultado', vejo apenas 5 entradas (cada uma com muitos IPs.
Gaia
2
Aqui estão mais duas ferramentas SPF que pareciam úteis: dmarcian.com/spf-survey - mostra uma mensagem de erro em vermelho brilhante se o seu SPF exceder 10 pesquisas. emailstuff.org/spf - clique na guia DNS assim que receber o relatório (mas você deve contá-los).
medmunds
Eu ainda estou confuso. Você poderia fornecer um exemplo de como uma "pesquisa" é diferente de um "mecanismo"? Ou é a conclusão de que isso realmente não importa - que você ainda deve se manter em 10 pesquisas?
Simon East
1
Como a @SimonEast adicionou uma explicação, o SPF precisa entender as implicações de cada tipo de registro DNS para que ele possa obter uma estimativa aproximada do "custo" do DNS, sem contar todos os grãos.
mr.spuratic
11

O RFC4408 s10.1 , como você observou, impõe alguns limites à atividade do DNS. Especificamente:

As implementações de SPF DEVEM limitar o número de mecanismos e modificadores que fazem pesquisas de DNS a no máximo 10 por verificação de SPF, incluindo quaisquer pesquisas causadas pelo uso do mecanismo "incluir" ou do modificador "redirecionar". Se esse número for excedido durante uma verificação, um PermError DEVE ser retornado. Os mecanismos "incluir", "a", "mx", "ptr" e "existe", bem como o modificador "redirecionar", contam para esse limite. Os mecanismos "todos", "ip4" e "ip6" não exigem pesquisas de DNS e, portanto, não são contabilizados nesse limite. O modificador "exp" não conta nesse limite porque a pesquisa de DNS para buscar a sequência de explicações ocorre após a avaliação do registro SPF.

e além disso

Ao avaliar os mecanismos "mx" e "ptr" ou a macro% {p}, DEVE haver um limite de não mais do que 10 MXs ou PTR RRs consultados e verificados.

Observe que o primeiro é um limite para o número de mecanismos , não o número de pesquisas realizadas; mas ainda é um limite.

Pelo que sei, sim, esses limites são impostos com bastante força. Eles foram projetados para impedir que as pessoas construam registros SPF arbitrariamente complexos e os usem em servidores DoS que verificam seus registros, interrompendo-os em uma enorme cadeia de pesquisas de DNS; portanto, é do interesse de quem implementa um verificador SPF para honre-os.

Você está certo ao observar que as inclusões aninhadas provavelmente causarão o maior problema com esses limites e, se você decidir incluir vários domínios, cada um dos quais faz uso intenso de inclusões, poderá examiná-los rapidamente. Não é muito difícil encontrar exemplos de pessoas para quem isso criou questões concretas .

O resultado parece ser que geralmente surgem problemas quando as pessoas decidem usar o SPF e várias empresas distintas e díspares para lidar com o e-mail enviado. Eu deduzo da sua pergunta que você se encaixa nessa categoria. O SPF não parece ter sido projetado para atender as pessoas que optam por fazer isso . Se você insistir em fazer isso, você provavelmente vai ter que ter algum tipo de trabalho cron no seu servidor DNS que avalia constantemente todos os registos SPF você teria gostado de incluir, expressa-los como uma série de ip4:e ip6:mecanismos (em cujo número não há limite) e publica novamente o resultado como seu registro SPF.

Não se esqueça de terminar com um -all, ou todo o exercício foi inútil.

MadHatter apoia Monica
fonte
Sua ferramenta agora parece estar inoperante, @ JánSáreník
Simon East
@SimonEast Não há nada que eu possa fazer quando um moderador excluir uma postagem. O spf-tools está no github (tente procurar spf-tools github), sou um dos autores, é um software livre destinado a retribuir à comunidade da qual tirei tanto proveito e ficaria feliz se isso ajudar mais alguém. Auto-promoção eles chamam isso. E não há espaço para discussão.
@ JánSáreník Oh, que estranho, agora MadHatter e meus comentários não fazem sentido fora do contexto. Hmm. Ah bem.
Simon East
@ SimonEast, desculpe-me por excluir esses comentários. Fiz isso e não percebi que os outros comentários pareceriam fora de contexto.