Serveur de messagerie · 7 min read · Oct 14, 2025
Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (Debian Wheezy)
Ce tutoriel est protégé par le droit d’auteur (c) 2013 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 Postfix basé 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é par défaut dans Postfix, 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 de 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 le spam et les virus. Je vais également montrer comment installer SquirrelMail comme interface webmail afin que les utilisateurs puissent lire et envoyer des e-mails et changer leurs mots de passe.
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 qu’à vous occuper de la base de données MySQL lorsque vous ajoutez de nouveaux utilisateurs/domaines ou modifiez des existants. Plus de commandes postmap pour créer des fichiers db, plus de rechargement de 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 guide. 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 guide 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 aucune garantie ! 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 Remarque préliminaire
Ce tutoriel est basé sur Debian Wheezy, vous devez donc configurer une installation de serveur Debian Wheezy de base avant de continuer avec ce tutoriel. Le système doit avoir une adresse IP statique. J’utilise 192.168.0.100 comme adresse IP dans ce tutoriel et server1.example.com comme nom d’hôte.
Il est très important que vous fassiez de /bin/sh un lien symbolique vers /bin/bash…
dpkg-reconfigure dashUtiliser dash comme shell système par défaut (/bin/sh) ? <– Non
… et que vous désactiviez AppArmor :
/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils2 Installer Postfix, Courier, Saslauthd, MySQL, phpMyAdmin
Pour installer Postfix, Courier, Saslauthd, MySQL et phpMyAdmin, nous exécutons simplement
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpassVous serez invité à répondre à quelques questions :
Type général de configuration de messagerie : <– Internet Site
Nom de messagerie du système : <– server1.example.com
Nouveau mot de passe pour l’utilisateur MySQL “root” : <– votremotdepasseSQLroot
Répéter le mot de passe pour l’utilisateur MySQL “root” : <– votremotdepasseSQLroot
Créer des répertoires pour l’administration web ? <– Non
Certificat SSL requis <– Ok
Serveur web à reconfigurer automatiquement : <– apache2
Configurer la base de données pour phpmyadmin avec dbconfig-common ? <– Non
3 Appliquer le patch de quota à Postfix
Nous devons obtenir les sources de Postfix, les patcher avec le patch de quota, construire de nouveaux paquets Postfix.deb et installer ces paquets .deb :
apt-get build-dep postfixcd /usr/src
apt-get source postfix(Assurez-vous d’utiliser la version correcte de Postfix dans les commandes suivantes. J’ai installé Postfix 2.9.6. Vous pouvez découvrir votre version de Postfix en exécutant
postconf -d | grep mail_versionLa sortie devrait ressembler à ceci :
root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.9.6
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#)
wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.6.patch
cd postfix-2.9.6
patch -p1 < ../postfix-vda-v11-2.9.6.patchEnsuite, ouvrez debian/rules et changez DEB_BUILD_HARDENING de 1 à 0 :
vi debian/rules| [...] export DEB_BUILD_HARDENING=0 [...] |
Si vous ne faites pas cela, votre construction échouera avec les messages d’erreur suivants :
maildir.c: In function âdeliver_maildirâ:
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c: In function âsql2fileâ:
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]
cc1: some warnings being treated as errors
make: * [maildir.o] Error 1
make: Leaving directory `/usr/src/postfix-2.9.3/src/virtual'
make[1]: * [update] Error 1
make[1]: Leaving directory `/usr/src/postfix-2.9.3'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
root@server1:/usr/src/postfix-2.9.3#Maintenant, nous pouvons construire les nouveaux paquets Postfix.deb :
dpkg-buildpackageMaintenant, nous montons d’un répertoire, c’est là que les nouveaux paquets .deb ont été créés :
cd ..La commande
ls -lvous montre les paquets disponibles :
root@server1:/usr/src# ls -l
total 8400
drwxr-xr-x 4 root root 4096 May 7 01:24 linux-headers-3.2.0-4-amd64
drwxr-xr-x 4 root root 4096 May 7 01:24 linux-headers-3.2.0-4-common
lrwxrwxrwx 1 root root 23 Jun 24 2012 linux-kbuild-3.2 -> ../lib/linux-kbuild-3.2
drwxr-xr-x 18 root root 4096 Jul 1 21:13 postfix-2.9.6
-rw-r--r-- 1 root root 3561 Jul 1 21:13 postfix_2.9.6-2_amd64.changes
-rw-r--r-- 1 root root 1529980 Jul 1 21:13 postfix_2.9.6-2_amd64.deb
-rw-r--r-- 1 root root 254432 Jul 1 21:12 postfix_2.9.6-2.diff.gz
-rw-r--r-- 1 root root 1492 Jul 1 21:12 postfix_2.9.6-2.dsc
-rw-r--r-- 1 root root 3767309 Mar 11 15:03 postfix_2.9.6.orig.tar.gz
-rw-r--r-- 1 root root 255470 Jul 1 21:13 postfix-cdb_2.9.6-2_amd64.deb
-rw-r--r-- 1 root root 367774 Jul 1 21:13 postfix-dev_2.9.6-2_all.deb
-rw-r--r-- 1 root root 1294258 Jul 1 21:13 postfix-doc_2.9.6-2_all.deb
-rw-r--r-- 1 root root 264196 Jul 1 21:13 postfix-ldap_2.9.6-2_amd64.deb
-rw-r--r-- 1 root root 257322 Jul 1 21:13 postfix-mysql_2.9.6-2_amd64.deb
-rw-r--r-- 1 root root 257376 Jul 1 21:13 postfix-pcre_2.9.6-2_amd64.deb
-rw-r--r-- 1 root root 257476 Jul 1 21:13 postfix-pgsql_2.9.6-2_amd64.deb
-rw-r--r-- 1 root root 55009 May 7 08:47 postfix-vda-v11-2.9.6.patch
drwxr-xr-x 7 root root 4096 May 7 01:24 virtualbox-guest-4.1.18
root@server1:/usr/src#Choisissez les paquets postfix et postfix-mysql et installez-les comme ceci :
dpkg -i postfix_2.9.6-2_amd64.deb postfix-mysql_2.9.6-2_amd64.deb4 Créer la base de données MySQL pour Postfix/Courier
Maintenant, nous créons une base de données appelée mail :
mysqladmin -u root -p create mailEnsuite, nous allons dans le shell MySQL :
mysql -u root -pDans 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 les 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 nécessaires pour Postfix et Courier :
USE mail;CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email)
) ENGINE=MyISAM;CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) ENGINE=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 utilisée pour faire un alias d’une adresse e-mail à une autre, par exemple, transférer les e-mails de [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 les mêmes) 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 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,
| domaine | 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 faire de recherche de l’enregistrement MX DNS” (ce qui a du sens pour les adresses IP…). Si vous utilisez un nom de domaine entièrement qualifié (FQDN) à la place, vous n’utiliseriez pas les crochets.).
Au fait, (je suppose que l’adresse IP de votre système de serveur de messagerie est 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 pourrez 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.