Serveur de messagerie · 9 min read · Oct 13, 2025

Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (Fedora 18 x86_64)

Ce tutoriel est Copyright (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é 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 de 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 de 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 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 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 Fedora 18 x86_64, donc vous devriez configurer une installation de serveur Fedora 18 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.

Vous devez vous assurer que le pare-feu est désactivé (du moins pour l’instant).

Assurez-vous également que SELinux est désactivé :

Éditez /etc/selinux/config et définissez SELINUX=disabled :

vi /etc/selinux/config

| # Ce fichier contrôle l'état de SELinux sur le système. # SELINUX= peut prendre l'une de ces trois valeurs : # enforcing - La politique de sécurité SELinux est appliquée. # permissive - SELinux imprime des avertissements au lieu d'appliquer. # disabled - Aucune politique SELinux n'est chargée. SELINUX=disabled # SELINUXTYPE= peut prendre l'une de ces deux valeurs : # targeted - Les processus ciblés sont protégés, # minimum - Modification de la politique ciblée. Seuls les processus sélectionnés sont protégés. # mls - Protection de sécurité multi-niveau. SELINUXTYPE=targeted |

Ensuite, nous devons redémarrer le système :

reboot

2 Installer quelques logiciels

Tout d’abord, nous mettons à jour nos paquets existants sur le système :

yum update

Maintenant, nous installons quelques logiciels dont nous avons besoin plus tard :

yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'

3 Installer Apache, MySQL, phpMyAdmin

Tout cela peut être installé avec une seule commande (y compris les paquets dont nous avons besoin pour construire Courier-IMAP) :

yum install ntp httpd mod_ssl mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpMyAdmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel libidn-devel sqlite-devel

4 Installer Courier-IMAP, Courier-Authlib et Maildrop

Malheureusement, il n’existe pas de paquets rpm pour Courier-IMAP, Courier-Authlib et Maildrop, nous devons donc les construire nous-mêmes.

Les paquets RPM ne doivent pas être construits en tant que root ; courier-imap refusera même de se compiler s’il détecte que la compilation est exécutée en tant qu’utilisateur root. Nous créons donc un compte utilisateur normal maintenant (falko dans cet exemple) et lui donnons un mot de passe :

useradd -m -s /bin/bash falko  
passwd falko

Nous aurons besoin de la commande sudo plus tard afin que l’utilisateur falko puisse compiler et installer les paquets rpm. Mais d’abord, nous devons permettre à falko d’exécuter toutes les commandes en utilisant sudo :

Exécutez

visudo

Dans le fichier qui s’ouvre, il y a une ligne root ALL=(ALL) ALL. Ajoutez une ligne similaire pour falko juste en dessous de cette ligne :

| [...] ## Autoriser root à exécuter n'importe quelle commande n'importe où root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |

Maintenant, nous sommes prêts à construire notre paquet rpm. D’abord, devenons l’utilisateur falko :

su falko

Ensuite, nous créons notre environnement de construction :

mkdir $HOME/rpm  
mkdir $HOME/rpm/SOURCES  
mkdir $HOME/rpm/SPECS  
mkdir $HOME/rpm/BUILD  
mkdir $HOME/rpm/BUILDROOT  
mkdir $HOME/rpm/SRPMS  
mkdir $HOME/rpm/RPMS  
mkdir $HOME/rpm/RPMS/i386  
mkdir $HOME/rpm/RPMS/x86_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

Maintenant, nous créons un répertoire de téléchargements et téléchargeons les fichiers sources depuis http://www.courier-mta.org/download.php :

mkdir $HOME/downloads  
cd $HOME/downloads
wget https://sourceforge.net/projects/courier/files/authlib/0.65.0/courier-authlib-0.65.0.tar.bz2  
wget https://sourceforge.net/projects/courier/files/imap/4.12.0/courier-imap-4.12.0.tar.bz2  
wget https://sourceforge.net/projects/courier/files/maildrop/2.6.0/maildrop-2.6.0.tar.bz2

Maintenant (toujours dans $HOME/downloads), nous pouvons construire courier-authlib :

sudo rpmbuild -ta courier-authlib-0.65.0.tar.bz2

Après le processus de construction, les paquets rpm peuvent être trouvés dans /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 si vous êtes sur un système i386). La commande

sudo ls -l /root/rpmbuild/RPMS/x86_64

vous montre les paquets rpm disponibles :

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 616  
-rw-r--r-- 1 root root 140580 Jan 31 17:14 courier-authlib-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root 324148 Jan 31 17:14 courier-authlib-debuginfo-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  38928 Jan 31 17:14 courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  18756 Jan 31 17:14 courier-authlib-ldap-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  13044 Jan 31 17:14 courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  14208 Jan 31 17:14 courier-authlib-pgsql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   9356 Jan 31 17:14 courier-authlib-pipe-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  11696 Jan 31 17:14 courier-authlib-sqlite-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  37580 Jan 31 17:14 courier-authlib-userdb-0.65.0-1.fc18.x86_64.rpm  
[falko@server1 downloads]$

Sélectionnez ceux que vous souhaitez installer et installez-les comme ceci :

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/courier-authlib-0.65.0-1.fc18.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm

Maintenant, nous retournons dans notre répertoire de téléchargements :

cd $HOME/downloads

Exécutez les commandes suivantes pour créer les répertoires requis/changer les permissions du répertoire (sinon, le processus de construction pour Courier-Imap échouera) :

sudo mkdir /var/cache/ccache/tmp  
sudo chmod o+rwx /var/cache/ccache/  
sudo chmod 777 /var/cache/ccache/tmp

Maintenant, exécutez rpmbuild à nouveau, cette fois sans sudo, sinon la compilation échouera car elle a été exécutée en tant que root :

rpmbuild -ta courier-imap-4.12.0.tar.bz2

Après le processus de construction, les paquets rpm peuvent être trouvés dans $HOME/rpm/RPMS/x86_64 ($HOME/rpm/RPMS/i386 si vous êtes sur un système i386) :

cd $HOME/rpm/RPMS/x86_64

La commande

ls -l

vous montre les paquets rpm disponibles :

[falko@server1 x86_64]$ ls -l  
total 1256  
-rw-rw-r-- 1 falko falko 344996 Jan 31 17:19 courier-imap-4.12.0-1.18.x86_64.rpm  
-rw-rw-r-- 1 falko falko 934056 Jan 31 17:19 courier-imap-debuginfo-4.12.0-1.18.x86_64.rpm  
[falko@server1 x86_64]$

Vous pouvez installer courier-imap comme ceci :

sudo rpm -ivh courier-imap-4.12.0-1.18.x86_64.rpm

Maintenant, nous retournons dans notre répertoire de téléchargements :

cd $HOME/downloads

et exécutons rpmbuild à nouveau, cette fois pour construire un paquet maildrop :

sudo rpmbuild -ta maildrop-2.6.0.tar.bz2

Après le processus de construction, les paquets rpm peuvent être trouvés dans /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 si vous êtes sur un système i386). La commande

sudo ls -l /root/rpmbuild/RPMS/x86_64

vous montre les paquets rpm disponibles :

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 1880  
-rw-r--r-- 1 root root 140580 Jan 31 17:14 courier-authlib-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root 324148 Jan 31 17:14 courier-authlib-debuginfo-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  38928 Jan 31 17:14 courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  18756 Jan 31 17:14 courier-authlib-ldap-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  13044 Jan 31 17:14 courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  14208 Jan 31 17:14 courier-authlib-pgsql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   9356 Jan 31 17:14 courier-authlib-pipe-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  11696 Jan 31 17:14 courier-authlib-sqlite-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  37580 Jan 31 17:14 courier-authlib-userdb-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root 309340 Jan 31 17:23 maildrop-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root 805928 Jan 31 17:23 maildrop-debuginfo-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root 105756 Jan 31 17:23 maildrop-devel-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root  66416 Jan 31 17:23 maildrop-man-2.6.0-1.18.x86_64.rpm  
[falko@server1 downloads]$

Vous pouvez maintenant installer maildrop comme ceci :

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.6.0-1.18.x86_64.rpm

Après avoir compilé et installé tous les paquets nécessaires, vous pouvez redevenir root en tapant

exit

5 Appliquer le patch de quota à Postfix

Nous devons obtenir le rpm source de Postfix, le patcher avec le patch de quota, construire un nouveau paquet rpm Postfix et l’installer.

cd /usr/src  
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/fedora/linux/releases/18/Everything/source/SRPMS/p/postfix-2.9.4-3.fc18.src.rpm  
rpm -ivh postfix-2.9.4-3.fc18.src.rpm

La dernière commande affichera quelques avertissements que vous pouvez ignorer :

warning: user mockbuild does not exist - using root  
warning: group mockbuild does not exist - using root
cd /root/rpmbuild/SOURCES  
wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.4.patch  
cd /root/rpmbuild/SPECS/

Maintenant, nous devons éditer le fichier postfix.spec :

vi postfix.spec

Ajoutez Patch0: postfix-vda-v11-2.9.4.patch à la section # Patches, et %patch0 -p1 -b .vda-v11 à la section %setup -q :

| [...] # Patches Patch0: postfix-vda-v11-2.9.4.patch Patch1: postfix-2.7.0-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.3-datecalc.patch [...] %prep %setup -q # Appliquer les patches obligatoires %patch0 -p1 -b .vda-v11 %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |

Avant de construire le nouveau paquet Postfix, nous devons installer sa dépendance libdb-devel - et comme libdb-devel entre en conflit avec db4-devel, nous devons d’abord supprimer ce paquet :

yum remove db4-devel
yum install libdb-devel

Ensuite, nous construisons notre nouveau paquet rpm Postfix avec support de quota et MySQL :

rpmbuild -ba postfix.spec

Notre paquet rpm Postfix est créé dans /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 si vous êtes sur un système i386), donc nous y allons :

cd /root/rpmbuild/RPMS/x86_64

La commande

ls -l

vous montre les paquets disponibles :

[root@server1 x86_64]# ls -l  
total 10504  
-rw-r--r-- 1 root root  140580 Jan 31 17:14 courier-authlib-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  324148 Jan 31 17:14 courier-authlib-debuginfo-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   38928 Jan 31 17:14 courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   18756 Jan 31 17:14 courier-authlib-ldap-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   13044 Jan 31 17:14 courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   14208 Jan 31 17:14 courier-authlib-pgsql-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root    9356 Jan 31 17:14 courier-authlib-pipe-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   11696 Jan 31 17:14 courier-authlib-sqlite-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   37580 Jan 31 17:14 courier-authlib-userdb-0.65.0-1.fc18.x86_64.rpm  
-rw-r--r-- 1 root root  309340 Jan 31 17:23 maildrop-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root  805928 Jan 31 17:23 maildrop-debuginfo-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root  105756 Jan 31 17:23 maildrop-devel-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root   66416 Jan 31 17:23 maildrop-man-2.6.0-1.18.x86_64.rpm  
-rw-r--r-- 1 root root 2553200 Jan 31 17:30 postfix-2.9.4-3.fc18.x86_64.rpm  
-rw-r--r-- 1 root root 6203284 Jan 31 17:30 postfix-debuginfo-2.9.4-3.fc18.x86_64.rpm  
-rw-r--r-- 1 root root   66108 Jan 31 17:30 postfix-perl-scripts-2.9.4-3.fc18.x86_64.rpm  
[root@server1 x86_64]#

Choisissez le paquet Postfix et installez-le comme ceci :

rpm -ivh postfix-2.9.4-3.fc18.x86_64.rpm
Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.