📨 Veuillez d'abord lire l'épisode précédent !
Cet article est le cinquième de la série « Construire un serveur mail sous Linux ».
Dans le précédent épisode, nous avons analysé les quatre fichiers de configuration essentiels de Dovecot. Si vous ne l'avez pas encore lu, je vous recommande de le faire d'abord.
👉 Épisode précédent : Analyse des fichiers de configuration essentiels de Dovecot
🔄 Instructions de modification de l'ordre
Bien que nous ayons annoncé dans le dernier épisode que le auth-sql.conf.ext
serait traité dans le prochain article,
en écrivant l'article, j'ai jugé que décrire d'abord la conception de la table de la base de données était un ordre plus logique.
Par conséquent, cet article traitera du concept d'utilisateur virtuel Dovecot et de la conception de table PostgreSQL,
et dans le prochain épisode, nous expliquerons comment configurer l'intégration de Dovecot avec PostgreSQL à travers le fichier auth-sql.conf.ext
.
🎯 Qu'est-ce qu'un utilisateur virtuel Dovecot ? Pourquoi en a-t-on besoin ?
Dovecot propose deux principales méthodes d'authentification des utilisateurs.
- Authentification basée sur des comptes systèmes
- Authentification à l'aide des fichiers
/etc/passwd
et/etc/shadow
de Linux - Utiliser des comptes utilisateurs systèmes standards
-
Gestion de compte laborieuse et difficulté à créer des comptes uniquement pour les mails
-
Authentification basée sur des utilisateurs virtuels
- Authentification à l'aide d'une base de données distincte (PostgreSQL, MySQL, etc.)
- Gestion des utilisateurs de mails indépendamment des comptes systèmes
- Idéal pour les services de mail à grande échelle grâce à une sécurité et une extensibilité excellentes
Nous allons mettre en place un environnement d'utilisateurs virtuels utilisant PostgreSQL.
C'est-à-dire que nous allons authentifier en récupérant les informations sur les utilisateurs dans la base de données sans créer de véritables comptes Linux.
🔹 Avantages d'un environnement d'utilisateurs virtuels
- Sécurité accrue grâce à une séparation des comptes systèmes
- Ajout et suppression facile des comptes d'utilisateurs
- Support de multiples domaines (gestion de plusieurs domaines de mail sur un même serveur)
- Excellente extensibilité et facilité de gestion
🛠️ Conception de table dans PostgreSQL
Pour gérer efficacement les utilisateurs virtuels dans Dovecot, un minimum de 3 tables est nécessaire.
1️⃣ Composition des tables essentielles
mail_domain
- Liste des domaines gérés par le serveur mailmail_users
- Informations sur les utilisateurs mails réelsmail_alias
- Gestion des alias email (transferts)
La raison de cette séparation est l'extensibilité et la facilité de maintenance.
Elle s'avère très utile lorsque l'on gère plusieurs domaines de mail ou que l'on transfère des e-mails vers une autre adresse.
2️⃣ Schéma de table et exemple SQL
📌 1. mail_domain (gestion de la liste des domaines)
Table gérant les domaines autorisés sur le serveur mail.
C'est-à-dire, elle définit des domaines de mail comme example.com
, mydomain.com
.
CREATE TABLE mail_domain (
id SERIAL PRIMARY KEY,
domain_name VARCHAR(255) NOT NULL UNIQUE,
active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT NOW()
);
🔹 Description
- domain_name
→ Domaine de mail (ex: example.com
)
- active
→ Utilisation de ce domaine ou non (peut être désactivé)
- created_at
→ Date de création
Exemple d'insertion de données échantillon
INSERT INTO mail_domain (domain_name) VALUES ('example.com');
INSERT INTO mail_domain (domain_name) VALUES ('mydomain.com');
📌 2. mail_users (comptes utilisateurs mail)
Informations sur les comptes d'utilisateurs qui utiliseront réellement les mails sont stockées.
Chaque utilisateur doit appartenir à un domaine spécifique.
CREATE TABLE mail_users (
id SERIAL PRIMARY KEY,
domain_id INT NOT NULL REFERENCES mail_domain(id) ON DELETE CASCADE,
email VARCHAR(255) NOT NULL UNIQUE,
password TEXT NOT NULL,
home_directory TEXT NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
🔹 Description
- domain_id
→ Connecté à l'id
de la table mail_domain
(domaine auquel appartient l'utilisateur mail)
- email
→ Adresse email de l'utilisateur (user@example.com
)
- password
→ Mot de passe stocké de manière chiffrée
- home_directory
→ Chemin d'enregistrement des mails (/var/mail/vmail/user@example.com
)
- created_at
→ Date de création du compte
Exemple d'insertion de données échantillon
INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', 'hashed_password_here', '/var/mail/vmail/user@example.com');
📌 3. mail_alias (alias email / transfert) Nécessaire pour transférer une adresse mail vers une autre adresse ou utiliser plusieurs alias pour une seule adresse.
CREATE TABLE mail_alias (
id SERIAL PRIMARY KEY,
domain_id INT NOT NULL REFERENCES mail_domain(id) ON DELETE CASCADE,
source_email VARCHAR(255) NOT NULL,
destination_email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
🔹 Description
- source_email → Adresse email source (ex : contact@example.com)
- destination_email → Adresse email vers laquelle le mail sera transféré (ex : admin@example.com)
- Effectue la fonction de transfert automatique d'une adresse mail vers une autre.
Exemple d'insertion de données échantillon
INSERT INTO mail_alias (domain_id, source_email, destination_email)
VALUES (1, 'contact@example.com', 'admin@example.com');
Désormais, les mails envoyés à contact@example.com seront automatiquement transférés à admin@example.com.
🔍 Tables recommandées pour de futures extensions
En plus de gérer un service de mail de base, d'autres fonctionnalités peuvent être étendues. Voici des exemples de tables pouvant être étendues ultérieurement.
Nom de la table | Rôle |
---|---|
mail_quota |
Limite de capacité de mail par utilisateur |
mail_blacklist |
Liste des emails bloqués |
mail_whitelist |
Liste des emails autorisés |
mail_forwarding |
Transfert vers un compte mail externe |
mail_autoresponder |
Gestion des messages automatiques de réponse |
mail_address_book |
Gestion du carnet d'adresses interne |
🏁 Résumé et prochaines étapes
✅ Ce que nous avons couvert dans cet article
- Le concept et la nécessité des utilisateurs virtuels Dovecot
- Conception de tables PostgreSQL (mail_domain, mail_users, mail_alias)
- Recommandations de tables supplémentaires pour l'expansion de la gestion de mail
Aperçu du prochain épisode : configuration de auth-sql.conf.ext
et méthode de hachage des mots de passe
Maintenant que les tables de la base de données sont prêtes, dans le prochain épisode, nous expliquerons comment Dovecot récupère les informations des utilisateurs dans PostgreSQL pour l'authentification,
et nous traiterons des méthodes de hachage des mots de passe à utiliser pour les comptes utilisateurs de mail.
En particulier, nous comparerons les caractéristiques et la sécurité des méthodes MD5, SHA-256, BCRYPT,
et nous verrons comment chacune de ces méthodes peut être appliquée dans Dovecot et PostgreSQL.
👉 Prochain épisode : configuration de auth-sql.conf.ext
et méthodes de hachage des mots de passe (À venir bientôt !)
Add a New Comment