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:

  1. Instalar Dovecot como servidor IMAP/POP3

  2. Integrarlo con la configuración MySQL de Exim4 con MySQL y usuarios virtuales

  3. Configurar la seguridad SSL usando el mismo procedimiento usando en la sección Certificados digitales

  4. 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:

Fichero: /etc/dovecot/conf.d/10-mail.conf (lineas ~36-39)
#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:

protocols = 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.

Fichero: /etc/dovecot/local.conf
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:

Fichero: /var/log/mail.log
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:

Fichero: /etc/dovecot/conf.d10-master.conf
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:

Fichero: /etc/dovecot/local.conf
# 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:

Fichero: /etc/dovecot/conf.d/15-mailboxes.conf
namespace inbox {
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Trash {
    special_use = \Trash
  }

}