Qmail
Connexion à Internet multi-comptes
Partie 4 : connexion multi-comptes
Introduction
Nous allons voir dans cet article comment installer un serveur de mail pouvant gérer plusieurs domaines (des centaines, voir plus), sécurisé contre l'open relay mais permettant aux utilisateurs authentifiés d'envoyer des mails. De plus, les mails entrant seront scannés à la recherche de virus. Car même si sous linux la plupart des virus mail n'ont aucun effet, il se peut que certains des utilisateurs récupèrent leurs mails sous windows.
Ce serveur de mail comprend aussi un gestionnaire de mailing list et une interface web d'admin des domaines mails.
Pour la compréhension de cet article, vous devez avoir des notions assez avancées sur Linux et son utilisation (commandes shell en ligne, compilation, etc...), et des notions sur les réseaux TCP/IP et de l'internet.
Cet article est une "compilation" d'articles trouvés sur l'internet (en partie l'article qmail sur toolinux), d'HOWTO, et de mon expérience professionelle de Qmail.
Récupération des sources et compilation
Télécharger les sources
Récupérez tout d'abord les sources de ces différents programmes (attention, vérifiez les liens et versions, je vous donne les versions à jour, à l'heure où j'écris cet article, c'est-à-dire en avril 2002):
- qmail-1.03
- autorespond-2.0.2
- daemontools-0.76
- ucspi-tcp-0.88
- ezmlm-0.53
- ezmlm-idx
- maildrop-1.3.8
- qmail-scanner-1.10
- vpopmail-5.2
- F-PROT (version linux gratuite pour un usage privé, prenez aussi les mises à jours des définitions de virus sur la page download du site).
- Qmailadmin
Oui je sais, ca fait beaucoup de chose à récupérer, j'espére que vous avez un bon modem :)
Compiler Qmail et l'installer
Bon on va commencer par installer Qmail lui même. Détarrez / dégzippez les sources de qmail ( tar zxvf qmail-1.0.3.tar.gz ). Nous allons devoir patcher légèrement les sources de Qmail pour notre besoin.
Entrez dans le répertoire des sources de Qmail, et éditez le fichier Makefile, et remplacez :
- La ligne 1486 auto_split.o par auto_split.o env.a
- La ligne 1491 substdio.a error.a str.a fs.a auto_qmail.o auto_split.o par substdio.a error.a str.a fs.a auto_qmail.o auto_split.o env.a
De même, éditez le fichier qmail.c et :
-ajoutez en dessous de la ligne 8 #include "env.h" en dessous de la ligne #include "auto_qmail.h"
-remlacez la ligne 10 static char *binqqargs[2] = { "bin/qmail-queue", 0 } ; par static char *binqqargs[2] = { 0, 0 } ;
-Ajoutez juste au-dessous de la ligne que vous venez de modifier les lignes suivantes:
static void setup_qqargs()
{
if(!binqqargs[0])
binqqargs[0] = env_get("QMAILQUEUE");
if(!binqqargs[0])
binqqargs[0] = "bin/qmail-queue";
}
et enfin au-dessous des lignes (vers la ligne 23)
int qmail_open(qq)
struct qmail *qq;
{
int pim[2];
int pie[2];
vous ajoutez:
setup_qqargs();
Remarque: Ce patch est uniquement nécessaire pour pouvoir utiliser qmail-scanner, qui va nous permettre de scanner tout mail entrant à la recherche de virus. En fait, ce patch ajoute une variable d'environnement QMAILQUEUE. Si cette variable est vide, Qmail utilise son propre programme de "queue" (file d'attente des mails entrant et sortant), autrement cette variable contient le nom du programme de queue de remplacement à utiliser. Nous utiliserons alors la "queue" de qmail-scanner qui appellera notre programme antivirus (F-PROT) pour scanner tous les mails.
Maitenant que Qmail est patché, nous allons pouvoir le compiler. Mais avant cela, nous devons créer des comptes utilisateurs, qui de plus vont servir pour le chemin d'installation de Qmail. Dans cet article, le chemin d'installation est celui par défaut, c'est à dire /var/qmail
Nous créons ces comptes utilisateurs par les commandes (en root bien sur):
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails
Remarque: Si vous souhaitez installer Qmail dans un autre répertoire que /var/qmail, modifiez les commandes ci-dessus avec le chemin souhaité.
Il nous reste plus qu'à compiler Qmail:
make setup check
Configurons maintenant Qmail, via la commande :
./config-fast `hostname --fqdn`.
Vous devez voir apparaître quelque chose du style :
Your fully qualified host name is mailhub.lea-linux.org
Putting tarsier.lea-linux.org into control/me...
Putting lea-linux.org into control/defaultdomain...
Putting lea-linux.org into control/plusdomain...
.....
Si avez une erreur ou autre insulte de la sorte, essayez en remplaçant "`hostname --fqdn`" par votre nom d'hôte complet (par exemple ./config-fast mailhub.lea-linux.org)
Qmail utilise deux styles de mailbox (boîte aux lettres) différents : le mbox traditionel comme sendmail (un fichier nommé comme le login de l'utilisateur contenant tout les mails de l'utilisateur dans /var/mail) ou un répertoire Maildir à structure spéciale contenant les mails dans des fichiers séparés. Pour notre cas nous utiliserons Maildir, car vpopmail se base dessus.
Pour cela, il suffit de copier un fichier:
cp /var/qmail/boot/home /var/qmail/rc
Qmail n'est pas tout à fait complètement installé, mais pour la suite nous allons devoir installer les daemontools et ucspi de façon à avoir des performances optimales pour notre serveur de mails.
Installer les utilitaires supplémentaires
De façon à avoir de meilleures performances pour notre serveur de mails et pour une plus grande souplesse, pour "logger" les évements mails, nous devons installer les outils développés par Dan Bernstein : daemontools et ucspi-tcp.
Pour les installer, rien de plus simple, vous dégzippez / détarrez les sources comme d'habitude.
Pour les daemontools, un répertoire admin a été créé lors du "détarrage":
cd admin/daemontools/
./package/install
Il ne reste plus qu'à compiler / installer uscpi:
cd ucspi-tcp-0.88
make setup check
Compiler Vpopmail et l'installer
Comme d'habitude, on dégzippe / détarre les source de Vpopmail. Avant de lancer la compilation, il faut, comme pour Qmail, créer les comptes utilisateurs de vpopmail, qui vont aussi déterminer le chemin d'installation de vpopmail.
Pour ma part, pour des questions de "cohérence" avec Qmail, je l'installe dans /var/vpopmail. De plus je trouve logique de l'installer dans /var, car c'est le repertoire où l'on trouve normalement tout les fichiers qui varient en permanence (mail, logs, pid, etc...). Donc, nous faisons (en root bien sur) :
groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 -d /var/vpopmail vpopmail
Remarque: changez le chemin /var/vpopmail par le chemin d'installation que vous désirez bien sur
Vous devez créer le répertoire de Vpopmail avant de continuer, pour notre exemple:
mkdir /var/vpopmail
Vpopmail possède un script de configuration avant la compilation (le bien connu ./configure), auquel nous allons passer les options nécessaires à notre cas.
Voici les options que nous allons utiliser, avec une brève explication pour chaque option:
--prefix=/var/vpopmail
Répertoire de base de vpopmail
--enable-clear-passwd=y
Ce qui permet de stocker une copie des mots de passe POP des utilisateurs en clair. C'est peut-être moins sécurisé, mais c'est toujours pratique pour retrouver le mot de passe de l'un de vos utilisateurs qui l'aurait perdu. Si vous êtes parano, n'activez pas cette option.
--enable-valias=y
Permet d'utiliser les alias mails (plusieurs noms possibles pour un même compte POP)
--enable-default-domain=votre domaine
Indique le domaine primaire de votre machine. A mettre absolument, autrement vous allez devoir créer le compte de chaque utilisateur pour le domaine principal du serveur de mail.
--enable-roaming-users=y
Permet une authentification POP before SMTP pour activer le relaying.
Explication sur cette option:
Vous avez sûrement entendu parler du "relaying" pour les serveurs mails, l'open relay, etc... Pour résumer ce probléme, normalement un serveur de mail (comme la plupart des serveurs de mails des FAI) interdisent aux utilisateurs d'envoyer des mails si l'IP de l'utilisateur n'est pas une IP du même réseau que le serveur de mail.
Par exemple, les serveurs de mails wanadoo refusent que vous envoyiez des mails si vous n'avez pas une IP wanadoo (c.a.d si vous ne vous etes pas connecté à l'internet via leur propre service), cela pour des raisons de sécurité, de lutte anti-spam, de charge serveur et aussi économique.
La plupart des sociétés ayant leur propre serveur de mail font de même. Si vous ne faites pas ça, votre serveur est considéré comme un "open-relay", ce qui n'est pas bien du tout (je vais pas expliquer pourquoi ici, ca prendrait trop de temps).
Mais se pose alors un probléme: vous êtes une grosse société, avec 5 000 collaborateurs. Vos collaborateurs voyagent beaucoup et ont besoin d'utiliser le serveur de mail de la société. Comme ils sont en déplacement à l'extérieur de la société, ils n'ont pas d'IP de la société (ils sont connectés via un FAI quelquonque ), et le serveur de mail n'autorise pas le relaying (c'est à dire envoyer un mail d'un utilisateur dont l'IP n'est pas une IP de la société). Comment faire alors ?
On a alors inventé le POP before SMTP pour permettre le relaying. Comment ca marche? Très simple. L'utilisateur doit tout d'abord "popper" sa boîte aux lettres (c'est à dire relever ses mails, c'est la chose que vous faites chaque fois que vous regardez avec votre client mail si vous avez reçus un nouvel e-mail). Lorsque l'utilisateur "poppe" sa boîte au lettre, il s'identifie sur le serveur en fait (le POP demande obligatoirement un nom d'utilisateur et un mot de passe). Si l'identification est OK, le serveur distribue les mails .
Comme l'utilisateur est identifié, on va alors se dire "ok l'utilisateur est connu, il est de chez nous", on va alors enregistrer son adresse IP actuelle et permettre a cette adresse IP d'envoyer des mails pendant un certain temps que l'on peut définir (voir plus bas dans l'article). Donc en résumé (si vous n'aviez rien compris), si vous voulez que votre serveur de mail soit utilisable pour envoyer des mails à partir de n'importe où dans le monde, à partir du moment où l'on aune boîte aux lettres sur votre serveur, activez cette option.
Donc, je vous redonne les options que nous utilisons ici :
./configure --enable-clear-passwd=y --enable-valias=y --enable-default-domain=lea-linux.org --enable-roaming-users=y
Puis on le compile / installe:
make
make install-strip
Comme les "headers" de vpopmail sont nécessaires pour la compilation d'autres programmes (qmailadmin par exemple), nous devons les copier dans un répertoire d'include. Pour cela:
cp /var/vpopmail/include/* /usr/include
Pour que vpopail trouve bien les fichiers de tcpserver, il faut refaire le repertoire etc/ de vpopmail:
mv /var/vpopmail/etc/* /etc
rmdir /var/vpopmail/etc
ln -s /etc /var/vpopmail/etc
Qmail-scanner et F-PROT
Avant d'installer Qmail-scanner, vous devez vous assurez d'avoir Perl 5.005_03 (ou supérieur) sur votre machine (c'est le cas avec toutes les distrib récentes) et les modules Perl:
Time::HiRes
DB_File
Sys::Syslog
Pour vous en assurer, installez-les via CPAN. Pour se faire, vous devez être connecté à internet, et lancez alors la commande:
perl -MCPAN -e shell;
Remarque: Si c'est la premiére fois que vous lancez CPAN, vous allez devoir le configurer. Je ne vous explique pas ici comment configurer CPAN.
Toutefois, la plupart du temps il suffit de valider les options proposées par défaut
Une fois CPAN lancé, demandez l'installation des modules via:
install Time::HiRes
install DB_File
install Sys::Syslog
exit (pour sortir du CPAN)
Nous allons aussi dès à présent installer F-PROT. Dgzippez / Détarrez f-prot dans le répertoire /usr/local et installez le via:
cd /usr/local
tar zxvf /ou/se/trouve/votre/fp-linux_sb.tar.gz
ln -fs fp-linux_312/ f-prot
ln -fs /usr/local/f-prot/f-prot.sh bin/f-prot
ln -fs /usr/local/f-prot/f-prot.8 man/man8/
chmod +x /usr/local/f-prot/f-prot*
Mettez aussi à jour les signatures antivirales de F-PROT ( Faites-le le plus souvent possible si vous voulez un bonne protection antivirale de vos mails!)
Téléchargez les deux zip de mise à jour de signature de f-prot et dézipé-les dans /usr/local/f-prot.
Avant d'installer Qmail-scanner, nous devons installer Maildrop, indispensable pour Qmail-scanner.
tar zxvf maildrop-1.3.8.tar.gz
cd maildrop-1.3.8
./configure
make
make install
Passons maitenant à Qmail-scanner.
Dégzippé / Détarré Qmail-scanner, puis son répertoire de source lancez ./configure avec les options suivantes:
--admin user
(voir en-dessous pour la valeur de user)
--domain votre_domaine
Pour comprendre les valeurs à mettre dans ces options, prenons le cas où nous voulons que tous les mails d'alerte de détection virale soient envoyés à admin@lea-linux.org, vous devez alors mettre admin pour le user et lea-linux.org pour le domaine.
--notify all
Pour prévenir l'administrateur, l'envoyeur et la personne qui auraient dû recevoir le mail, qu'un mail contaminé a été intercepté
--redundant yes
Permettre le scan des fichiers zips, etc...
Pour notre exemple, nous lançons donc:
./configure --admin admin --domain lea-linux.org --notify all --redundant yes --install
Attention: Vous risquez d'avoir une erreur du type:
YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!
FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!
******* FATAL ERROR *******
Cette erreur est "normale" si votre distribution comporte une version de Perl qui interdit que des script Perl soient lancés en SET-ID pour des raisons de sécurité (cas de la slackware par exemple).
En effet, lancer les scripts en SET-ID signifie que le script est lancé avec les droits d'un utilisateur spécifique. Certaines distributions interdisent cela (pour empêcher de lancer des script Perl qui prendraient les droits root par exemple et pourraient faire des choses pas très gentilles).
Dans ce cas (et que dans ce cas-là, c'est-à-dire que vous avez l'erreur énoncée ci-dessus) vous devez:
cd contrib
make
make install
Vous devez voir apparaître alors:
install -o qmailq -g qmail -m4755 qmail-scanner-queue /var/qmail/bin/qmail-scanner-queue
Revenez dans le répertoire des sources de Qmail-scanner (cd ..) et vous éditez le fichier qmail-scanner-queue.pl et vous remplacez:
#!/usr/bin/suidperl -T
par:
#!/usr/bin/perl
Copiez enfin ce fichier dans /var/qmail/bin en placant les bons droits :
cp qmail-scanner-queue.pl /var/qmail/bin/
chown qmailq.qmail /var/qmail/bin/qmail-scanner-queue*
Dans tout les cas, il faut initialiser qmail-scanner maitenant.
Si vous n'avez pas eu l'erreur ci-dessus, tapez ces commandes:
qmail-scanner-queue.pl -g
qmail-scanner-queue.pl -z
Si vous avez eu l'erreur lors de l'installation, les commandes alors sont celles-ci:
qmail-scanner-queue -g
qmail-scanner-queue -z
Installation du gestionnaire de mailing list
Ezmlm est le gestionnaire de mailing de Qmail. Pour l'installer, détarrez / dgzippez ezmlm et ezmlm-idx.
Puis copiez le contenu de ezmlm-idx dans le répertoire de ezmlm:
tar zxvf ezmlm-0.53.tar.gz
tar zxvf ezmlm-idx-0.40.tar.gz
mv ezmlm-idx-0.40/* ezmlm-0.53/
Patchez alors ezmlm:
cd ezmlm-0.53
patch < idx.patch
et compilez, installez le tout:
make clean
make
make man
Configuration des service mails
Maitenant que le plus "gros" est installé, nous allons créer le script de démarrage de ces services.
Créez un fichier rc.startmail dans /etc/rc.d comprenant:
#!/bin/bash
export PATH="/usr/local/bin:/var/qmail/bin:/var/vpopmail/bin:/usr/local/bin/ezmlm:$PATH"
echo "Starting Qmail and Vpopmail daemons ..."
export QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
/var/qmail/rc &
/usr/local/bin/tcpserver -v -H -R -x /etc/tcp.smtp.cdb -c20 -u1033 -g103 0 smtp
\ /usr/local/bin/recordio /var/qmail/bin/qmail-smtpd 2>&1 >/dev/null &
/usr/local/bin/tcpserver -v -H -R 0 pop3 /usr/local/bin/recordio /var/qmail/bin/qmail-popup
\ mailhub.lea-linux.org /var/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
Remarque: Ne coupez pas les lignes de ce script. Regardez bien ce qui est marqué au dessus, le caractére "\" dans le texte au dessus signale qu'il s'agit de la même ligne que celle qui a commencé au dessus, le retour de ligne est du a la mise en page HTML. C'est à dire que si vous lisez:
tuc machin
\ bidule
vous devez lire une seulle ligne:
truc machin bidule
Il ne faut pas, bien sur copier, le "\".
Attention: Si vous avez eu l'erreur dans Qmail-scanner à propos des script SET-ID, modifiez la ligne comprenant export QMAILQUEUE par:
export QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue"
Ajoutez alors dans votre /etc/rc.d/rc.local une ligne du type:
/etc/rc.d/rc.startmail
Ou si votre distribution est basé sur sysVinit,créez le scripts correspondants dans les niveaux d'init que vous souhaitez.
Reste à configurer quelques fichiers. Tout d'abord, il faut régler le temps d'autentification des utilisateurs par le pop (POP before SMTP). Pour cela, nous editons la contrab et donnons l'intervale de temps pu il faut nettoyer les identifications:
crontab -e
et placez une ligne du type:
40 * * * * /var/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
Pour nettoyer toutes les 40 minutes.
Il faut définir aussi quel est votre adresse réseau, pour authoriser ce réseau àutiliser le serveur de mail. Prenons l'exemple où les utilisateurs de votre serveur de mails se trouvent sur les réseaux 192.168.0.0 (local) et 213.30.139.0 (public), il faut alors éditer le fichier /etc/tcp.smtp et y mettre:
127.:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT=""
213.30.139:allow,RELAYCLIENT=""
l'adresse 127 doit absolument y être, autrement le serveur ne peut pas fonctionner!
Construisez alors la base de données de ces adresses:
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
Installation d'autoresponder
Ce programme permet de répondre automatiquement aux mails reçus (pour signaler une absence par exemple).
Pour l'installer, c'est très simple:
tar zxvf autorespond-2.0.2.tar.gz
cd autorespond-2.0.2
make
make install
Installation de Qmailadmin
Il nous reste plus qu'à installer l'interface cgi Web de la gestion des comptes mails.
Pour cela:
tar zxvf qmailadmin-1.0.2
cd qmailadmin-1.0.2
./configure --enable-htmldir=/var/www
make
make install
Attention: Remplacez --enable-htmldir=/var/www par le chemin de votre racine web.
Je suppose que vous savez configurer apache pour que le répertoire de cgi soit valide et fonctionnel.
Utilisation, question courantes, etc ...
Je vous donne ici brièvement les commande pour créer un nouveau domaine mails, les comptes, etc...
Je suppose bien sûr que vous savez gérez vos DNS pour que le champ MX du domaine pointe vers le serveur de mails.
- Ajouter un nouveau domaine que votre serveur de mails va héberger :
/var/vpopmail/vadddomain domaine.com
Vous allez devoir rentrer le mot de passe du "postmaster", c'est-à-dire de l'administrateur mails de ce domaine.
Pour créer les comptes pop, utiliser qmailadmin. Tapez l'url dans votre navigateur pour pointer sur le cgi de qmailadmin, dans user laissez "postmaster", dans domaine, mettez le domaine que vous voulez gérer et pour le mot de passe, mettez le mot de passe du postmaster.
Dans l'interface se trouvent tout les liens pour créer les mails etc...
- Effacer un domaine:
/var/vpopmail/vdeldomain domaine.com
Quand vous configurez votre client mail pour lire les mails reçus, faites attention dans la partie "nom utilisateurs" de mettre de la forme:
utilisateur@domaine.com
car les logiciels de mail mettent par défaut "utilisateur" tout court.
Si lors du démarrage des services vous avez des erreurs du style:
unable to bind: adresses in use
ou quelque chose de similaire, c'est que vous avez déjà un serveur de mail et/ou pop3 de lancé. Désinstallez tout autre serveur de mail/pop3 (sendmail, gnu-pop3d,...), vérifiez aussi dans .etc/inetd.conf ou dans /etc/xinet.d/ que les services smtp, pop3 ne sont pas utilisés par d'autres programmes.
Lisez les documentations d'utilisation de ezmlm, ezmlm-idx pour la gestion des mailing lists.
Qmailadmin vous permet de "fabriquer" vos propres pages d'administration mail, etc... avec de nombreux exemples installés dans /usr/local/share/qmailadmin
Pour que vous puissiez gérer les mails d'un domaine, vous devez configurer un MX dans le fichier de zone de ce domaine qui pointe vers votre serveur. Lisez les documentions des serveurs DNS.