sábado, 13 de novembro de 2010

Adicionando verificação de SPF ao Postfix

Introdução

Talvez você já tenha ouvido falar "desse tal de SPF" e se pergunte que novidade é essa que apareceu na Internet.
A sigla significa "Sender Policy Framework", ou "Estrutura de Politicas de Remetente". Diz a lenda que originalmente a sigla significava "Sender Permitted From", mas que foi alterada para refletir melhor o tipo de trabalho e ferramentas que a idéia do SPF traria.
Nesse artigo vamos ver pra que serve o SPF, como ele ajuda o controle de email mundial e como usa-lo, tanto do lado "cliente" como "servidor".

1. Para que serve

O SPF basicamente serve para dizer aos servidores de email espalhados pela Internet quais enderecos IP/servidores estao autorizados a enviar email (rementente) com o dominio designado.
Assim, eu, como administrador do dominio xyz.com.br, publicarei um registro SPF dizendo que os servidores 200.200.200.200 e 200.200.200.201 estao autorizados a enviar emails com remetentes @xyz.com.br; quaisquer outros servidores tentando enviar emails como @xyz.com.br são falsos, e tais emails devem ser rejeitados.
De maneira similar, quando eu estiver recebendo um email de um remetente fulano@qwerty.com.br, verificarei seu registro SPF para saber se o servidor tentando me passar esse email tem autorização para isso.
Note que o SPF não se trata necessariamente de uma ferramenta anti-SPAM. Embora uma quantidade razoavel de SPAM possa ser combatido com o SPF, estatisticas mostram que a maior parte dos spammers "profissionais" já tinham registros SPF implantados, ao passo que apenas uma pequena parcela dos dominios de emails legitimos tinham o registro.
Nesse contexto, o SPF ajuda a combater outra forma de lixo "internetico": os Scams ou Phishing Scams, pessoas enviando emails como se fossem de bancos ou similares pedindo para que você acesse uma pagina e "atualize seus dados". Nem precisa dizer que o email não é do banco e seus dados não vão para o banco...
Você talvez esteja pensando: "Mas se esse negocio não é a arma final contra o SPAM vou implementar pra que?". O SPF ajuda a impedir emails falsificados, dizendo ser você. Isso ajuda a prevenir fraudes e similares. Também dificulta a ação de alguns virus, que sorteiam um nome na lista de contatos da vitima para usar como remetente.

2. Como funciona

Registros SPF são simples registros texto na tabela de DNS de seu dominio. Esses registros possuem sintaxe própria, que pode ser consultada direto no site oficial do SPF - http://spf.pobox.com/ . Há inclusive um "Wizard" para gerar o registro SPF para você, e é recomendado que você use esse wizard qdo for implementar o registro em seu dominio.
Se você usa o BIND como DNS, o registro ficaria mais ou menos assim na zona de DNS:
.    IN  TXT "v=spf1 mx -all"
Se quiser saber qual o registro SPF de um domninio, basta rodar essa consulta:
thefallen@KlingonRealm:~$ host -t txt dominio.com.br
  dominio.com.br text "v=spf1 mx -all"
A sintaxe mencionada acima diz que apenas os servidores listados como MX do dominio estao autorizados a mandar email em nome do dominio, e que o registro é a "autoridade final" (-all), quer dizer, pode-se rejeitar a mensagem se não sair de algum MX do dominio. Se a palavra-chave fosse "?all" quer dizer que o registro é "neutro", ou esta em periodo de implantação, e ainda podem haver servidores fora dessa lista; portanto NAO se deve rejeitar a mensagem. Uma lidinha na especificação do site do SPF ajuda a esclarecer esse ponto.

3. Quando a verificação de SPF funciona

Uma duvida que você talvez tenha é "Se eu ativar SPF, vou parar de receber email de quem não tem SPF?". A verificação de SPF só acontece quando o dominio do remente já publicou o registro SPF. Assim, se o site do remetente não tiver aderido ao SPF, os emails vão passar normalmente (poderao ser forjados, visto que não há o registro SPF).
Se você não quiser ativar a verificação do SPF em seu MTA agora, pode fazer apenas o primeiro passo da implantação, que é adicionar o registro no DNS. Isso também não vai comprometer emails chegando ou saindo de/para sites que não facam a verificação SPF.

4. Implementações de verificação SPF

Existem varias implementações de verificação de SPF. Alem da implementação inicial em Perl (Mail::SPF::Query), há bibliotecas especializadas (libspf e libspf2), modulos em Python, modulos para SpamAssassin, modulos pro Milter do Sendmail, patches para verificação nativa em Postfix, Exim e Qmail, e inclusive esta listado no site uma implementação para Exchange.
No Howto a seguir usaremos a implementação via Policy Daemon do Postfix (a policyd listada no site). Não precisa de patches no Postfix e o daemon adicional é bastante leve para permitir que o sistema escale bem para ambientes maiores.

5. Para os mais apressados

Para os que não quiseram ler a teoria acima, a implementação do SPF ocorre em 2 partes:

  • Publicar um registro SPF em seu DNS
  • Implementar a verificação do registro SPF no MTA

5.1. Gerando o registro SPF

Va até o site do Wizard do SPF (http://spf.pobox.com/wizard.html) e responda as perguntas. Na maioria dos casos, o registro fica como "v=spf1 mx -all"
Edite a zona DNS de seu dominio no BIND/named e adicione a seguinte linha no final do arquivo:
.    IN TXT "v=spf1 mx -all"

5.2. Implementando a verificação no MTA

Primeiro de tudo, tenha em mente que o Policy Daemon Delegation (check_policy_service) só esta disponivel a partir da versão 2.1 do Postfix. Para saber qual versão você esta rodando, digite o comando:
root@KlingonRealm:~# /usr/sbin/postconf mail_version
  mail_version = 2.1.5
Para implantar o policyd para verificar os registros de servidores conectando ao seu MTA, vai precisar da libspf2 e do policyd (http://www.libspf2.org/). Note que usaremos a versão do site www.libspf2.org, que é a versão em C que usa a libspf2. O policyd disponivel no site http://spf.pobox.com/ é a versão em Perl, consideravelmente mais pesada e não tão bem escalavel.
A instalação da biblioteca libspf2 é bastante simples:
./configure --prefix=/usr
  make
  su -c "make install"
Se quiser já instalar o policyd direto no /usr/libexec/postfix, rode o seguinte comando:
./configure --prefix=/usr --sbindir=/usr/libexec/postfix
  make
  su -c "make install"
Precisamos agora referenciar o serviço no master.cf:
# /etc/postfix/master.cf:
  policy    unix  -       n       n       -       -       spawn
          user=nobody argv=/usr/libexec/postfix/policyd
Basta adicionar a seguinte linha no main.cf para que ele já faça a verificação:
# /etc/postfix/main.cf:
  smtpd_sender_restrictions = suas_restricoes_vao_aqui,
          permit_mynetworks,
          check_policy_service unix:private/policy
Note que é necessário o permit_mynetworks para que o SPF não tente verificar o próprio dominio. Se quiser mover a verificação de SPF pra "frente" das regras, não se esqueca de mover também o permit_mynetworks.
Tente agora enviar um email de algum IP externo com a seguinte sintaxe:
thefallen@KlingonRealm:~$ telnet mail.seudominio.com.br 25
  220 mail.seudominio.com.br SMTP Postfix
  MAIL FROM: 
  250 Ok
  RCPT TO: 
  554 : Sender address rejected: Please see http://spf.pobox.com/why.html?sender=seuemail%40seudominio.com.br&ip=201.x.y.x&receiver=mail.seudominio.com.br
  QUIT

6. O que fazer quandos as coisas não dao certo


  • Primeiro, verifique o log de email (normalmente /var/log/maillog). Ele é seu melhor amigo nessa hora :)
  • Se não houver nenhuma mensagem de erro la, verifique as configurações que vc acabou de fazer, e certifique-se que rodou o comando "postfix reload" ou "postfix stop; postfix start".
  • Verifique se o SPF foi corretamente instalado com o comando spfquery:
    thefallen@Ragnarok:~$ /usr/bin/spfquery -ip 200.200.200.200 -sender fulano@uol.com.br -helo fulano
      fail
      Please see http://spf.pobox.com/why.html?sender=fulano%40uol.com.br&ip=200.200.200.200&receiver=spfquery
      spfquery: domain of uol.com.br does not designate 200.200.200.200 as permitted sender
      Received-SPF: fail (spfquery: domain of uol.com.br does not designate 200.200.200.200 as permitted sender) client-ip=200.200.200.200; envelope-from=fulano@uol.com.br; helo=fulano;
Se todo o resto não deu certo, você pode tentar (na seguinte ordem :D) pesquisar no Google, as listas de discussão do Postfix (http://www.postfix.org/lists.html) e, em ultimo caso, canais de IRC (os que frequento são #postfix e #postfix-br em irc.freenode.net)

7. Sobre o autor

Deives Michellis "thefallen" é Tecnologo em Processamento de Dados pela FATEC e Gerente de Desenvolvimento de Soluções Linux do Grupo GEO. Também nerd de carteirinha e ativista linux nas horas vagas.

Ultima Revisão: Tue Jan 18 16:42:51 2005

Criado com o txt2tags

A menos que especificado de outra maneira, todos os documentos e textos sao protegidos sob licenca BSD - Veja a licenca para mais detalhes
Leia tambem sobre o motivo de uso de licencas em documentacao. 

Nenhum comentário:

Postar um comentário

Related Posts with Thumbnails