HELPER VPS

Enviar correo desde un VPS: conecta un servicio de envío SMTP por los puertos 587 y 465

Todos los servidores de HELPER VPS tienen cerrado el puerto 25 de salida para evitar el spam, y gracias a ello la reputación de IP de todos los servidores de la misma red se mantiene limpia. Si envías el correo por los puertos 587 o 465 de un servicio de envío, llega mejor a la bandeja de entrada.

¿Por qué enviar por los puertos 587 y 465?

El puerto 25 es el que usan los servidores de correo para pasarse mensajes entre sí. Si envías directamente desde el servidor al servidor de correo del destinatario, tienes que ocuparte tú de la reputación de la IP, el DNS inverso y el control del volumen de envío, y el correo enviado desde la IP de un servidor nuevo acaba fácilmente en spam.

Los puertos 587 y 465 son puertos de envío por los que un usuario autenticado entrega su correo. Si entras en un servicio de envío con usuario y contraseña y le entregas el correo, un servidor de envío con la reputación gestionada lo entrega por ti. Es la forma más segura de que correos como confirmaciones de registro, recuperación de contraseña o avisos de pedidos lleguen bien a la bandeja de entrada.

  • Puerto 587: se conecta en texto plano y empieza el cifrado con STARTTLS. Es el puerto que usan por defecto la mayoría de servicios y programas.
  • Puerto 465: se conecta cifrado con TLS desde el principio. En las pantallas de configuración suele aparecer como SSL o SSL/TLS.

Elegir un servicio de envío

Hay dos grandes tipos de servicios de envío. Uno son los servicios de correo transaccional, que envían en volumen los avisos de webs y apps, y el otro es la función SMTP de la cuenta de correo de empresa o personal que ya usas. En ambos casos, con los cuatro datos de abajo ya tienes todo para configurar.

  • Dirección del servidor SMTP: por ejemplo smtp.example.com
  • Puerto: 587 (STARTTLS) o 465 (SSL/TLS)
  • Nombre de usuario: el usuario o la dirección de correo que te da el servicio
  • Contraseña: la contraseña SMTP propia del servicio o una clave API

Para tiendas online o servicios con mucho volumen de envío, un servicio de correo transaccional es cómodo porque gestiona registros de envío, rebotes y bajas. Para unos pocos avisos, basta con el SMTP de una cuenta de correo.

Comprobar la conexión SMTP desde el servidor

Antes de configurar, comprueba que la conexión desde el servidor hasta el servicio de envío funciona. Los comandos de abajo solo comprueban la conexión y no envían correo.

Terminal
nc -vz smtp.example.com 587
openssl s_client -starttls smtp -connect smtp.example.com:587 -crlf -quiet
openssl s_client -connect smtp.example.com:465 -crlf -quiet

Si la primera línea muestra succeeded u open y el comando openssl muestra un saludo del servidor que empieza por 220, está listo. Sal con Ctrl+C. Si no tienes el comando nc, instálalo con apt install -y netcat-openbsd en Ubuntu y Debian, y con dnf install -y nmap-ncat en AlmaLinux.

Conectar Postfix al servicio de envío

Para reunir en un solo punto el correo que envían los programas del servidor, los avisos de cron y el comando mail, configura Postfix como relay que lo pasa al servicio de envío. Todo el correo del servidor sale autenticándose por el puerto 587.

Paso 1. Instalar

Ubuntu, Debian
apt install -y postfix libsasl2-modules mailutils

Si durante la instalación pregunta el tipo de configuración de correo, elige Internet Site y pon tu dominio como nombre de correo. En AlmaLinux 10, instálalo con dnf install -y postfix cyrus-sasl-plain s-nail y actívalo con systemctl enable --now postfix.

Paso 2. Configurar el relay

Terminal
postconf -e 'relayhost = [smtp.example.com]:587'
postconf -e 'smtp_sasl_auth_enable = yes'
postconf -e 'smtp_sasl_password_maps = texthash:/etc/postfix/sasl_passwd'
postconf -e 'smtp_sasl_security_options = noanonymous'
postconf -e 'smtp_tls_security_level = encrypt'
postconf -e 'inet_interfaces = loopback-only'

inet_interfaces = loopback-only hace que solo acepte correo enviado desde dentro del servidor, para que nadie de fuera pueda usarlo como relay de correo.

Paso 3. Guardar los datos de acceso

Terminal
echo '[smtp.example.com]:587 SMTP_USER:SMTP_PASSWORD' > /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
systemctl restart postfix

Si tu servicio usa el puerto 465, cambia a 465 el puerto en relayhost y sasl_passwd y añade una línea más: postconf -e 'smtp_tls_wrappermode = yes'.

Paso 4. Envío de prueba y revisión del log

Terminal
echo "VPS mail test" | mail -s "Test from VPS" you@example.com
postqueue -p
journalctl -t postfix/smtp -n 20

Si en el log aparece status=sent, el servicio de envío ha recibido el correo. postqueue -p muestra la lista de correos que aún no han salido. Si corregiste los datos de acceso, ejecuta systemctl restart postfix y después vuelve a enviar con postqueue -f.

Configurar SMTP en WordPress y en apps

La mayoría de webs y apps tienen campos de configuración SMTP, así que puedes conectarlas directamente al servicio de envío sin tener Postfix en el servidor. En WordPress, instala un plugin SMTP e introduce los valores de abajo, y los correos de registro y recuperación de contraseña saldrán por ese servicio.

  • Host SMTP: la dirección del servicio de envío
  • Cifrado: TLS (STARTTLS) con el 587, SSL con el 465
  • Puerto: 587 o 465
  • Autenticación: activada, con usuario y contraseña
  • Dirección del remitente: una dirección de tu dominio (por ejemplo, no-reply@example.com)

Las apps Node.js, PHP y Python también configuran su biblioteca de correo con los mismos valores. Lo limpio es no escribir la contraseña en el código y ponerla en variables de entorno o en un archivo de configuración. La instalación de WordPress está en la guía de instalación de WordPress.

Añadir SPF, DKIM y DMARC al DNS del dominio

El servidor de correo receptor comprueba con registros DNS si el correo viene de verdad de un lugar autorizado por tu dominio. Con estos tres registros, la tasa de llegada a la bandeja de entrada sube mucho.

  • SPF: lista de servidores que pueden enviar correo de tu dominio. Pon en un registro TXT el valor include que te da el servicio de envío.
  • DKIM: firma electrónica que se añade al correo. Añade tal cual el registro TXT o CNAME que te genera el servicio de envío en su pantalla.
  • DMARC: define qué hacer con los correos que no superan SPF y DKIM. Empieza, como abajo, con una configuración que solo envía informes.
DNS TXT
_dmarc.example.com  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

Tras unas semanas revisando informes y comprobando que todos los correos pasan, sube a p=quarantine y después a p=reject para impedir la suplantación del dominio.

Recibir correo y siguientes pasos

Para recibir correo en tu dominio, añade al dominio los registros MX de un servicio de hosting de correo. Si el hosting de correo se encarga de recibir y el servicio de envío de los avisos salientes, el servidor se centra solo en la web y las apps.

Enviando a través de un servicio de envío, aunque muevas o recrees el servidor, basta con trasladar unas líneas de configuración para que todo siga igual. Aunque cambie la IP del servidor, la reputación de envío se queda en el servicio, así que la llegada del correo no se resiente ni al mover tu web a otra región.

Los demás puertos ábrelos libremente según tu servicio. Cómo abrir solo los puertos que usas está en la guía básica del firewall, y las normas de uso del servidor en la política de uso.

Guías relacionadas

Configuraciones que conviene hacer a continuación de esta guía.

Ver todas las guías