--- title: "Cómo diagnosticar un servidor de correo Postfix y Dovecot" description: "Comprueba paso a paso un servidor Postfix y Dovecot en Ubuntu 24.04: servicios, DNS, puerto 25, SMTP, autenticación, IMAP, cola y registros para aislar fallos." category: "Servidor de Correo" language: es source: https://cubepath.com/es/docs/servidor-de-correo/prueba-y-solucion-de-problemas-de-servidor-de-correo updated: 2026-09-25 --- # Cómo diagnosticar un servidor de correo Postfix y Dovecot Cuando un servidor de correo falla, el síntoma ("no llegan los correos", "Outlook no conecta") rara vez apunta directamente a la causa. La forma más rápida de encontrarla es recorrer el camino del mensaje por orden: servicios, DNS, red, SMTP, autenticación, IMAP y, por último, la cola y los registros. En este tutorial aprenderás a probar cada una de esas piezas en un servidor con Postfix y Dovecot sobre Ubuntu 24.04, con comandos que muestran exactamente dónde se rompe la cadena y qué significa cada error habitual. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS, Postfix y Dovecot instalados, por ejemplo un VPS de CubePath, con el nombre `mail.your_domain` resolviendo a su IP. - Un usuario no root con privilegios `sudo`. - Una cuenta de correo en el servidor para las pruebas, en los ejemplos `user@your_domain`. - Un segundo equipo fuera del servidor (tu ordenador u otro servidor) para las pruebas desde el exterior. Instala las herramientas de diagnóstico en el servidor y, si puedes, también en el equipo externo: ```bash sudo apt install swaks dnsutils netcat-openbsd ``` `swaks` envía mensajes por SMTP mostrando toda la conversación, `dnsutils` aporta `dig` y `netcat-openbsd` permite comprobar puertos. ## Cómo viaja un mensaje Tener el recorrido claro te dice qué probar según el síntoma: - **Envío desde un cliente**: el cliente se autentica en Postfix por el puerto 587 (o 465). Postfix valida la contraseña contra Dovecot, pone el mensaje en la cola y lo entrega al servidor MX del destinatario por el puerto 25. - **Recepción**: el servidor del remitente busca el registro MX de `your_domain`, se conecta al puerto 25 de tu servidor y Postfix entrega el mensaje en el buzón, directamente o a través de Dovecot. - **Lectura**: el cliente se conecta a Dovecot por IMAP (puerto 993) y descarga los mensajes. Si no se envía nada, céntrate en los pasos 3, 5 y 7. Si no se recibe, en los pasos 2, 4 y 7. Si el cliente no conecta, en los pasos 5 y 6. ## Paso 1: Comprobar servicios, puertos y configuración Empieza por lo básico: que los servicios estén en marcha y escuchando en los puertos esperados. ```bash systemctl is-active postfix dovecot ``` ```output active active ``` Comprueba qué puertos están abiertos: ```bash sudo ss -tlnp | grep -E ':(25|465|587|993)\s' ``` ```output LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=1203,fd=13)) LISTEN 0 100 0.0.0.0:587 0.0.0.0:* users:(("master",pid=1203,fd=17)) LISTEN 0 100 0.0.0.0:993 0.0.0.0:* users:(("dovecot",pid=987,fd=38)) ``` `master` es el proceso principal de Postfix. Si falta el 587, el servicio `submission` no está activado en `/etc/postfix/master.cf`. Valida la configuración de ambos servicios. `postfix check` no imprime nada si todo es correcto, y `doveconf -n` muestra la configuración efectiva de Dovecot o el error de sintaxis que impide cargarla: ```bash sudo postfix check sudo doveconf -n | head -n 20 ``` Por último, confirma que el firewall permite los puertos: ```bash sudo ufw status ``` Si faltan reglas, añádelas: ```bash sudo ufw allow 25,587,993/tcp ``` ## Paso 2: Revisar los registros DNS Un error de DNS impide recibir correo o hace que el enviado se rechace. Comprueba cada registro consultando a un resolvedor público, que es lo que ven los demás servidores: ```bash dig +short MX your_domain @1.1.1.1 dig +short A mail.your_domain @1.1.1.1 dig +short -x your_server_ip @1.1.1.1 ``` ```output 10 mail.your_domain. 203.0.113.10 mail.your_domain. ``` El MX debe apuntar a un nombre (no a una IP), ese nombre debe resolver a la IP del servidor y el PTR de la IP debe devolver el mismo nombre. Comprueba también los registros de autenticación. Sustituye `mail` por el selector DKIM que uses: ```bash dig +short TXT your_domain @1.1.1.1 dig +short TXT mail._domainkey.your_domain @1.1.1.1 dig +short TXT _dmarc.your_domain @1.1.1.1 ``` Debes ver un registro que empiece por `v=spf1`, uno con `v=DKIM1; k=rsa; p=...` y uno con `v=DMARC1`. Si alguno no aparece, el correo saliente tiene muchas posibilidades de acabar en spam o de ser rechazado. ## Paso 3: Comprobar la salida por el puerto 25 Para entregar correo a otros dominios, el servidor necesita conectarse al puerto 25 de los servidores de destino. Muchos proveedores lo bloquean por defecto. Prueba una conexión al servidor de Gmail: ```bash nc -vz -w 5 gmail-smtp-in.l.google.com 25 ``` ```output Connection to gmail-smtp-in.l.google.com (142.250.153.27) 25 port [tcp/smtp] succeeded! ``` Si el comando termina con `timed out`, la salida por el puerto 25 está bloqueada en la red, no en tu configuración. 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. Mientras tanto, Postfix dejará los mensajes en la cola con el estado `deferred`. ## Paso 4: Probar la recepción desde el exterior Desde el equipo externo, envía un mensaje a tu buzón conectando directamente con tu servidor, igual que haría cualquier servidor de correo de Internet: ```bash swaks --to user@your_domain --server mail.your_domain --port 25 ``` `swaks` muestra la conversación completa: `->` son los comandos enviados y `<-` las respuestas del servidor. Las líneas importantes son el saludo inicial y la aceptación del mensaje: ```output <- 220 mail.your_domain ESMTP Postfix (Ubuntu) ... <- 250 2.0.0 Ok: queued as 4F2A1C0B7E ``` Si la conexión no se establece, el problema está antes de Postfix: el firewall, el puerto 25 cerrado a la entrada o el registro A. Si el servidor responde con un código `4xx` o `5xx`, el texto de la respuesta explica el motivo; los más habituales están en el paso 8. > Nota: muchas redes domésticas y de oficina bloquean el puerto 25 de salida. Si la prueba falla desde tu ordenador, repítela desde otro servidor antes de sacar conclusiones. ## Paso 5: Probar el envío autenticado Los clientes de correo envían por el puerto 587 con STARTTLS y usuario y contraseña. Reproduce exactamente eso desde el equipo externo; `swaks` te pedirá la contraseña: ```bash swaks --to otra.cuenta@example.com --from user@your_domain --server mail.your_domain --port 587 --tls --auth LOGIN --auth-user user@your_domain ``` ```output <- 220 2.0.0 Ready to start TLS ... <- 235 2.7.0 Authentication successful ... <- 250 2.0.0 Ok: queued as 7C3D9E0A21 ``` Si falla la autenticación (`535 5.7.8 Error: authentication failed`), comprueba la contraseña directamente contra Dovecot en el servidor. Así sabrás si el problema está en las credenciales o en la conexión entre Postfix y Dovecot: ```bash sudo doveadm auth test user@your_domain ``` ```output Password: passdb: user@your_domain auth succeeded extra fields: user=user@your_domain ``` Si `doveadm` acepta la contraseña pero `swaks` no, Postfix no está hablando con el socket de autenticación de Dovecot (revisa `smtpd_sasl_type = dovecot` y `smtpd_sasl_path = private/auth` con `postconf smtpd_sasl_type smtpd_sasl_path`). Comprueba también el certificado que presenta el puerto 587 y su fecha de caducidad: ```bash openssl s_client -starttls smtp -connect mail.your_domain:587 -servername mail.your_domain /dev/null | openssl x509 -noout -subject -enddate ``` ```output subject=CN = mail.your_domain notAfter=Dec 24 10:15:02 2026 GMT ``` Un certificado caducado o emitido para otro nombre hace que la mayoría de clientes se nieguen a enviar. ## Paso 6: Probar el acceso IMAP Conéctate a Dovecot por IMAP sobre TLS e inicia sesión a mano. Los comandos IMAP llevan una etiqueta delante (`a`, `b`, `c`): ```bash openssl s_client -connect mail.your_domain:993 -servername mail.your_domain -quiet ``` Cuando veas `* OK [CAPABILITY ...] Dovecot ready.`, escribe estos comandos uno a uno, sustituyendo la contraseña: ```text a LOGIN user@your_domain your_password b SELECT INBOX c LOGOUT ``` Las respuestas esperadas son `a OK ... Logged in` y, tras `SELECT`, el número de mensajes del buzón (`* 12 EXISTS`). Si `LOGIN` devuelve `a NO [AUTHENTICATIONFAILED]`, vuelve a `doveadm auth test` del paso anterior. Si el mensaje de prueba del paso 4 no aparece en `EXISTS`, se ha quedado entre Postfix y Dovecot: revisa los registros del paso 8. ## Paso 7: Inspeccionar la cola de correo Los mensajes que Postfix no ha podido entregar se quedan en la cola y se reintentan durante cinco días por defecto. Muestra su contenido: ```bash sudo postqueue -p ``` ```output -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- 9B8E7F0D11 1432 Fri Sep 25 10:51:03 user@your_domain (connect to gmail-smtp-in.l.google.com[142.250.153.27]:25: Connection timed out) destinatario@gmail.com -- 2 Kbytes in 1 Request. ``` La línea entre paréntesis es el motivo del último intento fallido, y suele bastar para saber qué pasa. Estos son los comandos para trabajar con la cola; sustituye `9B8E7F0D11` por el identificador del mensaje: | Comando | Acción | |---|---| | `sudo postcat -q 9B8E7F0D11` | Muestra el mensaje completo con sus cabeceras. | | `sudo postqueue -i 9B8E7F0D11` | Reintenta la entrega de ese mensaje ahora. | | `sudo postqueue -f` | Reintenta todos los mensajes de la cola. | | `sudo postsuper -d 9B8E7F0D11` | Elimina ese mensaje. | | `sudo postsuper -d ALL deferred` | Elimina todos los mensajes aplazados. | > Advertencia: si la cola tiene cientos o miles de mensajes que tú no has enviado, una cuenta o un formulario web está enviando spam desde tu servidor. Antes de vaciarla, averigua el origen con `postcat` y cambia la contraseña afectada; si no, tu IP acabará en listas negras. ## Paso 8: Leer los registros En Ubuntu 24.04, Postfix y Dovecot escriben en `/var/log/mail.log`. Sigue el registro en directo mientras repites una prueba: ```bash sudo tail -f /var/log/mail.log ``` Cada mensaje tiene un identificador de cola (como `4F2A1C0B7E` en la salida de `swaks`). Buscarlo reúne todas las líneas de ese mensaje, desde que entra hasta que se entrega o se rechaza: ```bash sudo grep 4F2A1C0B7E /var/log/mail.log ``` Para localizar rápidamente los problemas recientes, filtra por entregas fallidas y rechazos: ```bash sudo grep -E "status=(deferred|bounced)|reject:" /var/log/mail.log | tail -n 20 ``` Estos son los mensajes más frecuentes y lo que significan: | Mensaje en el registro | Causa y solución | |---|---| | `connect to ...:25: Connection timed out` | Salida por el puerto 25 bloqueada. Ver paso 3. | | `Relay access denied` | El cliente envía a un dominio externo sin autenticarse, o el dominio del destinatario no está configurado como local en Postfix. | | `SASL LOGIN authentication failed` | Usuario o contraseña incorrectos. Comprueba con `doveadm auth test`. | | `SASL: Connect to private/auth failed: No such file or directory` | Dovecot no ha creado el socket de autenticación para Postfix. Revisa el bloque `unix_listener /var/spool/postfix/private/auth` en `/etc/dovecot/conf.d/10-master.conf`. | | `Host or domain name not found. Name service error` | El dominio del destinatario no existe o el servidor no resuelve DNS. Prueba `dig MX` con ese dominio. | | `said: 550-5.7.25` o `550-5.7.26` (Gmail) | Falta el PTR de la IP o el mensaje no pasa SPF/DKIM/DMARC. Ver paso 2. | | `User unknown in local recipient table` | La dirección no existe en el servidor. Crea el buzón o un alias. | | `imap-login: Disconnected (auth failed` | Un cliente IMAP falla al autenticarse. Varias líneas seguidas desde IPs desconocidas indican un ataque de fuerza bruta. | ## Solución de problemas **Los mensajes salen pero no llegan a Gmail ni a Outlook**: si el registro muestra `status=sent` con `250` del servidor de destino, tu servidor ha cumplido; el destinatario lo ha clasificado como spam. Revisa SPF, DKIM, DMARC y el PTR (paso 2) y comprueba si tu IP está en listas negras. **Un servidor externo dice que tu dominio no existe o no tiene servidor de correo**: el MX no está publicado o apunta a un nombre sin registro A. Repite las consultas del paso 2 contra `@1.1.1.1` y `@8.8.8.8`; si los resultados difieren, el cambio de DNS aún se está propagando. **El cliente de correo dice que el certificado no es válido**: el certificado ha caducado o no incluye el nombre que el cliente tiene configurado como servidor. Comprueba el nombre y la fecha con el comando `openssl` del paso 5 y configura el cliente con `mail.your_domain`, no con la IP. **Postfix o Dovecot no arrancan tras un cambio**: consulta el motivo con `sudo journalctl -u dovecot -n 50 --no-pager` o `sudo journalctl -u postfix@- -n 50 --no-pager`, y valida la configuración con `postfix check` y `doveconf -n`. ## Conclusión Has recorrido un servidor Postfix y Dovecot pieza a pieza: servicios y puertos, DNS, salida por el puerto 25, recepción desde el exterior, envío autenticado, IMAP, cola y registros. Siguiendo ese orden, cualquier fallo queda acotado a un único componente y el mensaje del registro suele indicar directamente la solución. Como siguientes pasos puedes: - Instalar Fail2ban con los filtros de Postfix y Dovecot para bloquear los ataques de fuerza bruta que aparecen en los registros. - Configurar una alerta que te avise cuando la cola de Postfix supere un número de mensajes. - Revisar periódicamente los informes DMARC de tu dominio para detectar problemas de autenticación antes que tus usuarios.