Postfix + Dovecot: Guía Completa de Configuración
Introducción
Construir un servidor de correo electrónico completo y listo para producción requiere la integración perfecta de múltiples componentes. Mientras que Postfix maneja la transferencia de correo (SMTP) y Dovecot gestiona la recuperación de correo (IMAP/POP3), reunir estos dos sistemas poderosos crea una infraestructura de correo robusta, segura y completamente funcional.
Esta guía completa te lleva a través del proceso completo de configurar e integrar Postfix y Dovecot en un servidor Linux. Aprenderás cómo configurar ambos sistemas para trabajar juntos armoniosamente, implementar autenticación SMTP a través de Dovecot SASL, configurar dominios y usuarios virtuales, establecer conexiones seguras con SSL/TLS y optimizar toda la pila para confiabilidad y rendimiento.
A diferencia de las guías de componentes individuales, este tutorial se enfoca específicamente en los puntos de integración y decisiones de configuración que hacen que Postfix y Dovecot trabajen juntos como una solución de correo unificada. Ya sea que estés configurando correo para un solo dominio o alojando múltiples dominios con cientos de usuarios, esta guía proporciona la base para un servidor de correo profesional.
Al final de este tutorial, tendrás un servidor de correo completamente operacional capaz de:
- Enviar y recibir correo electrónico vía SMTP (Postfix)
- Proporcionar acceso IMAP/POP3 seguro (Dovecot)
- Autenticar usuarios SMTP a través de Dovecot
- Soportar dominios y buzones virtuales
- Cifrar todas las conexiones con SSL/TLS
- Prevenir spam y relay no autorizado
Prerrequisitos
Antes de comenzar esta configuración completa, asegúrate de tener:
Requisitos del Sistema
- Servidor Linux nuevo (Ubuntu 20.04/22.04, Debian 10/11, CentOS 8/Rocky Linux 8)
- Acceso root o sudo
- Mínimo 2GB RAM (4GB recomendado para producción)
- Al menos 40GB de espacio en disco
- Sistema limpio sin instalaciones previas de servidor de correo
Requisitos de Dominio y Red
- Nombre de dominio registrado (ej., example.com)
- Dirección IP estática asignada a tu servidor
- Acceso a gestión DNS para tu dominio
- Registro DNS inverso (PTR) configurado
- Sin bloqueos de ISP en puertos de correo (especialmente puerto 25)
- Puertos 25, 143, 587, 993 abiertos y accesibles
Registros DNS Requeridos
Antes de comenzar, configura estos registros DNS:
# Registro A para el servidor de correo
mail.example.com. A 203.0.113.10
# Registro MX para el dominio
example.com. MX 10 mail.example.com.
# Registro SPF (inicial)
example.com. TXT "v=spf1 mx a ip4:203.0.113.10 ~all"
# Registro PTR (vía proveedor de hosting)
10.113.0.203.in-addr.arpa. PTR mail.example.com.
Certificados SSL/TLS
Aunque puedes comenzar con certificados auto-firmados, los sistemas de producción deben usar Let's Encrypt:
sudo apt install certbot -y
sudo certbot certonly --standalone -d mail.example.com
Conocimientos Previos
- Competencia en línea de comandos de Linux
- Comprensión básica de protocolos de correo electrónico (SMTP, IMAP, POP3)
- Familiaridad con configuración DNS
- Habilidades con editores de texto (nano, vim)
Descripción General de la Arquitectura
Comprendiendo cómo Postfix y Dovecot trabajan juntos:
Roles de Componentes
Postfix (MTA - Agente de Transferencia de Correo)
- Recibe correo entrante de otros servidores de correo (puerto 25)
- Envía correo saliente a otros servidores de correo (puerto 25)
- Recibe envíos de correo de clientes autenticados (puerto 587)
- Enruta mensajes a entrega local o destinos de relay
- Realiza filtrado de spam y controles de acceso
Dovecot (MDA - Agente de Entrega de Correo + IMAP/POP3)
- Entrega correo a buzones locales (LMTP)
- Proporciona acceso IMAP para clientes (puertos 143/993)
- Proporciona acceso POP3 para clientes (puertos 110/995)
- Autentica usuarios SMTP para Postfix (SASL)
- Gestiona almacenamiento e indexación de buzones
Flujo de Comunicación
- Correo Entrante: Servidor externo → Postfix (puerto 25) → Dovecot LMTP → Buzón
- Correo Saliente: Cliente de correo → Postfix (puerto 587) → Auth Dovecot SASL → Envío Postfix
- Lectura de Correo: Cliente de correo → Dovecot (IMAP/POP3) → Buzón
- Autenticación: Todos los envíos SMTP autenticados vía Dovecot SASL
Paso 1: Configuración Inicial del Sistema
Actualiza tu sistema y configura el nombre de host:
# Actualizar paquetes del sistema
sudo apt update && sudo apt upgrade -y
# Establecer nombre de host
sudo hostnamectl set-hostname mail.example.com
# Configurar /etc/hosts
sudo nano /etc/hosts
Agrega esta línea (reemplaza con tu IP):
203.0.113.10 mail.example.com mail
Verificar nombre de host:
hostname -f
# Debería mostrar: mail.example.com
Paso 2: Instalar Postfix y Dovecot
Instalar ambos paquetes:
# Ubuntu/Debian
sudo apt install postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd -y
# CentOS/Rocky Linux
sudo dnf install postfix dovecot -y
Durante la instalación de Postfix, selecciona:
- Tipo de configuración: Internet Site
- Nombre de correo del sistema: example.com
Paso 3: Configurar Estructura de Almacenamiento de Buzones
Crear un usuario de correo dedicado y estructura de directorios:
# Crear usuario de correo virtual
sudo groupadd -g 5000 vmail
sudo useradd -g vmail -u 5000 vmail -d /var/mail/vmail -m -s /usr/sbin/nologin
# Crear directorio de almacenamiento de correo
sudo mkdir -p /var/mail/vmail
sudo chown -R vmail:vmail /var/mail/vmail
sudo chmod -R 770 /var/mail/vmail
Esto crea:
- Un usuario del sistema
vmail(UID 5000) que es dueño de todos los buzones - Un directorio dedicado
/var/mail/vmailpara almacenar todo el correo - Permisos adecuados para seguridad
Paso 4: Configurar Ajustes Principales de Postfix
Hacer copia de seguridad y editar la configuración principal de Postfix:
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.backup
sudo nano /etc/postfix/main.cf
Reemplazar o agregar estas configuraciones:
# Configuraciones básicas
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
mydestination = localhost
# Configuración de red
inet_interfaces = all
inet_protocols = ipv4
# Confianza y relay
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
relayhost =
# Entrega de correo
home_mailbox = Maildir/
message_size_limit = 52428800
mailbox_size_limit = 0
# Configuración de buzón virtual
virtual_mailbox_domains = /etc/postfix/virtual_domains
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailboxes
virtual_mailbox_base = /var/mail/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual_aliases
# Dovecot LMTP para entrega local
virtual_transport = lmtp:unix:private/dovecot-lmtp
# Restricciones SMTP
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname
smtpd_sender_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_sender,
reject_unknown_sender_domain
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unauth_destination,
reject_unauth_pipelining,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
permit
# Anti-spam
disable_vrfy_command = yes
smtpd_data_restrictions = reject_unauth_pipelining
# Configuración TLS
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_ciphers = high
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_ciphers = high
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = may
smtpd_tls_loglevel = 1
# Autenticación SASL vía Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
# Configuración Milter (para futuro filtrado de spam)
milter_default_action = accept
milter_protocol = 6
# Misceláneos
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 2
Paso 5: Configurar Ajustes Maestros de Postfix
Editar master.cf para envío y cifrado:
sudo nano /etc/postfix/master.cf
Encontrar y modificar estas secciones:
# Servicio SMTP (recibiendo correo de otros servidores)
smtp inet n - y - - smtpd
# Servicio de envío (puerto 587 para clientes autenticados)
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_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
# SMTPS (puerto 465, opcional pero recomendado)
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
Paso 6: Crear Archivos de Dominios y Buzones Virtuales
Dominios Virtuales
sudo nano /etc/postfix/virtual_domains
Agregar tus dominios (uno por línea):
example.com
example.net
Buzones Virtuales
sudo nano /etc/postfix/virtual_mailboxes
Agregar buzones (formato: email@dominio directorio):
[email protected] example.com/admin/
[email protected] example.com/user/
[email protected] example.com/info/
[email protected] example.net/contact/
Alias Virtuales
sudo nano /etc/postfix/virtual_aliases
Agregar alias (formato: alias@dominio real@direccion):
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
Compilar y Aplicar Mapas
# Generar bases de datos hash
sudo postmap /etc/postfix/virtual_mailboxes
sudo postmap /etc/postfix/virtual_aliases
# Recargar Postfix
sudo systemctl reload postfix
Paso 7: Configurar Ajustes Principales de Dovecot
Hacer copia de seguridad de la configuración de Dovecot:
sudo cp -r /etc/dovecot /etc/dovecot.backup
Editar configuración principal:
sudo nano /etc/dovecot/dovecot.conf
Establecer estos parámetros:
# Protocolos a habilitar
protocols = imap pop3 lmtp
# Escuchar en todas las interfaces
listen = *, ::
# Directorio base
base_dir = /var/run/dovecot/
# Deshabilitar SSL por defecto (lo habilitaremos por servicio)
ssl = required
Paso 8: Configurar Ubicación de Correo de Dovecot
sudo nano /etc/dovecot/conf.d/10-mail.conf
Configurar almacenamiento de correo:
# Ubicación de correo para usuarios virtuales
mail_location = maildir:/var/mail/vmail/%d/%n/Maildir
# Usuario de correo
mail_privileged_group = vmail
mail_uid = vmail
mail_gid = vmail
# Optimizaciones específicas de Maildir
maildir_very_dirty_syncs = yes
maildir_copy_with_hardlinks = yes
# Primer UID/GID válido
first_valid_uid = 5000
last_valid_uid = 5000
first_valid_gid = 5000
last_valid_gid = 5000
# Configuración de namespace
namespace inbox {
inbox = yes
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Spam {
auto = no
special_use = \Junk
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
auto = no
special_use = \Sent
}
}
Explicación de mail_location:
%d= parte del dominio de la dirección de correo (example.com)%n= parte del nombre de usuario de la dirección de correo (user)- Ruta completa:
/var/mail/vmail/example.com/user/Maildir
Paso 9: Configurar Autenticación de Dovecot
sudo nano /etc/dovecot/conf.d/10-auth.conf
Configurar autenticación:
# Requerir cifrado para autenticación
disable_plaintext_auth = yes
# Mecanismos de autenticación
auth_mechanisms = plain login
# Registro detallado durante configuración (deshabilitar en producción)
auth_verbose = yes
auth_verbose_passwords = no
auth_debug = no
# Incluir autenticación passwd-file
!include auth-passwdfile.conf.ext
Crear Autenticación de Archivo de Contraseñas
sudo nano /etc/dovecot/conf.d/auth-passwdfile.conf.ext
Agregar:
passdb {
driver = passwd-file
args = scheme=SHA512-CRYPT username_format=%u /etc/dovecot/users
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vmail/%d/%n
}
Crear Archivo de Usuarios
sudo nano /etc/dovecot/users
Agregar usuarios con contraseñas cifradas:
[email protected]:{SHA512-CRYPT}$6$rounds=100000$...encrypted_password
[email protected]:{SHA512-CRYPT}$6$rounds=100000$...encrypted_password
Para generar contraseñas cifradas:
# Generar hash de contraseña
doveadm pw -s SHA512-CRYPT -p 'YourPassword'
# La salida será algo como:
# {SHA512-CRYPT}$6$rounds=100000$abc123...
Agregar la salida completa a /etc/dovecot/users:
# Ejemplo con hash de contraseña real
echo "[email protected]:$(doveadm pw -s SHA512-CRYPT -p 'SecurePassword123')" | sudo tee -a /etc/dovecot/users
# Establecer permisos adecuados
sudo chmod 640 /etc/dovecot/users
sudo chown root:dovecot /etc/dovecot/users
Paso 10: Configurar SSL/TLS de Dovecot
sudo nano /etc/dovecot/conf.d/10-ssl.conf
Configurar SSL:
# Requerir SSL
ssl = required
# Archivos de certificado
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
# Protocolos SSL
ssl_min_protocol = TLSv1.2
ssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1
# Suite de cifrado SSL
ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
ssl_prefer_server_ciphers = yes
# Parámetros DH
ssl_dh = </etc/dovecot/dh.pem
Generar parámetros DH:
sudo openssl dhparam -out /etc/dovecot/dh.pem 2048
sudo chmod 600 /etc/dovecot/dh.pem
Paso 11: Configurar Servicios Maestros de Dovecot
sudo nano /etc/dovecot/conf.d/10-master.conf
Configurar ajustes de servicio para integración con Postfix:
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
service_count = 1
process_min_avail = 4
process_limit = 500
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
service_count = 1
process_min_avail = 2
process_limit = 200
}
service lmtp {
# Postfix usará este socket para entrega local
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
# Socket de autenticación SMTP de Postfix
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
# Configuraciones del proceso de autenticación
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
user = dovecot
}
service auth-worker {
user = vmail
}
Esta configuración crea:
- Socket UNIX en
/var/spool/postfix/private/authpara autenticación SMTP - Socket UNIX en
/var/spool/postfix/private/dovecot-lmtppara entrega de correo - Permisos adecuados para que Postfix acceda a estos sockets
Paso 12: Configurar LMTP de Dovecot
sudo nano /etc/dovecot/conf.d/20-lmtp.conf
Agregar:
protocol lmtp {
# Plugins de correo
mail_plugins = $mail_plugins
# Dirección del postmaster
postmaster_address = [email protected]
# Habilitar extensiones de dirección (user+tag@domain)
lmtp_save_to_detail_mailbox = yes
recipient_delimiter = +
}
Paso 13: Configurar Firewall
Permitir todos los puertos de correo necesarios:
UFW (Ubuntu/Debian)
sudo ufw allow 25/tcp comment 'SMTP'
sudo ufw allow 587/tcp comment 'Submission'
sudo ufw allow 465/tcp comment 'SMTPS'
sudo ufw allow 143/tcp comment 'IMAP'
sudo ufw allow 993/tcp comment 'IMAPS'
sudo ufw allow 110/tcp comment 'POP3'
sudo ufw allow 995/tcp comment 'POP3S'
sudo ufw reload
Firewalld (CentOS/Rocky)
sudo firewall-cmd --permanent --add-service=smtp
sudo firewall-cmd --permanent --add-service=smtp-submission
sudo firewall-cmd --permanent --add-service=smtps
sudo firewall-cmd --permanent --add-service=imap
sudo firewall-cmd --permanent --add-service=imaps
sudo firewall-cmd --permanent --add-service=pop3
sudo firewall-cmd --permanent --add-service=pop3s
sudo firewall-cmd --reload
Paso 14: Iniciar y Habilitar Servicios
# Habilitar servicios para iniciar en el arranque
sudo systemctl enable postfix
sudo systemctl enable dovecot
# Iniciar servicios
sudo systemctl start postfix
sudo systemctl start dovecot
# Verificar estado
sudo systemctl status postfix
sudo systemctl status dovecot
Paso 15: Probando la Configuración Completa
Prueba 1: Verificar Sintaxis de Configuración
# Verificar configuración de Postfix
sudo postfix check
# Verificar configuración de Dovecot
sudo doveconf -n
Sin salida de postfix check significa sin errores.
Prueba 2: Verificar que los Servicios Están Escuchando
# Verificar todos los puertos de correo
sudo netstat -tlnp | grep -E ':(25|587|465|143|993|110|995)'
Deberías ver servicios escuchando en todos los puertos configurados.
Prueba 3: Probar Autenticación de Dovecot
# Probar autenticación de usuario
doveadm auth test [email protected] SecurePassword123
Salida esperada:
passdb: [email protected] auth succeeded
userdb: [email protected]
Prueba 4: Enviar Correo de Prueba vía Línea de Comandos
# Instalar cliente de correo si es necesario
sudo apt install mailutils -y
# Enviar correo de prueba
echo "Test email body" | mail -s "Test Subject" -r [email protected] [email protected]
Verificar logs:
sudo tail -f /var/log/mail.log
Buscar entrega exitosa a través de LMTP a Dovecot.
Prueba 5: Probar Envío SMTP con Autenticación
# Probar envío autenticado
telnet localhost 587
Después de la conexión, ingresar:
EHLO test.local
AUTH LOGIN
Se te pedirá nombre de usuario y contraseña (codificados en base64).
Codificar credenciales:
echo -n '[email protected]' | base64
echo -n 'SecurePassword123' | base64
Usar la salida base64 para autenticación.
Prueba 6: Probar Acceso IMAP
# Probar conexión IMAP
telnet localhost 143
Comandos:
a1 LOGIN [email protected] SecurePassword123
a2 LIST "" "*"
a3 SELECT INBOX
a4 LOGOUT
Prueba 7: Probar Flujo Completo de Correo
Usando un cliente de correo (Thunderbird, Outlook, etc.):
Servidor Entrante (IMAP):
- Servidor: mail.example.com
- Puerto: 993
- Seguridad: SSL/TLS
- Autenticación: Contraseña normal
- Nombre de usuario: [email protected]
- Contraseña: SecurePassword123
Servidor Saliente (SMTP):
- Servidor: mail.example.com
- Puerto: 587
- Seguridad: STARTTLS
- Autenticación: Contraseña normal
- Nombre de usuario: [email protected]
- Contraseña: SecurePassword123
Enviar un correo de prueba a ti mismo y verificar:
- El correo aparece en la carpeta Enviados
- El correo se recibe en Bandeja de entrada
- No hay errores en los logs
Prueba 8: Probar Entrega Externa
Enviar correo desde tu servidor a Gmail/Outlook:
echo "Test from mail server" | mail -s "External test" -r [email protected] [email protected]
Verificar:
- El correo llega (puede tardar un minuto)
- Revisar carpeta de spam si no está en la bandeja de entrada
- Ver encabezados completos para ver resultados de autenticación
Solución de Problemas de Integración Comunes
Problema 1: Postfix No Puede Conectarse a Dovecot LMTP
Síntomas: Correo atascado en cola, errores sobre conexión LMTP
Diagnóstico:
# Verificar si existe el socket
ls -la /var/spool/postfix/private/dovecot-lmtp
# Verificar logs de Dovecot
sudo tail -f /var/log/dovecot.log
# Verificar logs de Postfix
sudo tail -f /var/log/mail.log
Soluciones:
- Verificar que la ruta del socket en ambas configuraciones coincida
- Verificar permisos del socket (debería ser propiedad de postfix:postfix)
- Reiniciar ambos servicios:
sudo systemctl restart postfix dovecot
Problema 2: Falla de Autenticación SMTP
Síntomas: No se puede enviar correo, errores "Authentication failed"
Diagnóstico:
# Probar autenticación manualmente
doveadm auth test [email protected] password
# Verificar socket de autenticación
ls -la /var/spool/postfix/private/auth
# Verificar logs de autenticación de Dovecot
sudo grep "auth" /var/log/dovecot.log
Soluciones:
- Verificar que el usuario existe en
/etc/dovecot/users - Verificar que el hash de contraseña es correcto
- Asegurar que los permisos del socket permiten acceso a Postfix
- Verificar configuración SASL en main.cf de Postfix
Problema 3: Errores de Permisos Denegados
Síntomas: "Permission denied" en logs al entregar correo
Diagnóstico:
# Verificar usuario y grupo vmail
id vmail
# Verificar permisos de directorio
ls -la /var/mail/vmail/
# Verificar propiedad de archivos
ls -la /var/mail/vmail/example.com/
Soluciones:
# Arreglar propiedad recursivamente
sudo chown -R vmail:vmail /var/mail/vmail/
# Arreglar permisos
sudo chmod -R 770 /var/mail/vmail/
# Asegurar que Dovecot se ejecuta como vmail para userdb
# Verificar sección auth-worker de conf.d/10-master.conf
Problema 4: Correo No Aparece en IMAP
Síntomas: Correo entregado pero no visible en cliente de correo
Diagnóstico:
# Verificar si existen archivos de correo
sudo find /var/mail/vmail/ -name "cur" -type d -exec ls -la {} \;
# Verificar mail_location de Dovecot
doveconf -n | grep mail_location
# Probar IMAP manualmente
telnet localhost 143
Soluciones:
- Verificar que el formato mail_location coincide con la estructura real de directorios
- Verificar que las variables %d y %n se expanden correctamente
- Reconstruir índices:
doveadm force-resync -u [email protected] INBOX
Problema 5: Errores de Certificado TLS/SSL
Síntomas: Advertencias de certificado en clientes de correo
Diagnóstico:
# Probar TLS de SMTP
openssl s_client -connect mail.example.com:587 -starttls smtp
# Probar IMAPS
openssl s_client -connect mail.example.com:993
# Verificar validez del certificado
sudo openssl x509 -in /etc/letsencrypt/live/mail.example.com/fullchain.pem -noout -dates
Soluciones:
- Asegurar que las rutas de certificado son correctas en ambas configuraciones de Postfix y Dovecot
- Verificar que el certificado coincide con el nombre de host mail.example.com
- Renovar certificados expirados
- Usar fullchain.pem (no cert.pem) para cadena de certificados adecuada
Optimización de Rendimiento
Optimización de Postfix
sudo nano /etc/postfix/main.cf
Agregar:
# Caché de conexión
smtp_connection_cache_destinations = example.com
smtp_connection_cache_time_limit = 2s
# Gestión de cola
maximal_queue_lifetime = 5d
bounce_queue_lifetime = 5d
maximal_backoff_time = 4000s
minimal_backoff_time = 300s
# Concurrencia
default_process_limit = 100
smtpd_client_connection_count_limit = 50
Optimización de Dovecot
sudo nano /etc/dovecot/conf.d/10-master.conf
Ajustar límites de procesos:
service imap-login {
process_limit = 1000
client_limit = 1000
}
default_process_limit = 1000
default_client_limit = 1000
Habilitar caché de correo:
sudo nano /etc/dovecot/conf.d/10-mail.conf
Agregar:
mail_cache_min_mail_count = 0
Endurecimiento de Seguridad
1. Implementar Fail2ban
sudo apt install fail2ban -y
Configurar para Postfix y Dovecot:
sudo nano /etc/fail2ban/jail.local
Agregar:
[postfix]
enabled = true
port = smtp,465,submission
filter = postfix
logpath = /var/log/mail.log
maxretry = 5
bantime = 3600
[dovecot]
enabled = true
port = imap,imaps,pop3,pop3s
filter = dovecot
logpath = /var/log/dovecot.log
maxretry = 5
bantime = 3600
Reiniciar:
sudo systemctl restart fail2ban
2. Limitación de Tasa
En main.cf de Postfix:
anvil_rate_time_unit = 60s
smtpd_client_connection_rate_limit = 30
smtpd_client_message_rate_limit = 100
3. Deshabilitar Servicios Innecesarios
Si no se usa POP3, deshabilitarlo:
sudo nano /etc/dovecot/dovecot.conf
Cambiar:
protocols = imap lmtp
Recargar:
sudo systemctl reload dovecot
Monitoreo y Mantenimiento
Monitoreo Diario
# Verificar cola de correo
sudo mailq
# Verificar conexiones de Dovecot
sudo doveadm who
# Monitorear logs en tiempo real
sudo tail -f /var/log/mail.log
sudo tail -f /var/log/dovecot.log
Tareas Semanales
# Verificar errores
sudo grep -i error /var/log/mail.log | tail -50
sudo grep -i error /var/log/dovecot.log | tail -50
# Verificar fallos de autenticación
sudo grep "authentication failed" /var/log/dovecot.log | wc -l
# Revisar correo rechazado
sudo grep "reject:" /var/log/mail.log | tail -20
# Verificar uso de disco
du -sh /var/mail/vmail/*
Crear Script de Monitoreo
sudo nano /usr/local/bin/mail-check.sh
Agregar:
#!/bin/bash
echo "=== Mail Server Status Check ==="
echo ""
echo "Postfix Status:"
systemctl status postfix | grep Active
echo ""
echo "Dovecot Status:"
systemctl status dovecot | grep Active
echo ""
echo "Mail Queue:"
mailq | tail -1
echo ""
echo "Active IMAP/POP3 Sessions:"
doveadm who | wc -l
echo ""
echo "Disk Usage:"
df -h /var/mail/vmail | tail -1
echo ""
echo "Recent Errors:"
grep -i error /var/log/mail.log | tail -5
Hacer ejecutable:
sudo chmod +x /usr/local/bin/mail-check.sh
Ejecutar diariamente vía cron:
sudo crontab -e
Agregar:
0 9 * * * /usr/local/bin/mail-check.sh | mail -s "Daily Mail Server Report" [email protected]
Agregar Nuevos Usuarios y Dominios
Agregar Nuevo Usuario
# Generar hash de contraseña
NEW_PASSWORD=$(doveadm pw -s SHA512-CRYPT -p 'UserPassword')
# Agregar a archivo de usuarios
echo "[email protected]:$NEW_PASSWORD" | sudo tee -a /etc/dovecot/users
# Agregar a buzones virtuales
echo "[email protected] example.com/newuser/" | sudo tee -a /etc/postfix/virtual_mailboxes
# Reconstruir mapas
sudo postmap /etc/postfix/virtual_mailboxes
# Recargar servicios
sudo systemctl reload postfix dovecot
Agregar Nuevo Dominio
# Agregar dominio
echo "newdomain.com" | sudo tee -a /etc/postfix/virtual_domains
# Agregar primer usuario para el dominio
NEW_PASSWORD=$(doveadm pw -s SHA512-CRYPT -p 'AdminPassword')
echo "[email protected]:$NEW_PASSWORD" | sudo tee -a /etc/dovecot/users
# Agregar buzón
echo "[email protected] newdomain.com/admin/" | sudo tee -a /etc/postfix/virtual_mailboxes
# Reconstruir mapas
sudo postmap /etc/postfix/virtual_mailboxes
# Crear directorio
sudo mkdir -p /var/mail/vmail/newdomain.com
sudo chown -R vmail:vmail /var/mail/vmail/newdomain.com
# Recargar servicios
sudo systemctl reload postfix dovecot
Configurar DNS para nuevo dominio:
newdomain.com. MX 10 mail.example.com.
newdomain.com. TXT "v=spf1 mx a ip4:203.0.113.10 ~all"
Estrategia de Respaldo
Respaldar Datos de Correo
# Crear directorio de respaldo
sudo mkdir -p /backup/mail
# Respaldar buzones
sudo rsync -av /var/mail/vmail/ /backup/mail/vmail-$(date +%Y%m%d)/
# Respaldar configuraciones
sudo tar czf /backup/mail/configs-$(date +%Y%m%d).tar.gz \
/etc/postfix/ \
/etc/dovecot/ \
/etc/letsencrypt/
Script Automatizado de Respaldo
sudo nano /usr/local/bin/backup-mail.sh
Agregar:
#!/bin/bash
BACKUP_DIR="/backup/mail"
DATE=$(date +%Y%m%d)
# Crear directorio de respaldo
mkdir -p $BACKUP_DIR
# Respaldar datos de correo
rsync -av --delete /var/mail/vmail/ $BACKUP_DIR/vmail-latest/
# Respaldar configuraciones
tar czf $BACKUP_DIR/configs-$DATE.tar.gz \
/etc/postfix/ \
/etc/dovecot/
# Mantener solo los últimos 7 días de respaldos de configuración
find $BACKUP_DIR -name "configs-*.tar.gz" -mtime +7 -delete
# Registrar
echo "Mail backup completed: $DATE" >> $BACKUP_DIR/backup.log
Hacer ejecutable y programar:
sudo chmod +x /usr/local/bin/backup-mail.sh
sudo crontab -e
Agregar:
0 2 * * * /usr/local/bin/backup-mail.sh
Conclusión
Ahora tienes un servidor de correo completo e integrado de Postfix y Dovecot con:
- Envío SMTP seguro con autenticación
- Acceso IMAP y POP3 con cifrado SSL/TLS
- Soporte de dominios y usuarios virtuales
- Entrega de correo local vía LMTP
- Medidas de seguridad completas
- Optimizaciones de rendimiento
Esta configuración proporciona una base sólida para un servidor de correo de producción capaz de manejar múltiples dominios y usuarios de manera confiable y segura.
Logros Clave
- Integración Completa: Postfix y Dovecot trabajan juntos sin problemas
- Alojamiento Virtual: Soporte para múltiples dominios y usuarios
- Seguridad: Cifrado SSL/TLS, autenticación SASL, relay restringido
- Rendimiento: Optimizado para eficiencia y escalabilidad
- Mantenibilidad: Configuración organizada y monitoreo
Próximos Pasos
Para mejorar aún más tu servidor de correo:
- Implementar DKIM para autenticación de correo y mejor entregabilidad
- Configurar SPF y DMARC para autenticación completa de correo
- Agregar SpamAssassin para filtrado de spam
- Instalar webmail (Roundcube/Rainloop) para acceso por navegador
- Configurar monitoreo (Nagios/Zabbix) para alertas proactivas
- Configurar respaldos automatizados a almacenamiento remoto
- Implementar cuotas para gestionar uso de disco por usuario
- Agregar filtrado Sieve para reglas de correo del lado del servidor
Recordatorios Importantes
- Monitorear regularmente: Revisar logs diariamente para problemas
- Actualizar frecuentemente: Aplicar actualizaciones de seguridad prontamente
- Probar respaldos: Verificar que la restauración de respaldos funciona
- Revisar seguridad: Auditar configuraciones trimestralmente
- Documentar cambios: Mantener registro de modificaciones personalizadas
Con esta configuración completa de Postfix y Dovecot, tienes control total sobre tu infraestructura de correo, asegurando privacidad, seguridad y confiabilidad para todas tus comunicaciones de correo.


