[MASOCH-L] proposta de modificação na política de SPF
Danton Nunes
danton.nunes at inexo.com.br
Mon Jul 23 16:26:33 -03 2012
Caros,
postei isto inicialmente na SPAM-L, mas não tive retorno. Imagino que
todos os assinantes da SPAM-L a filtrem por se parecer com spam ;)
vejam que interessante:
$ spfquery -ip=ff02::2 -sender=ze at comunicativoz.com.br
-helo=comunicativoz.com.br
pass
spfquery: domain of comunicativoz.com.br designates ff02::2 as permitted sender
Received-SPF: pass (spfquery: domain of comunicativoz.com.br designates ff02::2
as permitted sender) client-ip=ff02::2; envelope-from=ze at comunicativoz.com.br;
helo=comunicativoz.com.br;
Ora, ff02::2 é o endereço IPv6 multicast 'all routers' e nunca, jamais, poderia
ser autorizado a enviar email. O que acontece é que o cara tem um registro SPF
extremamente permissivo:
$ host -t txt comunicativoz.com.br
comunicativoz.com.br text "v=spf1 ip4:184.164.153.66/29 all"
Outros endereços poderiam ser usados nesse teste, por exemplo, do próprio
servidor que está recebendo a mensagem, desde que ele não envie pelo domínio do
remetente, ou algum endereço tipo 198.162.x.y, enfim, qualquer coisa que
sabidamente não pode mandar email serve.
Notei que há outros domínios de spammers que tem registros SPF com +all ou
arranjos que funcionam como tal.
Para barrá-los proponho uma alteração na política de verificação do SPF,
verificando antes de tudo se o registro permite que um endereço IP absurdo
(como o all-routers do exemplo acima) é permitido. Se for, retorna SPF_FAIL
pois ou bem a lista de controle de acesso está errada ou se trata de um
spammer.
Fiz o seguinte patch no spfmilter.c (do spfmilter-0.97 do Jeff Poskanzer)
que implementa a política. Aviso: AINDA NÃO TESTEI EXTENSIVAMENTE, publico
aqui só para comentários ou para os corajosos se atreverem a testá-lo.
Compilando com DHACK definido ativa minha modificação. Funciona só com
libspf2!
--- spfmilter.c 2005-06-20 22:28:57.000000000 -0300
+++ spfmilter-danton.c 2012-07-23 12:19:00.000000000 -0300
@@ -2076,6 +2076,10 @@
lib_do_check( lib_data_t* ld, const char* from )
{
int r;
+#ifdef DHACK
+ SPF_config_t hack;
+ SPF_output_t hack_output;
+#endif
/* Find a resolver to use. */
r = find_resolver();
@@ -2083,6 +2087,19 @@
return 0;
/* Do the SPF lookup. */
+#ifdef DHACK
+/* Danton: I want to check here if this SPF ACL give a 'pass' for a clearly illegal IP address
+ in order to sort out too permissive SPF records, e.g. +all, wich some spammers semm to like. */
+ hack=SPF_dup_config(ld->spfcid); // clone source specification.
+ SPF_set_ipv6_str(hack,"ff02::2"); // a clearly illegal IP address (all-routers!)
+ hack_output = SPF_result( hack, get_resolver(r));
+ if (hack_output.result == SPF_RESULT_PASS) { // passed! it's a fraud!
+ ld->output.result=SPF_RESULT_FAIL;
+ ld->output.smtp_comment="Your SPF access list is too permissive.";
+ free_resolver( r );
+ return 1;
+ }
+#endif
ld->output = SPF_result( ld->spfcid, get_resolver( r ) );
ld->got_output = 1;
-- Danton
More information about the masoch-l
mailing list