[MASOCH-L] O que você mais odeia no SPF?

Leandro Carlos Rodrigues leandro at allchemistry.com.br
Mon Jun 15 10:27:08 BRT 2015


On 15/06/2015 09:24, Danton Nunes wrote:
> On Mon, 15 Jun 2015, Leandro Carlos Rodrigues wrote:
>
>> Segue as soluções que pretendo implementar, algumas já implementadas, 
>> na minha implementação SPF.
>>
>> Se alguém tiver melhores soluções, vamos discutir para chegarmos em 
>> algo que realmente será útil para todos.
>>
>>> 1. *Looping pelo mecanismo include:*
>> Resolvido registrando cada include visitado e pulando os includes que 
>> já foram visitados. Tecnicamente seria a poda da árvore: 
>> http://pt.wikipedia.org/wiki/Poda_%28computa%C3%A7%C3%A3o%29
>
> não bastaria ter um limite superior para o número de inclusões? 
> atingiu o limite declara como bichado. Infelizmente a RFC4408 não 
> estabelece tal limite.

Poderia ser assim Danton. Mas qualquer limite que estipulemos, sempre 
vai ter um conjunto de administradores infelizes que irão superá-lo. O 
problema desse maldito limite é que o administrador de um domínio 
recorre a um include, normalmente um (ex: "v=spf1 
include:_spf.locaweb.com.br ?all"). No momento do registro, o limite não 
foi alcançado. Ai que vem a merda, o administrador do domínio que foi 
usado como include (ex: _spf.locaweb.com.br) simplesmente adiciona 
outros includes, que por sua vez os demais adicionam mais e mais...

O administrador do primeiro domínio mencionado não teria como ficar 
controlando os includes alheiros e acaba se ferrando. Só vai descobrir a 
merda depois que um tempo. Veja que do ponto de vista dos 
administradores dos domínios adicionados, nem sempre eles estão errados 
pois se contar o registro deles como a raiz da árvore, eles estão 
corretos, pois a quantidade de nós para ele não ultrapassa o limite de 10.

O grande desafio seria determinar esse limite, se quisermos colocar um. 
Porém se tratando de um serviço, talvez não valha a pena. Se a árvore 
for grande demais para um domínio e a consulta for feita pela primeira 
vez (sem cache), o máximo que vai acontecer é esta primeira consulta ter 
uma latência grande, e as demais seriam instantâneas.

Por outro lado, acho que seria interessante estipular um limite mas, 
invés de dar erro ao ultrapassá-lo, simplesmente ignorar os includes a 
mais. Seria outra solução.

>
>>> 5. *Registro permissivo demais:*
>> Para os mecanismos ip4 ou ip6, testar os IPs reservados de cada 
>> versão. Se passar algum reservado, ignorar aquele mecanismo.
>
> Bingo! ::1, 127.0.0.1, ou algum endereço de anycast são os meus 
> favoritos para isto.
>
>>> 6. *Erro de sintaxe no registro:*
>> Uso de corretores, quando a correção for possível, e no caso de não 
>> ser possível, ignorar o mecanismo com erro. No caso de algum 
>> mecanismo estiver com erro, só apresentaria o erro caso nenhum outro 
>> mecanismo, com exceção do all, desse match. Se o administrador errou 
>> um mecanismo pouco importante mas manteve integro os demais, então a 
>> consulta vai funcionar para maioria dos casos.
>
> para mim, erro de sintaxe = fail. sem concessões. pode mandar uma 
> mensagem de erro própria.

A ideia de tentar corrigir as falhas de sintaxe é para tentar minimizar 
o número de reclamações por parte dos destinatários. Como o Rafael Lima 
sugeriu, o sistema poderia gravar um log para que o administrador do 
servidor de destino possa informar a cagada ao responsável pela origem, 
quando possível. Se a gente conseguir continuar recebendo as mensagens e 
ao mesmo tempo podermos avisar o responsável por um erro bobo, seria o 
melhor dos dois mundos.

Olhe este exemplo:

    farmaciassaorafael.com.br "v=spf1 ipv4:177.10.167.165 -all"

O erro de sintaxe ai é ipv4 deveria ser ip4. No spfquery convencional dá 
erro. Mas na implementação que fiz ele consegue extrair um CIDR de 
qualquer token e acaba entendendo e corrigindo o registro errado, dando 
PASS como resposta.

Agora se eu depender de avisar todos os administradores que cometeram 
erros semelhantes para fazer com que meus usuários recebam mensagens 
destes caras, eu estaria na roça! Ficaria o tempo todo fazendo isso.

Pior que esse cara ai teve a melhor das intenções, pois usou -all. Ele 
só cometeu um erro bobo na qual um sistema minimamente inteligente 
consegue superar.

>
>>> 7.*domínios com acl terminando em +all*
>> Não permitir o mecanismo +all. Vamos banir o +all. Considerar sempre 
>> SOFTFAIL quando usarem +all.
>
> de fato, isto é um caso particular de 5. eu havia sugerido sem ter 
> prestado suficiente atenção ao 5.

Beleza. Lembrei de outro caso. Sempre que o domínio não existe, o 
spfquery original dá ERROR. Eu fiquei pensando se o melhor não seria dar 
FAIL.

> __
> masoch-l list
> https://eng.registro.br/mailman/listinfo/masoch-l



More information about the masoch-l mailing list