Cuando un servidor de correo recién montado envía mensajes que acaban en la carpeta de spam, casi nunca es por el texto del mensaje: la causa suele ser técnica y comprobable, como una IP en una lista negra, un DNS inverso que no coincide, un saludo SMTP incorrecto o la falta de SPF, DKIM o DMARC. En este tutorial revisarás y corregirás cada uno de esos puntos en un servidor Postfix con Ubuntu 24.04, medirás el resultado con un correo de prueba y verás cómo mantener la reputación una vez que el correo llegue a la bandeja de entrada.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS y Postfix enviando correo, por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo.
  • Un dominio con acceso a su zona DNS y un nombre para el servidor de correo, por ejemplo mail.your_domain, con un registro A que apunte a la IP del servidor (your_server_ip).
  • Acceso al panel de tu proveedor para configurar el DNS inverso (PTR) de la IP.
  • Salida por el puerto 25 abierta. En CubePath, como en la mayoría de proveedores, el puerto 25 de salida está cerrado por defecto y se abre mediante una solicitud al soporte.

Sustituye your_domain, mail.your_domain y your_server_ip por tus valores en todos los comandos.

Paso 1: Medir el punto de partida

Antes de cambiar nada, averigua qué ven los receptores. Entra en mail-tester.com, copia la dirección que te muestra y envíale un correo desde el servidor. Instala primero un cliente de línea de comandos si no lo tienes:

sudo apt install mailutils

Envía el mensaje con un asunto y un cuerpo realistas (un correo vacío o con el texto "test" resta puntos por sí mismo):

echo "Hola, este es un mensaje de prueba de configuración del servidor de correo." | mail -s "Prueba de entregabilidad" -a "From: user@your_domain" [email protected]

Sustituye [email protected] por la dirección que te ha dado la web.

Vuelve a la web y pulsa el botón para ver la puntuación. El informe desglosa los problemas que vas a corregir en los pasos siguientes. Haz también una prueba con una cuenta de Gmail: abre el mensaje, pulsa los tres puntos, elige Mostrar original y anota los resultados de SPF, DKIM y DMARC.

Paso 2: Comprobar que la IP no está en listas negras

Si la IP del servidor aparece en una lista negra, nada de lo demás servirá. Las listas DNSBL se consultan con una petición DNS de la IP invertida. Para 203.0.113.10 la consulta a Spamhaus sería:

dig +short 10.113.0.203.zen.spamhaus.org

Si no devuelve nada, la IP no está listada. Una respuesta 127.0.0.x significa que sí lo está. Si obtienes 127.255.255.254, tu consulta ha pasado por un resolvedor público (como 8.8.8.8), que Spamhaus no atiende: en ese caso usa su web de comprobación, check.spamhaus.org, o una herramienta que revise varias listas a la vez, como la de MXToolbox.

Si la IP está listada:

  1. Averigua el motivo en la web de la lista. Si el servidor ha enviado spam (una cuenta comprometida, un formulario web abusado), corrígelo antes de pedir nada: revisa la cola con mailq y el registro con sudo grep "status=sent" /var/log/mail.log | tail -n 50.
  2. Solicita la baja desde la web de la propia lista. La mayoría la tramita en horas si el problema está resuelto.
  3. Si es una lista que incluye rangos enteros de proveedores (listas de IP dinámicas o de "reputación de rango"), contacta con el soporte de tu proveedor.

Paso 3: Alinear nombre de host, HELO y DNS inverso

Los receptores comprueban que tres valores coinciden: el nombre que Postfix anuncia en el saludo (HELO/EHLO), el registro A de ese nombre y el registro PTR de la IP. Gmail rechaza directamente los mensajes de IPs sin PTR con el error 550-5.7.25.

Fija el nombre de host del sistema:

sudo hostnamectl set-hostname mail.your_domain

Configura Postfix para anunciar ese nombre:

sudo postconf -e 'myhostname = mail.your_domain'
sudo systemctl reload postfix

A continuación configura el registro PTR de la IP para que apunte a mail.your_domain. En CubePath se hace desde el panel, editando el DNS inverso de la dirección IP del servidor.

Comprueba los tres valores:

postconf myhostname
dig +short A mail.your_domain
dig +short -x your_server_ip
myhostname = mail.your_domain
203.0.113.10
mail.your_domain.

El nombre de postconf, el resultado del PTR y el nombre que resuelve a tu IP deben ser el mismo.

Si el servidor tiene IPv6

Si el servidor tiene una dirección IPv6, Postfix la usará para entregar a Gmail y a otros proveedores que la admiten, y esa IPv6 necesita también su PTR, su registro AAAA y su entrada en SPF. Si no vas a configurarla, indica a Postfix que prefiera IPv4:

sudo postconf -e 'smtp_address_preference = ipv4'
sudo systemctl reload postfix

Paso 4: Publicar SPF, DKIM y DMARC

Estos tres registros demuestran que el servidor está autorizado a enviar con tu dominio. Desde 2024, Gmail y Yahoo exigen SPF o DKIM a todos los remitentes, y SPF, DKIM y DMARC a quienes envían grandes volúmenes.

Como mínimo, publica un registro TXT en la raíz del dominio con el SPF:

v=spf1 ip4:your_server_ip -all

Y un registro TXT en _dmarc.your_domain con una política inicial de monitorización:

v=DMARC1; p=none; rua=mailto:dmarc@your_domain

Para DKIM, instala y configura OpenDKIM en el servidor y publica su clave pública en DNS; consulta la guía de DKIM de esta misma sección. La guía de SPF y DMARC explica el despliegue completo hasta p=reject.

Comprueba que los registros están publicados:

dig +short TXT your_domain
dig +short TXT _dmarc.your_domain

Después envía un correo a Gmail y confirma en Mostrar original que aparecen SPF: PASS, DKIM: 'PASS' y DMARC: 'PASS'.

Paso 5: Cifrar las conexiones SMTP con TLS

Gmail marca con un candado rojo los mensajes recibidos sin cifrar, y algunos filtros penalizan a los remitentes que no usan TLS. Postfix en Ubuntu viene con un certificado autofirmado; sustitúyelo por uno de Let's Encrypt.

Instala Certbot:

sudo apt install certbot

Solicita el certificado. El modo --standalone levanta un servidor web temporal, así que el puerto 80 tiene que estar libre y abierto en el firewall:

sudo ufw allow 80/tcp
sudo certbot certonly --standalone -d mail.your_domain --deploy-hook "systemctl reload postfix"

El --deploy-hook se guarda en la configuración de renovación, de modo que Postfix recargará el certificado cada vez que se renueve.

Indica a Postfix dónde está el certificado y activa TLS oportunista en ambos sentidos:

sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.your_domain/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.your_domain/privkey.pem'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_security_level = may'
sudo systemctl reload postfix

Comprueba que el servidor ofrece el certificado correcto:

openssl s_client -starttls smtp -connect mail.your_domain:25 -servername mail.your_domain </dev/null 2>/dev/null | openssl x509 -noout -subject -enddate
subject=CN = mail.your_domain
notAfter=Dec 24 10:15:02 2026 GMT

Para confirmar que el correo saliente viaja cifrado, envía un mensaje a Gmail y busca en el registro una línea de conexión TLS:

sudo grep "TLS connection established to" /var/log/mail.log | tail -n 3

Paso 6: Cuidar el contenido y las listas

Con la parte técnica resuelta, el contenido y el comportamiento de los destinatarios pasan a pesar más:

  • Envía como una persona o un servicio identificable: un From: con nombre real, un asunto que describa el contenido y una versión en texto plano además del HTML.
  • No acortes enlaces con servicios públicos ni enlaces a dominios con mala reputación. Los enlaces deben apuntar a tu dominio o a dominios conocidos.
  • Evita las imágenes sin texto: un correo que es una sola imagen es un patrón típico de spam.
  • En envíos masivos (newsletters, notificaciones a muchos usuarios), incluye las cabeceras de baja con un clic que exigen Gmail y Yahoo, y procesa las bajas en menos de dos días:
List-Unsubscribe: <https://your_domain/unsubscribe?id=abc123>, <mailto:unsubscribe@your_domain?subject=abc123>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
  • Envía solo a quien lo ha pedido y elimina de tus listas las direcciones que rebotan. Una tasa de quejas por spam por encima del 0,3 % en Gmail basta para que tus mensajes empiecen a filtrarse.

Paso 7: Calentar la IP y vigilar la reputación

Una IP nueva no tiene reputación. Si empiezas enviando miles de mensajes el primer día, los grandes proveedores la limitarán o la bloquearán. Empieza con volúmenes pequeños a destinatarios que abren tus correos y aumenta el envío de forma gradual durante varias semanas.

Registra tu dominio y tu IP en las herramientas de los grandes proveedores para ver cómo te valoran:

  • Google Postmaster Tools: reputación del dominio y de la IP, tasa de spam y resultados de autenticación en Gmail. Tienes que verificar el dominio con un registro TXT.
  • Microsoft SNDS: datos de la IP en Outlook.com y Hotmail, incluidas las trampas de spam en las que caigas.

Revisa también el registro de Postfix de vez en cuando en busca de rechazos:

sudo grep -E "status=(bounced|deferred)" /var/log/mail.log | tail -n 20

Cuando hayas aplicado todos los pasos, repite la prueba del paso 1. Una puntuación de 9/10 o más en mail-tester indica que la parte técnica está bien.

Solución de problemas

Gmail rechaza con 550-5.7.25: la IP desde la que envías no tiene PTR. Si el servidor tiene IPv6, comprueba cuál se ha usado en el registro y configura su PTR o aplica smtp_address_preference = ipv4.

Gmail rechaza con 550-5.7.26 o 550-5.7.27: el mensaje no pasa la autenticación (SPF, DKIM o DMARC). Revisa Mostrar original en un mensaje que sí haya llegado y corrige el mecanismo que falle.

Outlook rechaza con 550 5.7.1 y el código S3150: la IP está en la lista de bloqueo de Microsoft. Solicita la baja en el portal de remitentes de Microsoft (sender.office.com) después de revisar SNDS.

Los mensajes salen en status=deferred con Connection timed out hacia el puerto 25: la salida por el puerto 25 está bloqueada. Compruébalo con nc -vz gmail-smtp-in.l.google.com 25 y, si no conecta, solicita la apertura a tu proveedor.

Todo pasa pero Gmail sigue enviando a spam: la IP o el dominio son nuevos o tienen reputación baja. Revisa Postmaster Tools, reduce el volumen, pide a algunos destinatarios que marquen el correo como "No es spam" y sigue enviando correo que la gente abra.

Conclusión

Has comprobado que la IP no está en listas negras, has alineado nombre de host, HELO y DNS inverso, has publicado SPF, DKIM y DMARC, has cifrado las conexiones con un certificado de Let's Encrypt y has medido el resultado con correos de prueba. Con esa base técnica, la entregabilidad pasa a depender de enviar correo que los destinatarios quieren recibir.

Como siguientes pasos puedes:

  • Endurecer tu política DMARC hasta p=reject a partir de los informes agregados.
  • Instalar SpamAssassin para filtrar también el correo entrante.
  • Automatizar una alerta que revise a diario si tu IP aparece en las listas negras principales.