Sender Policy Framework (SPF, Infraestructura de Políticas de Envío) es un sistema de validación de correo electrónico diseñado para detectar el spoofing mediante la verificación de la dirección IP del servidor remitente.
Añadiendo un nuevo registro en el DNS, SPF permite al titular de un dominio de Internet especificar en sus registros DNS qué equipos están autorizados a enviar correo con direcciones de ese dominio. Los MTA receptores que usen SPF podrán así verificar, consultando el registro DNS, si un determinado servidor de correo está autorizado como servidor de correo para ese dominio, rechazándolo si no es así, dificultando de ese modo la suplantación y el phishing y haciéndolo por tanto menos atractivo para los spammers. También puede evitar que los spammers usen un falso Return-Path
.
En el registro de zona de nuestro dominio añadimos la siguiente línea:
example.com. 3600 IN TXT "v=spf1 mx ip4:1.2.3.4 -all"
Y recargamos el servidor DNS:
# rndc reload
Ahora otros MTA podrán verificar si el correo que reciben con nuestro dominio procede realmente de nuestro servidor de correo.
Para soportar la comprobación del registro SPF en los mensajes que recibe nuestro MTA, debemos realizar algunos cambios en el MTA (Postfix):
1. Instalamos un plugin externo para que Postfix pueda chequear el registro SPF (hay varios paquetes disponibles, en función de la distribución, este ejemplo usa OpenBSD):
# pkg_add -v py-policyd-spf
2. Añadimos las siguientes líneas a /etc/postfix/master.cf
:
/etc/postfix/master.cf: policyd-spf unix - n n - 0 spawn user=nobody argv=/usr/local/bin/python /usr/local/bin/policyd-spf
3. Y en la sección smtpd_recipient_restrictions
de /etc/postfix/main.cf
añadimos:
smtpd_recipient_restrictions = permit_mynetworks, [...] reject_unauth_destination, check_policy_service unix:private/policyd-spf
Importa el orden, y que la directiva de chequeo de SPF no anteceda a reject_unauth_destination
.
4. Reiniciamos Postfix:
postfix reload
Ahora tendremos un soporte básico de SPF, no adoptaremos ninguna medida, simplemente chequearemos si existe registro SPF y si cumple el requisito. Nos aparecerá una nueva línea en la cabecera de los mensajes recibidos:
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.85.214.54; helo=mail-bk0-f54.google.com; envelope-from=foo@gmail.com; receiver=bar@example.com
Cuando estemos seguros de que todo funciona, podremos realizar una configuración de Postfix y SPF más compleja, estableciendo políticas permisivas o restrictivas de cada mensaje, en función de si obtiene o no el SPF Pass
.