Veuillez lire l'épisode précédent d'abord
Cet article est le sixième de la série "Construire un serveur mail sous Linux".
Dans l'épisode précédent, nous avons terminé la conception de la table des comptes utilisateurs virtuels utilisant PostgreSQL.
Si vous ne l'avez pas encore vérifié, je vous recommande de le lire d'abord.
👉 Épisode précédent : Concepts d'utilisateurs virtuels Dovecot et conception de table PostgreSQL


Qu'est-ce que la configuration auth-sql.conf.ext de Dovecot ?

Pour que Dovecot authentifie les utilisateurs virtuels via une base de données et non des comptes système, il est nécessaire de configurer le fichier auth-sql.conf.ext.
Cette configuration permet à Dovecot de récupérer les informations utilisateur depuis PostgreSQL pour l'authentification.


Configuration de l'authentification SQL de Dovecot (auth-sql.conf.ext)

Voici les principaux éléments à configurer pour que Dovecot se connecte à PostgreSQL :

1. Chemin du fichier de configuration

Le fichier de configuration se trouve au chemin suivant.

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

Si le fichier n'existe pas, vous pouvez le créer avec la commande suivante.

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

2. Éléments de configuration principaux

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';

Description de la configuration

  • driver = sql → Utilisation de l'authentification basée sur SQL
  • connect = host=localhost dbname=mail user=mailadmin password=yourpassword → Informations de connexion PostgreSQL
  • default_pass_scheme = SHA256-CRYPT → Spécifie l'algorithme de hachage de mot de passe par défaut. S'il utilise bcrypt, définir sur 'BLF-CRYPT'
  • password_query → Compare le mot de passe saisi par l'utilisateur avec la valeur hachée récupérée de la base de données
  • user_query → Retourne le chemin de stockage mail de l'utilisateur

3. Redémarrage du service Dovecot

Après avoir appliqué les configurations, redémarrez Dovecot.

sudo systemctl restart dovecot

Test d'intégration entre Dovecot et PostgreSQL

Pour vérifier que la configuration a été appliquée correctement, utilisez la commande suivante.

1. Test d'authentification

doveadm auth test user@example.com password123

Si la configuration est correcte, l'authentification via passdb doit réussir.

2. Vérification des logs d'erreur

Si la configuration n'est pas appliquée correctement, vous pouvez analyser les logs pour trouver la cause.

journalctl -xe | grep dovecot

Authentification sécurisée dans le serveur mail

Méthodes de hachage de mot de passe (comparaison et application de MD5, SHA-256, BCRYPT)

Lorsque Dovecot est intégré avec PostgreSQL, les mots de passe doivent être stockés sous forme hachée.
Les performances et la sécurité diffèrent selon la méthode de hachage.

1. Comparaison des méthodes de hachage

Méthode de hachage Niveau de sécurité Vitesse Exemples d'utilisation
MD5 Vulnérable (collision possible) Rapide Déconseillée
SHA-256 Moyenne (relativement sûre) Normale Utilisation générale pour les besoins de sécurité
BCRYPT Sécurité élevée Lente Lorsque des exigences de sécurité élevées sont nécessaires

Il est préférable de ne pas utiliser MD5 en raison de ses vulnérabilités connues.
SHA-256 est largement utilisé et équilibre vitesse et sécurité.
BCRYPT offre la sécurité la plus forte mais est lent, donc il faut envisager des options adéquates dans des environnements où la performance est cruciale.


Hachage avec la commande Dovecot (doveadm pw)

Il est également possible de hacher des mots de passe directement dans Dovecot.

1. Hachage SHA-256

doveadm pw -s SHA256-CRYPT

En entrant le mot de passe, un hachage comme suit sera généré.

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

2. Hachage BCRYPT

doveadm pw -s BLF-CRYPT

Exemple de sortie :

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

Il suffit de stocker cette valeur hachée dans la table mail_users de PostgreSQL.


Hachage direct dans PostgreSQL (pgcrypto extension)

Avec l'extension pgcrypto de PostgreSQL, vous pouvez hacher des mots de passe sans doveadm.

1. Activation de l'extension pgcrypto

CREATE EXTENSION IF NOT EXISTS pgcrypto;

2. Hachage SHA-256 pour stocker le mot de passe

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. Hachage BCRYPT pour stocker le mot de passe

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');

Résumé et prochaines étapes

Ce qui a été couvert dans cet article - Méthode de configuration de auth-sql.conf.ext de Dovecot
- Comment tester l'intégration entre Dovecot et PostgreSQL
- Comment appliquer les méthodes de hachage SHA-256 et BCRYPT
- Comment hacher directement dans PostgreSQL

Aperçu du prochain article : Intégration de l'authentification SMTP de Postfix avec Dovecot
Maintenant que Dovecot est configuré, la prochaine étape est de configurer Postfix pour utiliser l'authentification de Dovecot.

👉 Prochain épisode : Intégration de l'authentification SMTP de Postfix avec Dovecot (Bientôt disponible !)