Serveur de messagerie · 9 min read · Nov 10, 2025
Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (CentOS 6.2 x86_64)
Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (CentOS 6.2 x86_64)
Version 1.0
Auteur : Falko Timme
Suivez-moi sur Twitter
Ce tutoriel est Copyright (c) 2012 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é à 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 est 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 à traiter qu’avec 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 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 Remarque préliminaire
Ce tutoriel est basé sur CentOS 6.2 x86_64, donc vous devriez configurer une installation de serveur CentOS 6.2 de base avant de continuer avec ce tutoriel (par exemple, comme montré dans les six premiers chapitres de The Perfect Server - CentOS 6.2 x86_64 avec Apache2 [ISPConfig 3]). Le système doit avoir une adresse IP statique. J’utilise 192.168.0.100 comme mon 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) et que SELinux est désactivé (c’est important !).
2 Activer des dépôts supplémentaires et installer des logiciels
Tout d’abord, nous importons les clés GPG pour les paquets logiciels :
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*Ensuite, nous activons les dépôts RPMforge et EPEL sur notre système CentOS car beaucoup des paquets que nous allons installer au cours de ce tutoriel ne sont pas disponibles dans les dépôts officiels de CentOS 6.2 :
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txtcd /tmp
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm(Si le lien ci-dessus ne fonctionne plus, vous pouvez trouver la version actuelle de rpmforge-release ici : http://packages.sw.be/rpmforge-release/)
rpm --import https://fedoraproject.org/static/0608B895.txt
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm
rpm -ivh epel-release-6-5.noarch.rpmyum install yum-prioritiesÉditez /etc/yum.repos.d/epel.repo…
vi /etc/yum.repos.d/epel.repo… et ajoutez la ligne priority=10 à la section [epel] :
| [epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [...] |
Ensuite, nous mettons à jour nos paquets existants sur le système :
yum updateMaintenant, nous installons quelques logiciels dont nous avons besoin plus tard :
yum groupinstall 'Development Tools'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 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 db4-devel mod_ssl telnet4 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 maintenant un compte utilisateur normal (falko dans cet exemple) et lui donnons un mot de passe :
useradd -m -s /bin/bash falko
passwd falkoNous 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
visudoDans 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 :
| [...] ## Allow root to run any commands anywhere root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |
Maintenant, nous sommes prêts à construire notre paquet rpm. Devenez d’abord l’utilisateur falko :
su falkoEnsuite, 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_64echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacrosMaintenant, 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/downloadswget https://sourceforge.net/projects/courier/files/authlib/0.63.0/courier-authlib-0.63.0.tar.bz2/download
wget https://sourceforge.net/projects/courier/files/imap/4.9.3/courier-imap-4.9.3.tar.bz2/download
wget https://sourceforge.net/projects/courier/files/maildrop/2.5.5/maildrop-2.5.5.tar.bz2/download(Veuillez noter que j’utilise Courier-IMAP 4.9.3 ici au lieu de la version plus récente 4.10.0 car 4.10.0 dépend de systemctl qui existe pour Fedora, mais pas pour CentOS.)
Maintenant (toujours dans $HOME/downloads), nous pouvons construire courier-authlib :
sudo rpmbuild -ta courier-authlib-0.63.0.tar.bz2Aprè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_64vous montre les paquets rpm disponibles :
[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64
total 528
-rw-r--r-- 1 root root 124032 Jan 26 17:09 courier-authlib-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 270900 Jan 26 17:09 courier-authlib-debuginfo-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 35068 Jan 26 17:09 courier-authlib-devel-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17372 Jan 26 17:09 courier-authlib-ldap-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13928 Jan 26 17:09 courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13080 Jan 26 17:09 courier-authlib-pgsql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8316 Jan 26 17:09 courier-authlib-pipe-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 34068 Jan 26 17:09 courier-authlib-userdb-0.63.0-1.el6.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.63.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.63.0-1.el6.x86_64.rpmMaintenant, nous retournons à notre répertoire de téléchargements :
cd $HOME/downloadsExé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 -p /var/cache/ccache/tmp
sudo chmod o+rwx /var/cache/ccache/
sudo chmod 777 /var/cache/ccache/tmpMaintenant, 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.9.3.tar.bz2Aprè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_64La commande
ls -lvous montre les paquets rpm disponibles :
[falko@server1 x86_64]$ ls -l
total 1088
-rw-r--r-- 1 falko falko 333540 Jan 26 17:27 courier-imap-4.9.3-1.x86_64.rpm
-rw-r--r-- 1 falko falko 776100 Jan 26 17:27 courier-imap-debuginfo-4.9.3-1.x86_64.rpm
[falko@server1 x86_64]$ Vous pouvez installer courier-imap comme ceci :
sudo rpm -ivh courier-imap-4.9.3-1.x86_64.rpmMaintenant, nous retournons à notre répertoire de téléchargements :
cd $HOME/downloadset exécutez rpmbuild à nouveau, cette fois pour construire un paquet maildrop :
sudo rpmbuild -ta maildrop-2.5.5.tar.bz2Aprè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_64vous montre les paquets rpm disponibles :
[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64
total 1712
-rw-r--r-- 1 root root 124032 Jan 26 17:09 courier-authlib-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 270900 Jan 26 17:09 courier-authlib-debuginfo-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 35068 Jan 26 17:09 courier-authlib-devel-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17372 Jan 26 17:09 courier-authlib-ldap-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13928 Jan 26 17:09 courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13080 Jan 26 17:09 courier-authlib-pgsql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8316 Jan 26 17:09 courier-authlib-pipe-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 34068 Jan 26 17:09 courier-authlib-userdb-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 286480 Jan 26 17:32 maildrop-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 751348 Jan 26 17:32 maildrop-debuginfo-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 102108 Jan 26 17:32 maildrop-devel-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 65940 Jan 26 17:32 maildrop-man-2.5.5-1.x86_64.rpm
[falko@server1 downloads]$Vous pouvez maintenant installer maildrop comme ceci :
sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.5.5-1.x86_64.rpmAprès avoir compilé et installé tous les paquets nécessaires, vous pouvez redevenir root en tapant
exit5 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 de Postfix et l’installer.
cd /usr/src
wget http://vault.centos.org/6.2/os/Source/SPackages/postfix-2.6.6-2.2.el6_1.src.rpm
rpm -ivh postfix-2.6.6-2.2.el6_1.src.rpmLa 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 rootcd /root/rpmbuild/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-2.6.5-vda-ng.patch.gz
gunzip postfix-2.6.5-vda-ng.patch.gz
cd /root/rpmbuild/SPECS/Maintenant, nous devons éditer le fichier postfix.spec :
vi postfix.specAjoutez Patch0: postfix-2.6.5-vda-ng.patch à la strophe # Patches, et %patch0 -p1 -b .vda-ng à la strophe %setup -q :
| [...] # Patches Patch0: postfix-2.6.5-vda-ng.patch Patch1: postfix-2.6.1-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.1-datecalc.patch Patch10: postfix-2.6.6-CVE-2011-0411.patch Patch11: postfix-2.6.6-CVE-2011-1720.patch [...] %prep %setup -q # Apply obligatory patches %patch0 -p1 -b .vda-ng %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |
Ensuite, nous construisons notre nouveau paquet rpm de Postfix avec support de quota et MySQL :
rpmbuild -ba postfix.specNotre paquet rpm de 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_64La commande
ls -lvous montre les paquets disponibles :
[root@server1 x86_64]# ls -l
total 10728
-rw-r--r-- 1 root root 124032 Jan 26 17:09 courier-authlib-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 270900 Jan 26 17:09 courier-authlib-debuginfo-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 35068 Jan 26 17:09 courier-authlib-devel-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17372 Jan 26 17:09 courier-authlib-ldap-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13928 Jan 26 17:09 courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13080 Jan 26 17:09 courier-authlib-pgsql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8316 Jan 26 17:09 courier-authlib-pipe-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 34068 Jan 26 17:09 courier-authlib-userdb-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 286480 Jan 26 17:32 maildrop-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 751348 Jan 26 17:32 maildrop-debuginfo-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 102108 Jan 26 17:32 maildrop-devel-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 65940 Jan 26 17:32 maildrop-man-2.5.5-1.x86_64.rpm
[root@server1 x86_64]# Pour vous assurer qu’aucune version de postfix n’était précédemment installée sur votre système, utilisez :
yum remove postfixChoisissez le paquet Postfix et installez-le comme ceci :
rpm -ivh postfix-2.6.6-2.2.el6.x86_64.rpmRecevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.