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

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:

  • 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.

protocols = imap pop3
disable_plaintext_auth = no
verbose_proctitle = yes

# Debug: Cuando algo falle lo activo y curioseo el log
# auth_verbose = yes

mail_uid = vmail
mail_gid = vmail
mail_location = maildir:%h

passdb {
        args = /etc/dovecot/dovecot-sql.conf.ext
        driver = sql
}
# Necesario para las variables %h
userdb {
        args = /etc/dovecot/dovecot-sql.conf.ext
        driver = sql
}

Nota

Existe una configuración alternativa consistente en activar en 10-auth.conf la inclusión !include auth-sql.conf.ext y se podrían eliminar las 2 directivas passdb de local.conf

La configuración MySQL se debe realizar en un fichero separado y Debian propone usar /etc/dovecot-sql.conf.ext. Este fichero trae ejemplos comentados, y sin tocar nada, al final añado lo siguiente:

# Configuración MySQL concordante con la configuración de Exim4

driver = mysql
connect = host=localhost dbname=DB_NAME user=DB_USER password=DB_PASS

# Consultas

user_query = SELECT CONCAT('/home/vmail/',maildir) AS home \
  FROM mod_exim4_mailboxes WHERE email = '%u'

password_query = SELECT NULL AS password, 'Y' as nopassword, email AS user \
   FROM mod_exim4_mailboxes WHERE email = '%u' AND password = sha2('%w',256);

Atención

No te olvides de poner la la base de datos, usuario y contraseña en la línea resaltada.

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

Fichero: /etc/dovecot/local.conf
ssl = required
ssl_ca = /etc/letsencrypt/live/mail.art-website.com/chain.pem
ssl_cert = </etc/letsencrypt/live/mail.art-website.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.art-website.com/privkey.pem
ssl_dh = </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
  }

}