Lea primero la parte anterior
Este artículo es el sexto de la serie "Construir un servidor de correo en Linux".
En la parte anterior, completamos el diseño de la tabla de cuentas de usuario virtual utilizando PostgreSQL.
Si aún no lo ha revisado, le recomiendo que lo lea primero.
👉 Parte anterior: Concepto de usuario virtual de Dovecot y diseño de tabla de PostgreSQL


¿Qué es la configuración auth-sql.conf.ext de Dovecot?

Para que Dovecot autentique usuarios virtuales a través de una base de datos y no de cuentas del sistema, es necesario configurar el archivo auth-sql.conf.ext.
Esta configuración permite que Dovecot obtenga información del usuario desde PostgreSQL para su autenticación.


Configuración de autenticación SQL de Dovecot (auth-sql.conf.ext)

Los principales elementos que deben configurarse para conectar Dovecot a PostgreSQL son los siguientes:

1. Ruta del archivo de configuración

El archivo de configuración se encuentra en la siguiente ruta.

/etc/dovecot/conf.d/auth-sql.conf.ext

Si no existe el archivo, se puede crear con el siguiente comando.

sudo touch /etc/dovecot/conf.d/auth-sql.conf.ext

2. Elementos de configuración clave

driver = sql
connect = host=localhost dbname=mail user=mailadmin password=yourpassword

default_pass_scheme = SHA256-CRYPT

password_query = SELECT email AS user, password FROM mail_users WHERE email='%u';

user_query = SELECT home_directory AS home FROM mail_users WHERE email='%u';

Descripción de la configuración

  • driver = sql → Uso de autenticación basada en SQL
  • connect = host=localhost dbname=mail user=mailadmin password=yourpassword → Información de conexión de PostgreSQL
  • default_pass_scheme = SHA256-CRYPT → Especificación del algoritmo de hash de contraseñas por defecto. Si se usa bcrypt, configurar como 'BLF-CRYPT'
  • password_query → Compara la contraseña ingresada por el usuario con el valor hash obtenido de la base de datos
  • user_query → Devuelve la ruta de almacenamiento del correo del usuario

3. Reinicio del servicio Dovecot

Después de aplicar la configuración, reinicie Dovecot.

sudo systemctl restart dovecot

Prueba de vinculación de Dovecot y PostgreSQL

Para verificar si la configuración se ha aplicado correctamente, use el siguiente comando.

1. Prueba de autenticación

doveadm auth test user@example.com password123

Si se ha configurado correctamente, la autenticación passdb debería ser exitosa.

2. Verificar registros de errores

Si la configuración no se aplica correctamente, puede verificar los registros para analizar la causa.

journalctl -xe | grep dovecot

Autenticación segura en el servidor de correo

Tipos de hash de contraseñas (comparación y aplicación de MD5, SHA-256, BCRYPT)

Cuando Dovecot y PostgreSQL están vinculados, las contraseñas deben guardarse en formato hash.
La seguridad y el rendimiento varían según el método de hash utilizado.

1. Comparación de métodos de hash

Método de hash Nivel de seguridad Velocidad Ejemplo de uso
MD5 Vulnerable (posible colisión) Desaconsejado
SHA-256 Intermedio (razonablemente seguro) Moderado Para seguridad general
BCRYPT Seguridad fuerte Lento Requerimientos de alta seguridad

Dado que se conocen las vulnerabilidades de MD5, es mejor no utilizarlo.
SHA-256 es generalmente ampliamente utilizado y ofrece un equilibrio entre velocidad y seguridad.
BCRYPT, aunque proporciona la mayor seguridad, es más lento y se debe considerar con opciones adecuadas en entornos donde el rendimiento es crucial.


Hashing de contraseñas utilizando comandos de Dovecot (doveadm pw)

También se puede hacer hashing de contraseñas directamente en Dovecot.

1. Hashing SHA-256

doveadm pw -s SHA256-CRYPT

Al ingresar la contraseña, se generará un hash como el siguiente.

{SHA256-CRYPT}$5$rounds=5000$abc123def456$ABCDEF1234567890ABCDEF1234567890

2. Hashing BCRYPT

doveadm pw -s BLF-CRYPT

Ejemplo de salida:

{BLF-CRYPT}$2a$05$abcdefghij1234567890ABCDEFGHIJKL$CDEFGHIJKLMNOPQRSTUVWXYZ123456

Este valor hash debe guardarse en la tabla mail_users de PostgreSQL.


Hashing directo en PostgreSQL (usando la extensión pgcrypto)

Al usar la extensión pgcrypto en PostgreSQL, se pueden hacer hashes de contraseñas sin necesidad de doveadm.

1. Activar la extensión pgcrypto

CREATE EXTENSION IF NOT EXISTS pgcrypto;

2. Guardando contraseñas hashed con SHA-256

INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf')), '/var/mail/vmail/user@example.com');

3. Guardando contraseñas hashed con BCRYPT

INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf', 12)), '/var/mail/vmail/user@example.com');

Resumen y próximos pasos

Temas cubiertos en este artículo - Cómo configurar auth-sql.conf.ext de Dovecot
- Cómo probar la vinculación entre Dovecot y PostgreSQL
- Cómo aplicar los métodos de hashing SHA-256 y BCRYPT
- Cómo hacer hashing directamente en PostgreSQL

Anticipación de la próxima parte: Integración de autenticación SMTP entre Postfix y Dovecot
Ahora que hemos configurado Dovecot, el siguiente paso es configurar Postfix para que utilice la autenticación de Dovecot.

👉 Próxima parte: Integración de autenticación SMTP entre Postfix y Dovecot (¡Próximamente!)