En este articulo voy a explicar como integrar la comprobación SPF en nuestro servidor de correo Postfix.

Hablemos un poco sobre el estandard SPFv1. SPF permite al propietario de un dominio establecer su política de correo electrónico en dos partes. Primero el propietario del dominio establece de manera publica cuales son sus servidores de correo permitidos para enviar correo de su dominio. Esto es consultable a través de los dns, buscando un registro txt o spf que determina la política del dominio. De esta manera cualquier servidor de correo puede comprobar si el origen de un correo recibido es legitimo o no.

Ejemplo de registro dns: v=spf1 mx a:mail1.linux4dummies.es -all

Con esta linea publicada en el DNS estamos diciendo lo siguiente:
v=spf1 – La versión de spf que estamos utilizando
mx – Con este paramento especificamos que los registros dns de tipo MX son los autorizados a enviar correos.
a: – Con este parámetro recalcamos el host que puede enviar correos electrónicos procedentes de nuestro dominio
-all – Con este valor indicamos que cualquier correo electrónico que no provenga de cualquiera de los registros anteriores, debe ser denegado automáticamente.

La segunda parte consiste en comprobar a nivel de la transacción SMTP todos estos parametros, comprobando el helo, client_address, etc.. Para posteriormente denegar o permitir el correo recibido.

Instalación:

La instalación la voy a realizar en el sistema operativo CentOS 5.8 x64. Primero vamos a añadir un repositorio adicional para instalar las librerias que requiere.

wget http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm
yum update

Una vez instalado el repositorio tenemos que instalar las dependencias de perl que necesita para funcionar. Si estáis haciendo la instalación en otra distribución diferente y no tenéis estos paquetes deberéis instalaros a través de CPAN las siguientes librerías. Mail::SPF y NetAddr::IP

yum install perl-Mail-SPF.noarch perl-NetAddr-IP.x86_64 perl-Net-DNS.x86_64 perl-Net-IP.noarch perl-Net-SSLeay.x86_64 perl-Net-Server.noarch

Ahora vamos a descargarnos la implementación realizada en perl. La pagina del proyecto es: https://launchpad.net/postfix-policyd-spf-perl/

cd /tmp
wget https://launchpad.net/postfix-policyd-spf-perl/trunk/release2.010/+download/postfix-policyd-spf-perl-2.010.tar.gz
tar xvzf postfix-policyd-spf-perl-2.010.tar.gz
cd postfix-policyd-spf-perl-2.010
cp postfix-policyd-spf-perl /usr/lib/postfix/policyd-spf-perl

Ahora debemos editar el fichero master.cf para añadir las siguientes lineas:

policy  unix  -       n       n       -       -       spawn
        user=nobody argv=/usr/bin/perl /usr/lib/postfix/policyd-spf-perl

El siguiente fichero que debemos editar es /etc/postfix/main.cf y debemos añadir la linea que comprobara el SPF justo después de reject_unauth_destination.

smtpd_recipient_restrictions =
...
reject_unauth_destination,
...
check_policy_service = unix:private/policy,
...

Reiniciamos Postfix para aplicar los cambios y listo ya tendremos la comprobación SPF activada en nuestro MTA.

service postfix restart

Existen otras implementaciones del servicio SPF, basadas en Python, con amavisd y otros milter diferentes, este quizás sea de los mas sencillos de implementar dado que no requiere de configuración. En futuros artículos tratare de explicar el resto de implementaciones mas utilizadas.

Enlaces:
Postfix: http://www.postfix.org
SPF: http://www.openspf.org/
Policy-spf-perl: https://launchpad.net/postfix-policyd-spf-perl/

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="">

*