5. Integrar Dovecot con MySQL
Tras configurar Exim4 ahora toca usar un servidor IMAP/POP para que los clientes de correo puedan acceder. Se realizará lo siguiente:
Instalar Dovecot como servidor IMAP/POP3
Integrarlo con la configuración MySQL de Exim4 con MySQL y usuarios virtuales
Configurar la seguridad SSL usando el mismo procedimiento usando en la sección Certificados digitales
Ajustes adicionales: incrementar usuarios por IP y configurar la carpeta de spam
Advertencia
Esta configuración no es válida para Debian12. Con Debian 13 ha cambiado la versión de Dovecot y la configuración es la mostrada a continuación.
5.1. Instalación
Para que se pueda integrar Dovecot con MySQL se requieren al menos estos paquetes:
apt-get install dovecot-core dovecot-mysql dovecot-imapd dovecot-pop3d
La configuración predeterminada trae muchas opciones deshabilitadas. Así, toda
la configuración se realizará en un nuevo fichero
/etc/dovecot/local.conf donde se harán los siguientes cambios:
Desactivar configuración predeterminada de los buzones
Activar los protocolos deseados.
Fijar el UID y GUI del usuario de correo al correspondiente usuario virtual vmail.
Activar MySQL el soporte MySQL configurar las consultas
Establecer la ubicación de los buzones maildir mediante consultas SQL.
Lo primero es desactivar la configuración predeterminada de los buzones en
el fichero /etc/dovecot/conf.d/10-mail.conf comentando la líneas:
#mail_driver = mbox
#mail_home = /home/%{user|username}
#mail_path = %{home}/mail
#mail_inbox_path = /var/mail/%{user}
Ahora en un nuevo fichero /etc/dovecot/local.conf se puede añadir lo
toda la configuración necesaria. El fichero completo es el siguiente:
/etc/dovecot/local.confprotocols = imap pop3
auth_mechanisms = plain login # Mecanismos de auth permitidos
auth_allow_cleartext = no # Deshabilita auth en texto plano sin SSL/TLS
verbose_proctitle = yes
mail_uid = vmail
mail_gid = vmail
mail_driver = maildir
mail_path = maildir
sql_driver = mysql
mysql /var/run/mysqld/mysqld.sock {
user = DB_USER
password = **** # Poner la contraseña real
dbname = DB_NAME
}
passdb sql {
query = SELECT NULL AS password, 'Y' as nopassword, email AS user \
FROM mod_exim4_mailboxes WHERE email = `%{user}` AND password = sha2(`%{password}`,256)
}
userdb sql {
query = SELECT concat("/home/vmail/",maildir) AS home \
FROM mod_exim4_mailboxes WHERE email = '%{user}'
}
Atención
No te olvides de poner la la base de datos, usuario y contraseña en las líneas resaltadas.
También es recomendable desactivar la autenticación predeterminada PAM, que
viene activada en Debian, así, ningún usuario del sistema con login activo pueda
entrar por IMAP/POP. De nuevo en el fichero /etc/dovecot/conf.d/10-auth,
al final del mismo está activa la directiva indicada que hay que comentar:
#!include auth-system.conf.ext
5.2. Configuración SSL
La configuración para IMAP/POP se realizará de la siguiente forma:
Forzar SSL usando el modo required, la seguridad ante todo.
De nuevo usar el certificado del dominio principal, es decir, el que se configuró como resolución inversa para Exim4 y obtenido con Certbot/LetsEncrypt
Se puede añadir al final del fichero /etc/dovecot/local.conf siempre
que se desactive en el fichero /etc/dovecot/conf.d/10-ssl.conf la
configuración predeterminada.
ssl = required
ssl_server_ca_file = /etc/letsencrypt/live/mail.art-website.com/chain.pem
ssl_server_cert_file = /etc/letsencrypt/live/mail.art-website.com/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/mail.art-website.com/privkey.pem
ssl_server_dh_file = /etc/dovecot/dh.pem
Para generar los parámetros Diffie-Hellman para el intercambio de claves
dh.pem se puede usar openssl pero deben de ser del mismo tamaño que la
clave, para ello se puede mirar el certificado, en mi caso 2048 bits. Así el
comando es:
openssl dhparam -out /etc/dovecot/dh.pem 2048
5.3. Gran cantidad de usuarios y Dovecot
Otro problema adicional encontrado con Dovecot es que la configuración predeterminada trae los límites de recursos muy bajos. Si no se cambia se puede encontrar en los logs el siguiente aviso de log podrás encontrar avisos como:
Warning: service(imap-login): process_limit (100) reached, client connections are being dropped
Si se tienen muchos usuarios hay que adaptar la configuración. El primer ajuste que suelo hacer es aumentar la memoria permitida mediante los cambios indicados a continuación:
default_process_limit = 500
default_client_limit = 5000
default_vsz_limit = 512M
Un segundo cambio es aumentar el número de conexiones desde la misma IP. Aunque esto es menos habitual, si se da servicio a algún cliente con muchas cuentas, puede que se conecten todos desde el mismo sitio con NAT. La solución es añadir lo siguiente al final del fichero indicado:
# Demasiadas conexiones desde el mismo router
protocol imap {
mail_max_userip_connections = 50
}
5.4. Carpeta de SPAM predeterminada
Este último ajuste es importante hacerlo para conseguir que los clientes de correo (Thunderbird, Outlook, etc. ) reconozcan adecuadamente la carpeta de Spam. Esta carpeta debe coincidir con la que se configuró previamente en Exim4. Los programas / webs gestores de correo identifican ciertas carpetas de uso especial siguiendo el RFC 6154 y Dovecot por defecto tiene la carpeta de correo no deseado establecida a Junk. Sólo hay que revisar lo siguiente en el fichero indicado:
namespace inbox {
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Trash {
special_use = \Trash
}
}