Validar IP para enviar emails de un dominio usando registros SPF

cPanelVestaCP

Si tienes las direcciones de email asociadas a tu propio dominio, entonces es probable que tengas problemas el enviar emails y que éstos no sean marcados como SPAM si no has tomado ninguna precaución. Es muy importante designar tu dirección IP como remitente válido a la hora de enviar emails con tu nombre de dominio.

Comprobando si tu IP es válida para enviar emails

Si nuestro nombre de dominio es ejemplo.com, lo que debemos hacer es acceder a nuestra cuenta de email y enviar un email a otra dirección que tengamos como hotmail o gmail, que es la que utilizaremos en este ejemplo.

Una vez hayamos enviado el email deberemos ver el contenido completo del email para poder ver las cabeceras. Dependiendo de si utilizamos hotmail o gmail, puede aparecer como «ver cabeceras«, «ver headers«, «ver mensaje completo» o «ver mensaje original«.

Veremos algo así como:

X-Received: by 12.123.25.4 with SMTP id
xsdr315618634qab.77.13824sd370255; 
Tue, 05 Jul 2014 12:08:20 -0700 (PDT) Return-Path: yo@ejemplo.com
Received: from my3.ejemplo.com (my3.ejemplo.com.
[63.131.70.234])
by mx.google.com with ESMTPS id
k5si103806349qen.50.2013.15.22.11.79.30
for send@domain.com (version=TLSv1 cipher=RC4-SHA bits=128/128);
Tue, 05 Jul 2014 12:08:20 -0700 (PDT)
Received-SPF: softfail (google.com: domain of transitioning yo@ejemplo.com does not designate 63.131.70.234 as permitted sender) client-ip=63.131.70.234;
Authentication-Results: mx.google.com;
spf=softfail (google.com: domain of transitioning yo@ejemplo.com does not designate 63.131.70.234 as permitted sender) smtp.mail=yo@ejemplo.com

Si en lugar de poner Received-SPF: softfail pone received-SPF: pass, no deberemos hacer nada, pero tal y como vemos arriba, hay un error softfail que también podría ser fail.

Corregir ésto es muy sencillo, lo que pasa es que nuestro nombre de dominio no está asociado a nuestra IP para enviar emails válidos; esto es, para enviarlos sin que sean marcados como SPAM. Actualmente es posible enviar emails desde cuaquier ordenador como si estuviese asociado a cualquier nombre de dominio, por lo que se estableció que en los registros DNS debería aparecer algo para validar las direcciones IP que podrán enviar emails con nuestro nombre de dominio.

Prefijos de los registros SPF

Los mecanismos de aceptación o prefijos que podemos utilizar son los siguientes:

  • «+» Pass (Aceptar):
  • «-»  Fail (Rechazar):
  • «~» SoftFail (Modo configuración)
  • «?» Neutral

Es muy importante tener en cuenta que los resultados se evalúan en orden de izquierda a derecha y que si no se especifica ningún prefijo, se usará «+» por defecto. Al principio puede ser algo confuso usar estos registros, así que veamos algunos ejemplos sencillos para comprenderlos:

  • «v=spf1 -all»: Rechazar los correos que procedan de cualquier dominio y de cualquier IP. Se utiliza cuando no se enviará ningún email asociado al dominio que estamos configurando.
  • «v=spf1 +all»: Aceptar email siempre vengan de donde vengan. Utilizado cuando se considera que los registros SPF no son útiles. No recomendado.
  • «v=spf1 +a -all»: Aceptar los emails que procedan del dominio o de la IP especificada en algún registro DNS A del dominio. Rechazar el resto.
  • «v=spf1 a -all»: El prefijo por defecto es +, así que significa lo mismo que el ejemplo anterior.
  • «v=spf1 mx -all»: Aceptar emails que vengan de los dominios indicados en los registros MX del dominio. Rechazar el resto.
  • «v=spf1 +a +mx -all»: Aceptar los emails procedentes de los dominios e IPs especificados tanto de algún registro DNS A del dominio como en los registros MX del dominio. Rechazar el resto.
  • «v=spf1 a mx ~all»: Exactamente lo mismo que el ejemplo anterior, con la diferencia de que los emails que no hayan sido enviados desde los dominios e IPs indicados en los registros A y MX del dominio, se marcarán como SOFT FAILS, indicando que estamos en proceso de configuración.

También podemos indicar valores específicos como dominio, registros e IPs:

  • «v=spf1 a:ejemplo.com -all»: Aceptar emails del servidor asociado al dominio ejemplo.com y rechazar mediante FAIL el resto.
  • «v=spf1 a:mail.ejemplo.com -all»: Aceptar correos del servidor asociado al dominio mail.ejemplo.com y rechazar mediante FAIL el resto. Se entiende que el subdominio mail.ejemplo.com existe.
  • «v=spf1 ip4:63.131.70.234 ~all»: Significa que se aceptarán los emails que vengan de la dirección IP 3.131.70.234. Se marcarán como SOFT FAILS los emails que no cumplan dicha condición.

También podemos indicar rangos de IPs indicando su máscara:

  • «v=spf1 ip4:192.168.0.1/16 -all»: Significa que se aceptarán los emails que vengan de alguna dirección IP entre 192.168.0.1 y 192.168.255.255. Rechazar mediante FAIL el resto de correos.

Configurar rápida de nuestro registro DNS para validar nuestra IP

Accedemos al panel de nuestro registrador de dominio en el que podemos cambiar nuestros registros DNS. Sencillamente tenemos que crear un regisro TXT y añadir nuestra dirección IP, que en nuestro ejemplo es 63.131.70.234. La línea debe ser similar a la siguiente:

TXT ejemplo.com «v=spf1 ip4:63.131.70.234 ~all»

Es importante escribir también las comillas, ya que es muy común olvidarse. La línea anterior sirve para indicar que el servidor con IP 63.131.70.23 podrá enviar emails, pero que si los correos son enviados desde cualquier otra IP, serán marcados con un soft fail, de ahí el «~all» al final de la línea. Un soft fail indica que estamos probando o configurando otros servidores, así que si queremos marcar al resto de IPs definitivamente como fails, el registro deberá ser el siguiente:

TXT ejemplo.com «v=spf1 ip4:63.131.70.234 -all»

Ahora solamente tenemos que esperar a que nuestra configuración DNS se actualice en la red.

La directiva include: Usando servicios externos de email

La directiva include sirve para procesar y aplicar registros SPF de otros dominios. En caso de existir una configuración aplicable al dominio o a la IP desde la que se envía en email, se aplica y, en caso contrario, si no se obtiene ni un PASS, ni un FAIL ni un SOFT FAIL, se continúa procesando el registro actual. Es importante tener en cuenta que si el dominio referenciado no dispone de un registro SPF válido, el resultado será un error. Vamos a ver algún ejemplo para el dominio ejemplo.com cuando enviamos un email desde la IP 1.2.3.4:

TXT ejemplo.com «v=spf1 include:otro.com -all»

Vamos a estudiar el ejemplo anterior. Si el dominio otro.com no dispone de un registro SPF, el resultado será un error. Si dispone de un registro SPF que por ejemplo incluye «v=spf1 a -all», se comprueba si existe la IP 1.2.3.4 en un registro A del dominio otro.com y si es así, se acepta. En cualquier otro caso se rechaza el correo en el registro SPF del dominio otro.com, sin necesidad de rechazarlo de nuevo en el registro SPF original del dominio ejemplo.com.

Vamos a ver ahora el caso más típico que podemos encontrarnos en el que deberemos usar la directiva include. En caso de que utilicemos otro servicio de email adicional para enviar emails como mailjet o Google APPs, nuestra entrada de registro DNS deberá modificarse ligeramente y ser así:

TXT example.com «v=spf1 ip4:63.131.70.234 include:spf.mailjet.com -all»

Con ésto, damos este pequeño tutorial por finalizado.

Espero que s haya sido de ayuda.

Consideraciones adicionales

Algunos proveedores de nombres de dominio también ofrecen la posibilidad de crear específicamente registros SPF, pero no debemos usarlos, puesto que por convenio se ha descartado su uso hace tiempo, siendo únicamente válidos para este propósito los registros TXT.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

2 comentarios en “Validar IP para enviar emails de un dominio usando registros SPF

  1. hola, que tal EduZRO, una consulta, mi registro SPF, es la siguiente «v=spf1 +a +mx +ip4:XX.XX.XX.XX ~all» y mi dominio es medahome.com.pe; he realizado pruebas de enviar desde mi correo (soporte@medahome.com.pe) a un correo de gmail, y siempre llega con el mensaje SPF: SOFTFAIL con la IP YY.YY.YY.YY , aqui denoto que la ip de mi spf, no es la misma ip con que llega en el correo de gmail; agradeceria mucho si me dieras tu ayuda de como hacer mi registro spf correctamente.
    Manejo la consola de cpanel.

    Gracias

    Renzo Orihuela Ruiz

    1. Si la IP desde la que te llega el email (llamémosle IPA) no es la misma que la IP que te llega en el softfail (llamémosle IPB), quiere decir que el email no se ha enviado desde la IPA, sino desde la IPB y por lo tanto, dado que los registros SPF se leen secuencialmente hasta encontrar una coincidencia, pilla la opción por defecto, que es ~all. Asegúrate que cual es la IP de tu servidor de correo y agrega esa misma IP en el registro.

Deja una respuesta

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”