Postfix com SPF

Introdução

Este página descreve funcionamento do serviço SPF. Tencologia em uso crescente, usada no auxílio do combate ao SPAM.
Descreve também o passo a passo para reconstrução do pacote Debian do Postfix recompilado com o patch para verificação de SPF.

O que é

O SPF (ou Sender Policy Framework) é uma extensão do SMTP que facilita a identificação de spam com endereço de origem forjado. A descrição técnica é simples: cada domínio interessado em combater e-mails forjados acrescenta uma linha de texto padronizada à configuração do seu próprio DNS. Esta linha segue o padrão definido pelo SPF, e descreve quais os endereços dos servidores de e-mail autorizados a gerar mensagens daquele domínio.

Funcionamento

Basicamente o provedor DONO do domínio, coloca uma linha no seu DNS informando “quais servidores SMTP têm permissão para enviar mensagens com aquele domínio” e ainda define um comportamento para o receptor quando o mesmo recebe mensagens daquele domínio que NÃO VENHAM daqueles endereços IP especificados no DNS.
Os comportamentos podem ser:

FAIL (-all) – O receptor deverá RECUSAR a mensagem se ela não vier do range de IPs declarados no DNS;
SOFTFAIL (~all/?all) – O receptor deve decidir o que fazer, mas o provedor dono do domínio “acha” que o receptor deveria bloquear (também é uma forma de dizer que em breve o provedor dono do domínio trocará para FAIL);
NONE - (+all) O provedor dono do domínio diz que “é problema e decisão do receptor”.

Exemplo:
~$ host -t txt terra.com.br
terra.com.br descriptive text "v=spf1 mx ip4:200.176.10.0/23 ip4:200.176.2.0/23 -all"

Esta linha no DNS explica que todos os e-mails “@terra.com.br” só podem ser enviados a partir de:
a) MX’s listados nos DNS’s;
b) Da rede 200.176.10.0/23 e 200.176.2.0/23;
c) Usa FAIL como default.

O atributo “-all” (FAIL) diz que e-mail “@terra.com.br” devem ser recusados quando não vierem desta origem.

Ou seja, um e-mail enviado a partir de um servidor pessoal com FROM teste@terra.com.br será RECUSADO em provedores com SPF habilitado. Isso causa um problema com remailers, servidores de lista e usuários TERRA acostumados a usar os e-mails @terra.com.br a partir de seus provedores ou redes corporativas. Porém evita disseminação de vírus, de SPAM e dá credibilidade ao e-mail terra.com.br.

Outros provedores que usam “-all” (BLOQUEIO) são o UOL e o BOL:
~$ host -t txt uol.com.br
uol.com.br descriptive text "v=spf1 ip4:200.221.11.0/24 ip4:200.221.29.0/24 ip4:200.221.4.0/24 -all"
~$ host -t txt bol.com.br
bol.com.br descriptive text "v=spf1 ip4:200.221.11.0/24 ip4:200.221.29.0/24 ip4:200.221.4.0/24 ip4:200.221.24.0/24 -all"

Na prática

Bom, agora que já sabemos o que é e como funciona o SPF, vamos meter a mão na massa.

A distribuição escolhida foi o Debian Etch, não entraremos no mérito sobre os critérios escolhidos para definir a distro.

Pacotes necessários:
build-essential
dpkg-dev
fakeroot
dpatch
lsb-release
libdb4.3-dev
libgdbm-dev
libldap2-dev
libdb4.4-dev
libssl-dev
libsasl2-dev
libpq-dev
libcdb-dev
libmysqlclient15-dev
libspf2-2
libspf2-dev

Editar o source /etc/apt/source.lists:
deb http://ftp.debian.org/debian/ stable main contrib
deb http://security.debian.org/ stable/updates main contrib
deb-src http://ftp.debian.org/debian/ stable main contrib

Instalar pacotes:
~# apt-get install build-essential libdb4.4-dev libspf2-2 libspf2-dev
~# apt-get install dpkg-dev fakeroot dpatch lsb-release libgdbm-dev libldap2-dev libssl-dev libsasl2-dev libpq-dev libcdb-dev libmysqlclient15-dev

Instalar o source do postfix:
~# mkdir postfix-src
~# cd postfix-src
~/postfix-src# apt-get source postfix

Baixe e aplique o patch do spf:
~/postfix-src# wget http://www.linuxrulz.org/nkukard/postfix/postfix-2.3/postfix-2.3.2_libspf2-1.2.x-20060819.patch
~/postfix-src# cd postfix-2.3.8
~/postfix-src/postfix-2.3.8# patch -p1 < ../postfix-2.3.2_libspf2-1.2.x-20060819.patch

Criando e instalando pacote:
~/postfix-src/postfix-2.3.8# make tidy

Edite rules:
~/postfix-src/postfix-2.3.8# vim debian/rules
Na linha CCARGS adicione o parâmetro: -DHAVE_NS_TYPE
Em AUXLIBS adicione o parâmetro: -lspf2

Deve ficar algo assim:
CCARGS=-DDEBIAN -DMAX_DYNAMIC_MAPS -DHAS_PCRE -DHAS_LDAP \
-DHAVE_NS_TYPE \
-DHAS_CDB \
-DHAS_MYSQL -I/usr/include/mysql \
-DHAS_PGSQL -I`pg_config --includedir` \
-DHAS_SSL -I/usr/include/openssl \
-DUSE_SASL_AUTH -I/usr/include/sasl \
-DUSE_CYRUS_SASL \
-DUSE_TLS
AUXLIBS =-lssl -lcrypto -lsasl2 -lspf2

Recrie o pacote e instale:
~/postfix-src/postfix-2.3.8# dpkg-buildpackage
~/postfix-src/postfix-2.3.8# cd ..
~/postfix-src# dpkg -i postfix_2.3.8-2_i386.deb

Teste o recurso de SPF:
~/postfix-src# postconf | grep spf
spf_explanation =
spf_global_whitelist = yes
spf_local_policy =
spf_mark_only = no
spf_received_header = yes
spf_reject_code = 550
spf_reject_dsn = 5.7.1

Pronto, agora o seu Postfix já possui checagem de SPF embutida no código e você pode distribuir o pacote para outros servidores.

3 Responses to “Postfix com SPF”

  1. Fausto Says:

    Muito bom o tutorial, simples e objetivo.

  2. Bogdan Plevit Says:

    I have the same setup with Debian 4.0 Etch. The rebuild of the package is succeseful, but when spf is activated i get this error message
    ” warning: process /usr/lib/postfix/smtpd pid 16874 killed by signal 11″ when i receive a mail. With postfix installed from repository everything works.

    How could I contact you?

  3. admin Says:

    By email junixbr :at: gmail :dot: com

Leave a Reply