
Montar un servidor de correo en Linux es una tarea poderosa, pero también delicada. Un servidor mal configurado puede convertirse en un relay abierto, ser bloqueado por proveedores externos o terminar enviando correo a la carpeta de spam. Por eso una instalación seria debe combinar Postfix para SMTP, Dovecot para IMAP y autenticación, SpamAssassin para filtrado antispam, certificados TLS, DNS correcto y autenticación de dominio con SPF, DKIM y DMARC.
Postfix se presenta oficialmente como un MTA rápido, fácil de administrar y seguro; Dovecot destaca como servidor IMAP con soporte flexible de autenticación; y Apache SpamAssassin es una de las plataformas open source más conocidas para clasificar y bloquear correo no deseado.
Resumen rápido: Postfix recibe y envía correo; Dovecot permite leerlo por IMAP y autenticar usuarios; SpamAssassin analiza mensajes para detectar spam; TLS protege las conexiones; SPF, DKIM y DMARC ayudan a demostrar que tu dominio envía correo legítimo.
Entorno de la guía: Ubuntu Server o Debian actualizado, dominio propio, acceso sudo, IP pública, DNS administrable, puerto 25 permitido por el proveedor y un nombre de host como mail.ejemplo.com.
1. Arquitectura básica del servidor de correo
| Componente | Función | Puerto típico |
|---|---|---|
| Postfix | Recibe y envía correo mediante SMTP. | 25, 587 |
| Dovecot | Permite leer correo mediante IMAP y autenticar usuarios. | 993 |
| SpamAssassin | Analiza mensajes y asigna puntuación de spam. | Local |
| OpenDKIM | Firma mensajes salientes con DKIM. | Milter local |
| DNS | Define MX, SPF, DKIM, DMARC y PTR/rDNS. | Registros públicos |
La separación entre SMTP de servidor a servidor y SMTP de envío autenticado es clave. Dovecot recomienda usar un puerto de submission dedicado, normalmente TCP 587, cuando se usa Dovecot como mecanismo SASL para Postfix. Esto evita mezclar la recepción pública de correo con el envío autenticado de usuarios.
2. Requisitos previos: DNS, hostname y puertos
Antes de instalar paquetes, configura el DNS. Sin DNS correcto, tu servidor podrá funcionar técnicamente, pero tendrá mala entregabilidad y será rechazado por muchos proveedores.
| Registro | Ejemplo | Uso |
|---|---|---|
| A | mail.ejemplo.com → IP pública | Nombre del servidor. |
| MX | ejemplo.com → mail.ejemplo.com | Indica quién recibe correo del dominio. |
| PTR / rDNS | IP pública → mail.ejemplo.com | Mejora reputación y validación inversa. |
| SPF | v=spf1 mx -all | Autoriza servidores que pueden enviar por el dominio. |
| DKIM | mail._domainkey.ejemplo.com | Firma criptográfica del correo saliente. |
| DMARC | _dmarc.ejemplo.com | Política ante fallos SPF/DKIM. |
SPF, DKIM y DMARC son mecanismos de autenticación de correo que ayudan a prevenir suplantación, phishing y envío no autorizado en nombre de un dominio. SIDN los describe como estándares que protegen al remitente, al sistema de envío y la autenticidad del mensaje.
# Ejemplo de hostname sudo hostnamectl set-hostname mail.ejemplo.com # Verificar hostname y red hostnamectl hostname -f ip -br address ip route
3. Actualizar Linux e instalar paquetes principales
En Ubuntu y Debian, puedes instalar Postfix, Dovecot, SpamAssassin, herramientas TLS y utilidades de diagnóstico desde APT. Ubuntu mantiene documentación para instalar Postfix y también documenta el uso de Dovecot SASL como parte de la configuración básica de correo.
sudo apt update sudo apt full-upgrade -y sudo apt install -y \ postfix \ postfix-pcre \ dovecot-core \ dovecot-imapd \ dovecot-lmtpd \ dovecot-sieve \ dovecot-managesieved \ spamassassin \ spamc \ spamass-milter \ opendkim \ opendkim-tools \ certbot \ ufw \ mailutils \ swaks
Durante la instalación de Postfix, elige Internet Site y usa como nombre del sistema de correo tu dominio o el host de correo, por ejemplo mail.ejemplo.com.
4. Configurar firewall sin bloquear el servidor
Un servidor de correo público necesita abrir puertos concretos. No abras todo. Para un servidor básico, normalmente se requiere SMTP público en 25, submission autenticado en 587, IMAPS en 993 y SSH para administración.
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow OpenSSH sudo ufw allow 25/tcp sudo ufw allow 587/tcp sudo ufw allow 993/tcp sudo ufw allow 80/tcp sudo ufw enable sudo ufw status verbose
Precaución: antes de cerrar tu sesión SSH, abre otra conexión y confirma que puedes entrar. Muchos errores de administración empiezan por activar firewall sin permitir SSH.
5. Obtener certificado TLS para el correo
Postfix necesita normalmente un certificado y una clave privada en formato PEM para usar TLS. La documentación oficial de Postfix advierte que la clave privada debe ser accesible sin contraseña para el servicio y debe protegerse adecuadamente por permisos.
Con Certbot puedes obtener certificados de Let’s Encrypt. Certbot documenta comandos para obtener, renovar y administrar certificados.
sudo certbot certonly --standalone -d mail.ejemplo.com sudo ls -l /etc/letsencrypt/live/mail.ejemplo.com/
Las rutas habituales serán:
/etc/letsencrypt/live/mail.ejemplo.com/fullchain.pem /etc/letsencrypt/live/mail.ejemplo.com/privkey.pem
6. Configurar Postfix de forma segura
Postfix debe recibir correo para tu dominio, permitir envío autenticado a usuarios válidos y rechazar relay no autorizado. La documentación oficial de SASL en Postfix explica que la autenticación permite a clientes SMTP remotos autenticarse ante el servidor para obtener permisos controlados de envío.
Edita el archivo principal:
sudo nano /etc/postfix/main.cf
Usa esta base, ajustando el dominio y el hostname:
myhostname = mail.ejemplo.com
mydomain = ejemplo.com
myorigin = /etc/mailname
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
readme_directory = no
# TLS
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.ejemplo.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.ejemplo.com/privkey.pem
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_auth_only = yes
# SASL con Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
# Evitar relay abierto
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# Límites básicos
message_size_limit = 52428800
mailbox_size_limit = 0
# Milters para DKIM y antispam
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:/opendkim/opendkim.sock, unix:/spamass/spamass.sock
non_smtpd_milters = unix:/opendkim/opendkim.sock
Clave de seguridad: nunca pongas mynetworks con una red amplia como 0.0.0.0/0. Eso puede convertir tu servidor en un relay abierto.
7. Activar submission seguro en el puerto 587
El puerto 25 se usa para recibir correo de otros servidores. Los usuarios deben enviar correo autenticado por el puerto 587 con TLS y SASL. La documentación de Dovecot recomienda precisamente usar un puerto dedicado de submission cuando Postfix delega la autenticación en Dovecot.
sudo nano /etc/postfix/master.cf
Busca la sección submission y déjala así:
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
Valida y reinicia:
sudo postfix check sudo systemctl restart postfix sudo systemctl status postfix --no-pager
8. Configurar Dovecot para IMAP seguro y autenticación SASL
Dovecot usa el término SSL en su configuración, pero su propia documentación aclara que en realidad se refiere a SSL/TLS. Para un servidor actual, lo importante es ofrecer IMAPS y evitar autenticación en texto plano sin cifrado.
Edita la ubicación del buzón:
sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
Configura autenticación:
sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes auth_mechanisms = plain login
Configura TLS:
sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required ssl_cert = </etc/letsencrypt/live/mail.ejemplo.com/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.ejemplo.com/privkey.pem
Ahora crea el socket de autenticación para Postfix:
sudo nano /etc/dovecot/conf.d/10-master.conf
Dentro de service auth, agrega o ajusta:
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
Reinicia Dovecot:
sudo dovecot -n sudo systemctl restart dovecot sudo systemctl status dovecot --no-pager
9. Crear usuarios de correo locales
Para una guía de principiantes, usaremos usuarios locales del sistema y buzones Maildir. Para empresas con múltiples dominios y usuarios virtuales, lo recomendable es una base de datos con usuarios virtuales, PostfixAdmin o una solución de groupware.
sudo adduser usuario1 sudo -u usuario1 maildirmake.dovecot /home/usuario1/Maildir sudo chown -R usuario1:usuario1 /home/usuario1/Maildir
El buzón de ese usuario será:
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
10. Configurar SpamAssassin para filtrar correo no deseado
Apache SpamAssassin se presenta como una plataforma open source antispam ampliamente usada. Sus reglas pueden actualizarse con sa-update, herramienta que automatiza la descarga e instalación de reglas desde canales como updates.spamassassin.org.
Habilita y prueba SpamAssassin:
sudo systemctl enable --now spamassassin || sudo systemctl enable --now spamd sudo sa-update sudo systemctl restart spamassassin || sudo systemctl restart spamd spamassassin --lint
Configura reglas básicas:
sudo nano /etc/spamassassin/local.cf
required_score 5.0 rewrite_header Subject *****SPAM***** report_safe 0 use_bayes 1 bayes_auto_learn 1
Ahora configura spamass-milter. En Debian/Ubuntu, revisa el archivo de opciones:
sudo nano /etc/default/spamass-milter
Usa una opción de socket compatible con Postfix:
OPTIONS="-u spamass-milter -p /var/spool/postfix/spamass/spamass.sock -m"
Crea la carpeta y reinicia:
sudo mkdir -p /var/spool/postfix/spamass sudo chown spamass-milter:postfix /var/spool/postfix/spamass sudo chmod 750 /var/spool/postfix/spamass sudo systemctl restart spamass-milter sudo systemctl restart postfix sudo systemctl status spamass-milter --no-pager
Nota práctica: SpamAssassin no reemplaza SPF, DKIM y DMARC. El antispam analiza contenido y reputación; la autenticación de dominio ayuda a verificar identidad del remitente.
11. Configurar DKIM con OpenDKIM
DKIM firma mensajes salientes para que los servidores receptores puedan comprobar que el correo realmente viene de tu dominio y que no fue alterado. Debian describe OpenDKIM como una implementación milter DKIM apta para MTAs como Postfix.
sudo mkdir -p /etc/opendkim/keys/ejemplo.com sudo chown -R opendkim:opendkim /etc/opendkim sudo chmod 700 /etc/opendkim/keys cd /etc/opendkim/keys/ejemplo.com sudo opendkim-genkey -b 2048 -s mail -d ejemplo.com sudo chown opendkim:opendkim mail.private sudo chmod 600 mail.private
Edita OpenDKIM:
sudo nano /etc/opendkim.conf
Syslog yes UMask 002 Mode sv Canonicalization relaxed/simple Socket local:/var/spool/postfix/opendkim/opendkim.sock PidFile /run/opendkim/opendkim.pid UserID opendkim:opendkim KeyTable /etc/opendkim/key.table SigningTable refile:/etc/opendkim/signing.table ExternalIgnoreList /etc/opendkim/trusted.hosts InternalHosts /etc/opendkim/trusted.hosts
Crea los archivos de tablas:
sudo tee /etc/opendkim/key.table > /dev/null <<'EOF' mail._domainkey.ejemplo.com ejemplo.com:mail:/etc/opendkim/keys/ejemplo.com/mail.private EOF sudo tee /etc/opendkim/signing.table > /dev/null <<'EOF' *@ejemplo.com mail._domainkey.ejemplo.com EOF sudo tee /etc/opendkim/trusted.hosts > /dev/null <<'EOF' 127.0.0.1 localhost mail.ejemplo.com ejemplo.com EOF
Crea el socket para Postfix:
sudo mkdir -p /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim sudo chmod 750 /var/spool/postfix/opendkim sudo systemctl restart opendkim sudo systemctl restart postfix
Publica en DNS el contenido del archivo:
sudo cat /etc/opendkim/keys/ejemplo.com/mail.txt
12. Publicar SPF y DMARC en DNS
Además de DKIM, publica SPF y DMARC. DMARC permite indicar qué deben hacer los receptores si un correo falla la autenticación, y también permite recibir reportes para monitorear abusos o errores de configuración.
# SPF - registro TXT en ejemplo.com
v=spf1 mx -all
# DMARC inicial - registro TXT en _dmarc.ejemplo.com
v=DMARC1; p=quarantine; rua=mailto:Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.; adkim=s; aspf=s
Recomendación gradual: si nunca usaste DMARC, puedes iniciar con p=none para observar reportes, luego pasar a quarantine y finalmente a reject cuando estés seguro de que SPF y DKIM funcionan correctamente.
13. Probar SMTP, IMAP, TLS y autenticación
Verifica que los servicios estén escuchando:
sudo ss -lntp | grep -E ':25|:587|:993' sudo systemctl status postfix --no-pager sudo systemctl status dovecot --no-pager sudo systemctl status opendkim --no-pager sudo systemctl status spamass-milter --no-pager
Prueba SMTP local:
echo "Prueba de correo local" | mail -s "Prueba Postfix" Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
sudo tail -f /var/log/mail.log
Prueba STARTTLS en el puerto 587:
openssl s_client -starttls smtp -connect mail.ejemplo.com:587 -servername mail.ejemplo.com
Prueba IMAPS:
openssl s_client -connect mail.ejemplo.com:993 -servername mail.ejemplo.com
Prueba envío autenticado con swaks:
swaks \ --to Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. \ --from Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. \ --server mail.ejemplo.com \ --port 587 \ --auth LOGIN \ --auth-user usuario1 \ --auth-password 'CLAVE_DEL_USUARIO' \ --tls
14. Configurar el cliente de correo
| Parámetro | Valor |
|---|---|
| Servidor entrante | mail.ejemplo.com |
| Protocolo entrante | IMAP seguro / puerto 993 / SSL-TLS |
| Servidor saliente | mail.ejemplo.com |
| Protocolo saliente | SMTP submission / puerto 587 / STARTTLS |
| Usuario | usuario1 |
| Correo | Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. |
15. Endurecimiento básico del servidor
- No permitas relay abierto: usa reject_unauth_destination y limita mynetworks.
- Usa submission 587: los usuarios deben autenticarse para enviar correo.
- Exige TLS para autenticación: evita enviar credenciales sin cifrado.
- Publica SPF, DKIM y DMARC: mejora autenticidad y entregabilidad.
- Configura PTR/rDNS: muchos proveedores lo revisan para aceptar correo.
- Actualiza reglas de SpamAssassin: usa sa-update periódicamente.
- Revisa logs: /var/log/mail.log será tu principal fuente de diagnóstico.
- Aplica parches: Postfix, Dovecot, OpenSSL, SpamAssassin y kernel deben mantenerse actualizados.
- Evita contraseñas débiles: usa políticas de contraseña y considera 2FA en soluciones webmail.
- Haz backups: respalda buzones, certificados, claves DKIM y configuración.
16. Diagnóstico de errores frecuentes
| Problema | Qué revisar |
|---|---|
| El correo no llega desde Internet | MX, puerto 25 abierto, firewall, bloqueo del proveedor cloud. |
| El cliente no puede enviar | Puerto 587, SASL, socket Dovecot, usuario y contraseña. |
| El cliente no puede leer correo | Puerto 993, Dovecot, certificado TLS y Maildir. |
| Gmail/Outlook marca spam | SPF, DKIM, DMARC, PTR, reputación de IP y contenido del mensaje. |
| DKIM no firma | Socket OpenDKIM, permisos, tablas y registro TXT publicado. |
| SpamAssassin no marca spam | Servicio spamd/spamassassin, spamass-milter, socket y reglas actualizadas. |
# Logs principales sudo tail -f /var/log/mail.log # Ver cola de correo mailq # Reintentar cola sudo postfix flush # Ver configuración activa de Postfix postconf -n # Ver configuración activa de Dovecot sudo dovecot -n
17. Errores que debes evitar
- Configurar Postfix como relay abierto.
- Permitir autenticación SMTP sin TLS.
- No configurar PTR/rDNS de la IP pública.
- Enviar correo sin SPF, DKIM y DMARC.
- Usar contraseñas débiles para buzones.
- No monitorear la cola de correo.
- No actualizar reglas de SpamAssassin.
- Publicar claves privadas DKIM o certificados por error.
- Usar una IP cloud con mala reputación sin revisarla.
- No tener backups de buzones y configuraciones.
Preguntas clave
¿Postfix reemplaza a Dovecot?
No. Postfix se encarga de SMTP: recibir y enviar correo. Dovecot se encarga principalmente de IMAP/POP3 y autenticación de usuarios.
¿Necesito SpamAssassin si ya tengo SPF, DKIM y DMARC?
Sí. SPF, DKIM y DMARC ayudan a validar identidad del dominio. SpamAssassin analiza el contenido, patrones y señales de spam. Son capas complementarias.
¿Puedo usar este servidor para varios dominios?
Sí, pero para varios dominios y muchos usuarios conviene pasar de usuarios locales a usuarios virtuales con base de datos, aliases, cuotas y una interfaz como PostfixAdmin.
¿Por qué mi correo llega a spam aunque todo funcione?
Puede ser por reputación de IP, falta de PTR, SPF/DKIM/DMARC mal configurados, contenido sospechoso, baja antigüedad del dominio o historial del rango IP.
¿Es obligatorio abrir el puerto 25?
Sí, para recibir correo desde otros servidores. Muchos proveedores cloud lo bloquean por defecto para reducir abuso, así que debes verificarlo antes de montar el servicio.
¿Qué puerto debe usar el usuario para enviar correo?
El usuario debe enviar por el puerto 587 con STARTTLS y autenticación SASL. El puerto 25 debe reservarse para recepción servidor a servidor.
Recomendamos
- Cómo instalar un servidor VPN en Linux con WireGuard y OpenVPN.
- Guía completa para instalar y configurar un servidor web seguro con Nginx y Apache.
- Cómo proteger un servidor Linux con herramientas gratuitas de seguridad.
- Cómo montar tu propio servidor de nube privada con Linux.
En resumen
Un servidor de correo seguro en Linux no depende de una sola herramienta. Postfix entrega la base SMTP; Dovecot permite acceso IMAP seguro y autenticación; SpamAssassin reduce correo no deseado; OpenDKIM firma mensajes; y los registros DNS SPF, DKIM, DMARC, MX y PTR ayudan a que otros servidores confíen en tu dominio.
Para principiantes, la clave es avanzar por fases: primero DNS y hostname, luego Postfix, después Dovecot, luego TLS, autenticación SASL, antispam, DKIM y finalmente pruebas de entregabilidad. Cada cambio debe validarse con logs y pruebas reales antes de pasar a producción.
Conclusión editorial
Administrar tu propio correo en Linux ofrece independencia y control, pero exige disciplina. Un buen servidor de correo no solo envía mensajes: cifra conexiones, autentica usuarios, firma dominios, filtra spam, protege reputación y registra cada evento importante.

