Mise en place d'un système de messagerie multidomaine avec qmail et vpopmail Mike Frysinger Camille Huot Ce document décrit l'installation d'un système de messagerie basé sur qmail, vpopmail, courier-imap, MySQL et Horde IMP, sous Gentoo Linux. 1.1 24 février 2004 Introduction

Que vous souhaitiez fournir un service de messagerie juste pour vos démons systèmes, un simple serveur, un domaine ou bien plusieurs domaines, qmail peut facilement être mis en place pour satisfaire tous vos besoins. Ce guide vous aidera à installer qmail pour chacun de ces scénarios en se concentrant sur l'accès à distance et les communications entièrement chiffrées.

Ce guide vous aidera particulièrement à installer les paquets qmail, courier-imap, vpopmail et horde/imp. Ces paquets de base auront également besoin de daemontools, ucspi-tcp, mysql, apache et mod_php. Qmail fournit les fonctions de base du MTA (agent de transfert de messages), courier-imap fournit les services de rapatriement à distance, vpopmail fournit la gestion des domaines virtuels et horde/imp fournit un webmail (consultation du courrier électronique via un navigateur).

Avant d'installer quoi que ce soit, vous devez avoir les options suivantes dans votre variable USE. Si vous avez déjà installé certains de ces paquets, il est possible que vous deviez les réinstaller. Utilisez USE="maildir ssl imap mysql". De plus, si vous voulez utiliser horde/imp pour le webmail, vous aurez besoin de USE="nls" avant d'installer mod_php.

Ce guide est écrit en étapes. Si, à un moment donné, vous sentez que votre installation est complète, vous n'avez pas besoin de continuer.

La dernière étape est évidemment de vous impliquer dans le système qmail. Il existe bien sûr plusieurs autres paquets avec lesquels vous pourriez monter votre système de messagerie. Il est maintenant temps pour vous de faire des recherches et de décider si c'est bien qmail que vous voulez. Nous avons un autre adorable guide qui décrit l'installation d'un serveur Postfix. Vous pourriez aussi jetez un œil à Exim. C'est à vous de choisir la meilleure solution pour vous ; ici, nous vous montrons comment utiliser qmail.

Qmail en local
# emerge qmail
Ce guide est fait pour qmail-1.03-r13 ou ultérieur. Est-il utilisable avec une version plus ancienne ? Peut-être. Devez-vous mettre à jour ? Oui, si vous voulez être sûr que ce guide marche correctement. Si vous obtenez un message du genre the virtual/mta package conflicts with another package, cela veut dire qu'un autre MTA est déjà installé. Vous devez désinstaller le MTA déjà présent sur votre système. Pour savoir de quel paquet il s'agit, tapez juste emerge qmail -p.

Emerge va installer ucspi-tcp et daemontools en tant que dépendances de qmail. Vous pouvez vous documenter sur ucspi-tcp et sur daemontools si vous le souhaitez. Pour résumer, daemontools sera responsable de gérer qmail en tant que service et ucspi-tcp sera responsable de la gestion des connexions TCP entrantes dans le service qmail.

D'abord, peaufinons l'installation de qmail.

(Adaptez les paramètres selon vos besoins.)
# nano /var/qmail/control/servercert.cnf
# ebuild /var/db/pkg/net-mail/qmail-1.03-r*/qmail-1.03-r*.ebuild config

La conception de qmail est complètement focalisée sur la sécurité. Ainsi, aucun message n'est jamais envoyé à l'utilisateur root. Vous devez donc choisir un utilisateur sur la machine qui recevra les messages destinés au root. À partir de maintenant, j'utiliserai le nom d'utilisateur qui est défini dans mon installation, c'est-à-dire vapier.

# cd /var/qmail/alias
# echo vapier > .qmail-root
# echo vapier > .qmail-postmaster
# echo vapier > .qmail-mailer-daemon

Maintenant, lançons le service de distribution de qmail.

# rc-update add svscan default
# /etc/init.d/svscan start
# cd /service
# ln -s /var/qmail/supervise/qmail-send qmail-send

Pour vérifier que qmail fonctionne correctement, faisons un petit test.

# ssh vapier@localhost
# qmail-inject root << EOF
test de la messagerie root !
EOF
# qmail-inject postmaster << EOF
test de la messagerie postmaster !
EOF
# qmail-inject vapier << EOF
test de la messagerie vapier !
EOF
# mutt
(Vous devriez avoir trois messages dans votre boîte aux lettres.)

Et voilà ! Vous avez maintenant un système de messagerie opérationnel qui gère les messages locaux de votre machine et des démons ou utilisateurs qui s'en servent.

Si vous ne recevez pas ces messages ou si vous voyez des erreurs étranges dans vos fichiers journaux (regardez dans /var/log/qmail/) qui font mention de « localhost.localhost », cela signifie que vos informations de domaine ne sont pas correctement configurées. Par défaut, qmail se sert de la sortie de hostname --fqdn. Si, sur votre machine, cela renvoie « localhost », alors vérifiez vos fichiers /etc/hostname, /etc/hosts et votre DNS pour vous assurer que tout est correct. Une fois ceci fait, éditez les fichiers de configuration dans /var/qmail/control/. Utilisez les exemples de configuration qui suivent si besoin.
# hostname --fqdn
wh0rd.org
# cat me
wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
wh0rd.org
# cat rcpthosts
wh0rd.org
# hostname --fqdn
mail.wh0rd.org
# cat me
mail.wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
mail.wh0rd.org
# cat rcpthosts
mail.wh0rd.org
vpopmail
# emerge vpopmail
Ce guide est fait pour vpopmail-5.4.0_rc1 ou ultérieur. Est-il utilisable avec une version plus ancienne ? Peut-être. Devez-vous mettre à jour ? Oui, si vous voulez être sûr que ce guide marche correctement.

Vpopmail est un peu plus difficile à mettre en place que les paquets précédents. Comme vpopmail s'appuie sur MySQL, nous devons d'abord nous assurez que mysql est opérationnel. Ensuite, nous pourrons configurer la base de données vpopmail. Notez que j'utiliserai le mot de passe 'vpoppw' pour la base de données vpopmail, vous devez bien sûr en choisir un autre.

# rc-update add mysql default
# /etc/init.d/mysql start
# nano /etc/vpopmail.conf
(Changez le mot de passe 'secret' en 'vpoppw'.)
# mysql -p << EOF
create database vpopmail;
use mysql;
grant select, insert, update, delete, create, drop on vpopmail.* to vpopmail@localhost identified by 'vpoppw';
flush privileges;
EOF
(Les commandes suivantes ne sont pas forcément nécessaires, mais lançons-les quand même pour être sûr.)
# chown root:vpopmail /etc/vpopmail.conf
# chmod 640 /etc/vpopmail.conf
# chown root:vpopmail /var/vpopmail/bin/vchkpw
# chmod 4711 /var/vpopmail/bin/vchkpw
Si vous obtenez des problèmes de permission entre vpopmail et mysql, essayez de relancer mysql : /etc/init.d/mysql restart.

À ce moment précis, vpopmail est prêt. Dans ce guide, nous allons fournir un hébergement multidomaine pour le domaine 'wh0rd.org'. Cela signifie que nous devons dire à vpopmail que nous voulons qu'il le gère pour nous. Nous allons aussi ajouter rapidement un compte utilisateur pour vapier tant que nous y sommes.

# vadddomain wh0rd.org postpass
(Vérifions rapidement que le domaine est correctement installé :)
# printf "postmaster@wh0rd.org\0postpass\0blah\0" | vchkpw `which id` 3<&0
uid=89(vpopmail) gid=89(vpopmail) groups=0(root)
(Si vous ne voyez pas quelque chose de similaire, alors les permissions sont incorrectes.)
# vadduser vapier@wh0rd.org vappw

Chaque domaine créé par vpopmail possède un compte postmaster. Nous indiquons ici à vpopmail que le mot de passe pour le compte postmaster est « postpass ». Avant que vpopmail soit vraiment utile, nous devons pouvoir recevoir des messages avec courier et en envoyer avec qmail et SMTP.

Courier POP/IMAP
# emerge net-mail/courier-imap
Vous devez installer courier-imap après vpopmail, de sorte que le module authvchkpw puisse être construit. Ce guide est fait pour net-mail/courier-imap-2.1.2-r1 ou ultérieur. Est-il utilisable avec une version plus ancienne ? Peut-être. Devez-vous mettre à jour ? Oui, si vous voulez être sûr que ce guide marche correctement.

Allons-y pour la configuration post-installation. Ces étapes ne sont requises que si vous souhaitez utiliser des communications chiffrées avec SSL (vous devriez). Sinon, vous pouvez vous contenter des deux dernières lignes de chacun des deux blocs de commandes suivants, en enlevant '-ssl' au nom du script à chaque fois.

# cd /etc/courier-imap
# nano authdaemonrc
(La variable authmodulelist ne doit contenir que "authvchkpw".)
# nano pop3d.cnf
(Éditez la section [ req_dn ].)
# mkpop3dcert
# rc-update add courier-pop3d-ssl default
# /etc/init.d/courier-pop3d-ssl start
# cd /etc/courier-imap
# nano imapd.cnf
(Éditez la section [ req_dn ].)
# mkimapdcert
# rc-update add courier-imapd-ssl default
# /etc/init.d/courier-imapd-ssl start

Votre client de messagerie devrait maintenant pouvoir s'identifier sur la machine qui héberge courier et devrait pouvoir ainsi récupérer les messages pour le domaine virtuel. Dans mon cas, je suis maintenant capable de me connecter avec le nom d'utilisateur « vapier@wh0rd.org » et le mot de passe « vappw ».

Qmail (parlant au reste du monde)

Allons-y pour activer SMTP sans que des personnes mal intentionnées puissent l'utiliser pour envoyer du spam (des courriers non sollicités, aussi appelés pourriels).

# cd /var/qmail/control/
# nano conf-smtpd
(Décommentez les variables SMTP-AUTH et mettez QMAIL_SMTP_CHECKPASSWORD à /var/vpopmail/bin/vchkpw.)
# nano servercert.cnf
(Éditez la section [ req_dn ].)
# mkservercert
# cd /service
# ln -s /var/qmail/supervise/qmail-smtpd qmail-smtpd
# /etc/init.d/svscan restart

Si vous n'avez pas modifié les fichiers control de qmail, le serveur accepte maintenant les messages à destination du domaine virtuel wh0rd.org et pour les utilisateurs locaux de la machine. De plus, qmail relaie tous les messages envoyés par des personnes via 127.0.0.1 ou qui se sont authentifiées avec vpopmail. Lorsque vous configurez l'émission de messages dans votre client de messagerie, assurez-vous de sélectionner des options comme « Server requires authentication ». Dans mon cas, j'ai mis le nom d'utilisateur à « vapier@wh0rd.org » et le mot de passe à « vappw ». Le dernier détail est de bien spécifier au client de messagerie d'utiliser SSL/TLS pour les communications avec le SMTP. Qmail ne vous laissera pas vous identifier si la session n'est pas chiffrée.

Le client webmail Horde IMP

Bien qu'il existe plusieurs clients webmail (vous êtes libre d'utiliser celui que vous voulez), je préfère IMP qui fait partie du projet Horde. Une bonne raison qui justifie ce choix est que Horde fournit assez simplement un accès webmail, mais vous pouvez facilement ajouter d'autres composants tels que le carnet d'adresses, l'agenda, le gestionnaire de tâches, etc. Si cela ne vous a pas encore convaincu, vous avez peut-être besoin d'en lire plus sur Horde.

Installons IMP.

# emerge horde-imp
Ce guide est fait pour horde-2.2.4 et horde-imp-3.2.2. Les versions CVS (et donc probablement les prochaines versions) auront peut-être une configuration très différente.

Horde n'est vraiment pas le plus facile à configurer, sauf si vous savez exactement ce qu'il faut faire. Heureusement pour vous, je sais exactement ce qu'il faut faire.

# cd /var/www/localhost/htdocs/horde/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano horde.php
(Dans la partie 'Horde Authentication' :)
$conf['auth']['driver'] = 'imap';
$conf['auth']['params']['dsn'] = '{localhost:993/imap/ssl}';

(Dans la partie 'Horde Logging' :)
$conf['log']['name'] = '/var/log/apache2/horde.log';

(Dans la partie 'Problem Reporting' :)
$conf['problems']['enabled'] = true;
$conf['problems']['email'] = 'webmaster@wh0rd.org';

# nano registry.php
(Dans la partie 'Handlers' :)
$this->registry['auth']['login'] = 'imp';
$this->registry['auth']['logout'] = 'imp';

(Dans la partie 'Application registry' :)
Changez l'élément 'status' de applications['imp'] de 'inactive' à 'active'.

# touch /var/log/apache2/horde.log
Vous voudrez peut-être changer l'adresse 'webmaster' pour une autre. Si vous voulez garder cette adresse, rappelez-vous qu'il faudra ajouter cet utilisateur dans vpopmail (ou avec qmailadmin, voir plus bas).

On passe rapidement à la configuration de IMP.

# cd /var/www/localhost/htdocs/horde/imp/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano servers.php

(Éditez le tableau $servers['imap'] :)
$servers['imap'] = array(
	'name' => 'wh0rd.org',
	'server' => 'localhost',
	'protocol' => 'imap/ssl/novalidate-cert',
	'port' => 993,
	'folders' => 'mail/',
	'namespace' => '',
	'maildomain' => 'wh0rd.org',
	'smtphost' => 'localhost',
	'realm' => '',
	'preferred' => ''
);

Enfin, nous lançons apache pour pouvoir utiliser le webmail.

# nano /etc/conf.d/apache
(Décommentez APACHE2_OPTS="-D SSL -D PHP4".)
# rc-update add apache2 default
# /etc/init.d/apache2 start
Il est fortement recommandé de forcer l'utilisation de HTTPS pour les utilisateurs de horde. Ce n'est pas une mince affaire, mais vous devriez vous en préoccuper pour une question de sécurité.

Pour tester notre nouveau IMP, lancez un navigateur web et allez sur http://localhost/horde/ (ou changez localhost par le nom du serveur sur lequel vous l'avez installé). Vous devriez voir la page de bienvenue de Horde, où vous pouvez vous identifier. Dans mon cas, encore une fois, j'utilise simplement « vapier@wh0rd.org » et « vappw » comme nom d'utilisateur et mot de passe.

Horde et IMP sont maintenant en place. Vous pouvez (devez) retourner voir les fichiers de configuration pour ajuster chacun des réglages selon ce que bon vous semblera.

Paquets supplémentaires
qmailadmin

Le premier paquet que je vous suggère de considérer est qmailadmin. C'est une interface web qui sert à gérer les domaines virtuels. Lancez simplement emerge net-qmail/qmailadmin et tapez http://localhost/cgi-bin/qmailadmin dans votre navigateur pour l'utiliser. Il rend la vie bien plus facile.

qmHandle

Si vous rencontrez des problèmes avec les queues de qmail et si vous avez du mal à déboguer la situation, jetez un œil à qmHandle. C'est un simple programme perl qui vous permet de voir et de gérer la queue de messages de qmail. Tout ce que vous avez à faire est emerge net-mail/qmhandle.

Extensions de Horde

Je vous recommande fortement de voir si les autres applications Horde vous intéressent. En effet, Turba, Kronolith et Nag complèteraient votre IMP à merveille. Leur configuration est similaire à celle de IMP, vous ne devriez donc pas avoir de souci. Rappelez-vous juste d'éditez registry.php dans le répertoire de configuration de horde pour que les nouvelles applications soient visibles au bas du site géré par horde.

ucspi-tcp

Qmail utilise ucspi-tcp pour gérer les connexions entrantes qui lui sont destinées. Si vous souhaitez personnaliser ses règles de filtrage, voyez les fichiers de configuration dans /etc/tcprules.d/. Vous y trouverez deux fichiers pour chaque service, le fichier de configuration (tcp.qmail-smtp) et le fichier compilé (tcp.qmail-smtp.cdb). Quand vous modifiez le fichier de configuration, vous devez reconstruire sa version binaire. Faites tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp. À chaque fois qu'une connexion est faite au service qmail, le fichier binaire des règles est relu, il n'est donc pas nécessaire de redémarrer le service.

qmail-scanner

Si vous comptez faire du filtrage de contenu sur votre serveur de messagerie (anti-virus ou anti-spam par exemple), vous aurez besoin d'utiliser un gestionnaire de queue différent de celui par défaut. Un bon programme pour faire ça est qmail-scanner. Faites juste emerge net-mail/qmail-scanner et éditez le fichier /etc/tcprules.d/tcp.qmail-smtp.

# cd /etc/tcprules.d/
# nano tcp.qmail-smtp
(Ajoutez QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue" à la règle 'allow' du 'catchall'.)
# tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp

Lisez la section suivante pour la mise en place d'une solution de filtrage de spam et virus. Vous pouvez peaufiner quelques réglages en éditant le fichier /var/qmail/bin/qmail-scanner-queue.pl.

SpamAssassin

Un des meilleurs filtres anti-spam open source est SpamAssassin. Une fois que vous avez installé qmail-scanner, le mettre en place est un jeu d'enfant. Commencez par faire emerge dev-perl/Mail-SpamAssassin pour l'installer. Le programme est disponible en deux versions : une version en ligne de commande et une version client/serveur. Pour les serveurs qui manipulent un petit nombre de messages, la version en ligne de commande sera suffisante. Mais ceux dont la charge supportée par leur serveur de messagerie est importante devront utiliser la version client/serveur.

# nano /etc/mail/spamassassin/local.cf
(Ajoutez au moins ces options :)
required_hits 6
skip_rbl_checks 1

# rc-update add spamd default
# /etc/init.d/spamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl
(Assurez-vous que la variable $spamc_binary est à '/usr/bin/spamc'.)
(Si elle est à '', lisez la note ci-dessous.)
Si SpamAssassin n'était pas installé sur votre système au moment de l'installation de qmail-scanner, vous devez réinstaller qmail-scanner. Son processus d'installation est assez affreux et il ne supporte que les paquets qu'il détecte lors de son installation.

Maintenant, les messages entrants devraient être envoyés à qmail-scanner qui lancera SpamAssassin à votre place.

Clam AntiVirus

Comme SpamAssassin, Clam AntiVirus est disponible en deux versions. Je vous fait un topo rapide pour installer rapidement la version client/serveur. D'abord, emerge net-mail/clamav.

# nano /etc/conf.d/clamd
(Mettez START_CLAMD=yes.)

# rc-update add clamd default
# /etc/init.d/clamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl
(Assurez-vous que la variable $clamscan_binary soit à '/usr/bin/clamscan'.)
(Si elle est à '', lisez la note ci-dessous.)
Si Clam AntiVirus n'était pas installé sur votre système au moment de l'installation de qmail-scanner, vous devez réinstaller qmail-scanner. Son processus d'installation est assez affreux et il ne supporte que les paquets qu'il détecte lors de son installation.

Maintenant, les messages entrants devraient être envoyés à qmail-scanner qui lancera Clam AntiVirus à votre place.

Conclusion

Je n'ai pas de conclusion particulière, excepté que si vous ressentez un problème quelconque avec ce guide, veuillez me contacter (Ndt: en anglais) ou remplissez un rapport de bogue sur le site de gestion de bogues de Gentoo. Si vous avez de quoi améliorer ce guide, n'hésitez surtout pas à m'en faire part afin que je l'intègre. J'adore qmail et je serai heureux d'ajouter quoi que ce soit qui pourrait améliorer l'expérience d'un utilisateur avec ce MTA.