Verificando as Headers Received-SPF: com RegEx.

Como escrito em um rascunho sobre a requisição de comentário da estrutura de política de remetentes. (Em outras palavras… Como escrito nesse Draft sobre a RFC do SPF). Foi definido que os servidores devem verificar a validade dos cabeçalhos Received-SPF, garantindo que o mesmo tenha um tamanho aceitável e não possua caracteres inválidos e ou dados maliciosos. (SPF clients MUST make sure that the Received-SPF header does not contain invalid characters, is not excessively long, and does not contain malicious data that has been provided by the sender.)

A dúvida porém é o que seria considerado excessivamente longo? O padrão POSIX 1003.1-2001 define que os domínios deverão ter no máximo 64 caracteres (com excessão do ponto de terminação) enquanto a RFC 2181 define um máximo de até 255 caracteres (incluindo o ponto de terminação). Pensando a respeito, acredito que o domínio deva ter limite de 64 caracteres enquanto o domínio com seus subdomínios (inclui ponto de terminação) deva ser 255 caracteres. 😉

Seguindo essa idéia, criei algumas regras com RegEx que verificam e permitem o envio de mensagens com cabeçalhos Received-SPF válidos e nega o que não se encaixa no padrão.

As regras podem ser visualizadas nesse link.

Leia Mais Artigos sobre o Postfix!

Implementando verificações SPF no Postfix.

O Sender Policy Framework (SPF) é um recurso muito interessante em complemento às outras técnicas já conhecidas (gerência da porta 25, RBL’s, antivirus, verificações regex de cabeçalhos e corpos e clientes e emails, etc…) no combate de spams, virus e pishing que trafegam pela rede e funciona de uma forma muito simples e extremamente confiável: Todos os donos de domínios definem quem eles permitem que enviem emails com o seu domínio.

Por exemplo: você tem o domínio seusite.com.br e envia seus emails somente pelos servidores do Terra.com. Então você configura um campo TXT corretamente formatado para o SPF com a informação de que somente os servidores do Terra.com podem enviar emails de @seusite.com.br. Dessa forma, se alguém vier de outro IP alheio ao Terra.com em um servidor de email (com spf) e disser ser você@seusite.com.br terá o envio negado!

Porém.. se a mensagem vier de um domínio que não possui o registro SPF ela será entrege normalmente pois não será possível comprovar a autenticidade da mesma.

Criar esse registro só nos trás vantagens: evita que os servidores que fazem a verificação SPF aceitem quem usar nosso domínio em vão 😉

Para quem tem desenvoltura com o bind, a configuração é simples: basta acrescentar um registro TXT do domínio contendo os valores:

“v=spf1 <registros> –all”

É desejável adicionar também um registro SPF com o mesmo conteúdo do registro TXT.

Os registros podem ser:

mx permissão de envio concedida ao servidor mx desse domínio;

a permissão de envio concedida ao ip desse registro;

ip4:200.200.200.0/25 permissão de envio concedida à rede 200.200.200.0/25;

include:dominio.com.br permissão de envio concedida aos mesmos ips listados como permitidos no dominio.com.br.

Existem diversas opções para o –all, sendo que ele é o mais importante pois nega o envio por quem não estiver listado como permitido nos <registros>.

E outra observação importante, os subdomínios devem conter também um registro TXT, permitindo ou negando o envio de mensagens. Por exemplo, como não envio emails de usuario@www.seusite.com.br devemos negar o envio provindo do subdomínio www com o seguinte registro:

www       TXT         “v=spf1 –all”
www       SPF         “v=spf1 –all”

Dependendo da sua quantidade de domínios e ou subdomínios será um trabalho que tomará seu tempo.. porém só precisa ser efetuado uma única vez e não exige manutenção.

Para concluir, iremos adicionar a verificação dos registros SPF ao nosso Postfix! De maneira simples e fácil: Precisamos da biblioteca spf2 e do servidor policyd (modificado para verificação SPF). Ambos podem ser encontrados em: http://www.libspf2.org/ e cabe uma observação: O policyd só funciona com a versão 1.0 da libspf2, portanto procure efetuar o download da biblioteca antiga mais recente (1.04).

Depois de compilados e instalados, basta acrescentar o policyd no master.cf:

policy    unix  -        n       n       -       -       spawn
          user=nobody argv=/<diretório>/policyd

No main.cf iremos adicionar a verificação do envelope de remetente:

smtpd_sender_restrictions =
  ...
  ...
  check_policy_service unix:private/policy

Depois, torna-se interessante verificar os cabeçalhos de SPF de mensagens enviadas de outros servidores para você, como pode ser lido aqui para aumentar a segurança das mensagens recebidas!

Com mais essa ferramenta e a adoção do SPF os nossos servidores estão dia após dia cada vez mais seguros! 💡

Leia Mais Artigos sobre o Postfix!