Serveur de messagerie · 6 min read · Nov 11, 2025
Utilisateurs et domaines virtuels avec Postfix, Courier et MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)
Ceci est un “copier & coller” HowTo ! La façon la plus simple de suivre ce tutoriel est d’utiliser un client de ligne de commande/client SSH (comme PuTTY pour Windows) et de simplement copier et coller les commandes (sauf lorsque vous devez fournir vos propres informations comme les adresses IP, les noms d’hôte, les mots de passe,…). Cela aide à éviter les fautes de frappe.
Utilisateurs et domaines virtuels avec Postfix, Courier et MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)
Version 1.0
Auteur : Falko Timme
Ce tutoriel est protégé par le droit d’auteur (c) 2005 par Falko Timme. Il est dérivé d’un tutoriel de Christoph Haas que vous pouvez trouver sur http://workaround.org. Vous êtes libre d’utiliser ce tutoriel sous la licence Creative Commons 2.5 ou toute version ultérieure.
Ce document décrit comment installer un serveur de messagerie basé sur Postfix qui repose sur des utilisateurs et des domaines virtuels, c’est-à-dire des utilisateurs et des domaines qui se trouvent dans une base de données MySQL. Je vais également démontrer l’installation et la configuration de Courier (Courier-POP3, Courier-IMAP), afin que Courier puisse s’authentifier contre la même base de données MySQL utilisée par Postfix.
Le serveur Postfix résultant est capable de SMTP-AUTH et TLS et quota (le quota n’est pas intégré dans Postfix par défaut, je vais montrer comment patcher votre Postfix en conséquence). Les mots de passe sont stockés sous forme chiffrée dans la base de données (la plupart des documents que j’ai trouvés traitaient des mots de passe en texte clair, ce qui représente un risque pour la sécurité). En plus de cela, ce tutoriel couvre l’installation de Amavisd, SpamAssassin et ClamAV afin que les e-mails soient scannés pour détecter les spams et les virus.
L’avantage d’une telle configuration “virtuelle” (utilisateurs et domaines virtuels dans une base de données MySQL) est qu’elle est beaucoup plus performante qu’une configuration basée sur de “vrais” utilisateurs système. Avec cette configuration virtuelle, votre serveur de messagerie peut gérer des milliers de domaines et d’utilisateurs. De plus, il est plus facile à administrer car vous n’avez à traiter que la base de données MySQL lorsque vous ajoutez de nouveaux utilisateurs/domaines ou modifiez des existants. Plus besoin de commandes postmap pour créer des fichiers db, plus besoin de recharger Postfix, etc. Pour l’administration de la base de données MySQL, vous pouvez utiliser des outils basés sur le web comme phpMyAdmin qui seront également installés dans ce howto. Le troisième avantage est que les utilisateurs ont une adresse e-mail comme nom d’utilisateur (au lieu d’un nom d’utilisateur + une adresse e-mail) ce qui est plus facile à comprendre et à retenir.
Ce tutoriel est basé sur Debian Sarge (Debian 3.1). Vous devriez déjà avoir configuré un système Debian de base, comme décrit ici : https://www.howtoforge.com/perfect_setup_debian_sarge et https://www.howtoforge.com/perfect_setup_debian_sarge_p2.
Ce howto est destiné à être un guide pratique ; il ne couvre pas les bases théoriques. Elles sont traitées dans de nombreux autres documents sur le web.
Ce document est fourni sans garantie d’aucune sorte ! Je tiens à dire que ce n’est pas la seule façon de configurer un tel système. Il existe de nombreuses façons d’atteindre cet objectif, mais c’est la méthode que je choisis. Je ne donne aucune garantie que cela fonctionnera pour vous !
1 Installer Postfix, Courier, Saslauthd, MySQL, phpMyAdmin
Tout cela peut être installé avec une seule commande :
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authmysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin (1 ligne !)
Vous serez interrogé sur quelques questions :
Activer suExec ? <– Oui
Créer des répertoires pour l’administration web ? <– Non
Type général de configuration ? <– Site Internet
Où doit aller le mail pour root ? <– AUCUN
Nom de mail ? <– server1.example.com
Autres destinations pour accepter le mail ? (laisser vide pour aucune) <– server1.example.com, localhost, localhost.localdomain
Forcer des mises à jour synchrones sur la file d’attente de mail ? <– Non
Certificat SSL requis <– Ok
Installer des indices <– Ok
Quel serveur web souhaitez-vous reconfigurer automatiquement ? <– apache, apache2
Voulez-vous que je redémarre apache maintenant ? <– Oui
2 Appliquer le patch de quota à Postfix
Nous devons obtenir les sources de Postfix, les patcher avec le patch de quota, construire de nouveaux paquets .deb de Postfix et installer ces paquets .deb :
apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch (1 ligne !)
cd /usr/src
apt-get source postfix
wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.1.5-trash.patch.gz
gunzip postfix-2.1.5-trash.patch.gz
cd postfix-2.1.5
patch -p1 < ../postfix-2.1.5-trash.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.1.5-9_i386.deb
dpkg -i postfix-mysql_2.1.5-9_i386.deb
dpkg -i postfix-tls_2.1.5-9_i386.deb
3 Créer la base de données MySQL pour Postfix/Courier
Par défaut, MySQL est installé sans mot de passe root, que nous changeons immédiatement (remplacez yourrootsqlpassword par le mot de passe que vous souhaitez utiliser) :
mysqladmin -u root password yourrootsqlpassword
Maintenant, nous créons une base de données appelée mail :
mysqladmin -u root -p create mail
Ensuite, nous allons dans le shell MySQL :
mysql -u root -p
Dans le shell MySQL, nous créons l’utilisateur mail_admin avec le mot de passe mail_admin_password (remplacez-le par votre propre mot de passe) qui a des privilèges SELECT,INSERT,UPDATE,DELETE sur la base de données mail. Cet utilisateur sera utilisé par Postfix et Courier pour se connecter à la base de données mail :
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;
Toujours dans le shell MySQL, nous créons les tables dont Postfix et Courier ont besoin :
USE mail;
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) TYPE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) TYPE=MyISAM;
quit;
Comme vous l’avez peut-être remarqué, avec la commande quit; nous avons quitté le shell MySQL et sommes de retour dans le shell Linux.
La table domains stockera chaque domaine virtuel pour lequel Postfix doit recevoir des e-mails (par exemple, example.com).
| domaine |
| example.com |
La table forwardings est destinée à aliaser une adresse e-mail à une autre, par exemple, transférer les e-mails pour [email protected] à [email protected].
| source | destination |
| [email protected] | [email protected] |
La table users stocke tous les utilisateurs virtuels (c’est-à-dire les adresses e-mail, car l’adresse e-mail et le nom d’utilisateur sont identiques) et les mots de passe (sous forme chiffrée !) et une valeur de quota pour chaque boîte aux lettres (dans cet exemple, la valeur par défaut est de 10485760 octets, ce qui signifie 10 Mo).
| password | quota | |
| [email protected] | No9.E4skNvGa. (“secret” sous forme chiffrée) | 10485760 |
La table transport est optionnelle, elle est destinée aux utilisateurs avancés. Elle permet de transférer des e-mails pour des utilisateurs uniques, des domaines entiers ou tous les e-mails vers un autre serveur. Par exemple,
| domain | transport |
| example.com | smtp:[1.2.3.4] |
transférerait tous les e-mails pour example.com via le protocole smtp vers le serveur avec l’adresse IP 1.2.3.4 (les crochets [] signifient “ne pas effectuer de recherche de l’enregistrement DNS MX” (ce qui a du sens pour les adresses IP…). Si vous utilisez un nom de domaine entièrement qualifié (FQDN) à la place, vous ne devriez pas utiliser les crochets.).
Au fait, (je suggère que l’adresse IP de votre système de serveur de messagerie soit 192.168.0.100) vous pouvez accéder à phpMyAdmin via http://192.168.0.100/phpmyadmin/ dans un navigateur et vous connecter en tant que mail_admin. Ensuite, vous pouvez jeter un œil à la base de données. Plus tard, vous pouvez utiliser phpMyAdmin pour administrer votre serveur de messagerie.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.