Je vais détailler l’installation du serveur mail Qmail couplé à Vpopmail et MySQL pour gérer simplement les domaines et les boites mails des utilisateurs. Ensuite, pour éviter que le serveur Mail ne devienne un relais à spam, il est possible d’utiliser une authentification SMTP pour envoyer des mails, ainsi, lorsqu’un utilisateur voudra envoyer un mail il devra être authentifié.
Là où Postfix fonctionne de manière autonome, Qmail se différencie par son fonctionnement sous la forme de module qui en fait un serveur de messagerie très sécurisé !
Installation de Qmail
L’auteur de Qmail n’a pas souhaité que des paquets soit créés, il faut donc compiler directement par les sources. Par contre il existe netqmail qui contient un grand nombre de patchs directement intégré.
wget http://mir2.ovh.net/www.qmail.org/netqmail-1.06.tar.gz tar -xzf netqmail-1.06.tar.gz make make setup check ./config-fast domaine.com
Tous les fichiers de configuration se trouve dans le dossier :
/var/qmail/control/
Pour démarrer qmail :
/var/qmail/rc &
DaemonTools
Documentation : DaemonTools
DaemonTools va vérifier si le service qmail fonctionne, s’il est DOWN il sera relancé. De plus, la gestion des logs est améliorée.
Installation
mkdir -p /package cd /package wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz tar -xzf daemontools-0.76.tar.gz mv admin/daemontools-0.76/ daemontools-0.76 rmdir admin/ cd daemontools-0.76 package/install
Personnellement, lors de la compilation de daemontools, j’ai eu droit à cette erreur :
Erreur lors de la compil : collect2: ld returned 1 exit status make: *** [envdir] Error 1 Copying commands into ./command... cp: cannot stat `compile/svscan': No such file or directory
Pour corriger cette erreur, il faut simplement patcher daemontools avec le patch issu du site de qmail :
cd /package wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch patch -p0 < daemontools-0.76.errno.patch patching file daemontools-0.76/src/error.h cd daemontools-0.76 rm -R compile package/install
Si la compilation se déroule bien, voici ce que vous devriez avoir :
Making compatibility links in /usr/local/bin... Creating /service... Adding svscanboot to inittab... init should start svscan now.
On remarque que la ligne « SV:123456:respawn:/command/svscanboot » a été rajouté dans « vi /etc/inittab« . Doit maintenir le service : scanboot, qui va maintenant svscan.
UCSPI-TCP
Le module UCSPI-TCP va gérer « qmail-smtpd » pour envoyer les mails. Puis il sera interfacé avec MySQL pour la gestion des accès au SMTP et seuls les utilisateurs du domaine pourront envoyer des emails. Documentation.
Comme pour daemontools il faut patcher le ucspi-tcp pour le bon déroulement de l’installation :
cd /tmp wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz tar -xzf ucspi-tcp-0.88.tar.gz wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88.errno.patch cd ucspi-tcp-0.88 patch -p1 < /tmp/ucspi-tcp-0.88.errno.patch make make setup check
Vpopmail + MySQL
Vpopmail est très simple à configurer et va créer de lui-même les tables MySQL ainsi que leur remplissage.
Installation
Création d’un compte MySQL avec les droits sur la base de donnée nommée vpopmail :
CREATE DATABASE vpopmail; GRANT select,insert,update,delete,create,drop ON vpopmail.* TO vpopmailuser@localhost IDENTIFIED BY 'votre_mot_de_passe'; quit;
Puis il faut récupérer le paquet, le décompresser et configurer la compilation pour la prise en charge de MySQL : enable-auth-module=mysql
wget http://garr.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.25.tar.gz tar xzf vpopmail-5.4.25.tar.gz cd vpopmail-5.4.25 ./configure --disable-roaming-users --enable-logging=p --disable-passwd --enable-clear-passwd --disable-domain-quotas --enable-auth-module=mysql --enable-auth-logging --enable-sql-logging --enable-valias --disable-mysql-limits make make install-strip
Pour tester, il suffit d’utiliser les commandes fournies par Vpopmail : vadddomain, vadduser, etc.
Par exemple, pour la création du domaine avec le user postmaster@domaine.com (et, je le rappelle la création automatique des tables MySQL): ./vadddomain domaine.com password-postmaster. Voici d’autres commandes :
#Création d'un compte utilisateur sur un autre domaine virtuel vadduser ludovic@autre-domaine.com password
#Création d'un alias de postmaster valias -i postmaster@domaine.com ludovic@domaine.com
#Visualiser les alias / forwards valias postmaster@domaine.com
Configuration par défaut
nano /var/vpopmail/etc/vlimits.default
Emplacement des mails
/var/vpopmail/domains/
Test des mails :
echo to: postmaster@domaine.com | /var/qmail/bin/qmail-inject #Vérification nano /var/vpopmail/domains/domaine.com/postmaster/Maildir/new/
Configuration de Qmail
Pour la configuration de Qmail nous allons utiliser des scripts déjà tout faits.
cd /tmp wget http://qmail.jms1.net/scripts/service-qmail-send-run wget http://qmail.jms1.net/scripts/service-qmail-smtpd-run wget http://qmail.jms1.net/scripts/service-any-log-run mkdir -p /var/qmail/supervise/qmail-send/log mkdir -p /var/qmail/supervise/qmail-smtpd/log cp /tmp/service-qmail-send-run /var/qmail/supervise/qmail-send/run cp /tmp/service-qmail-smtpd-run /var/qmail/supervise/qmail-smtpd/run chmod 755 /var/qmail/supervise/qmail-send/run chmod 755 /var/qmail/supervise/qmail-smtpd/run cp /tmp/service-any-log-run /var/qmail/supervise/qmail-send/log/run cp /tmp/service-any-log-run /var/qmail/supervise/qmail-smtpd/log/run chmod 755 /var/qmail/supervise/qmail-send/log/run chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
Configuration des scripts
nano /var/qmail/supervise/qmail-smtpd/run -> remplacer "IP=unset" par "IP=0" nano /var/qmail/supervise/qmail-smtpd/log/run -> service-any-log-run
Les logs seront dans « /var/qmail/supervise/qmail-smtpd/log/main ».
Création du script de lancement de qmail qui va s’occuper la supervision des services
cd /tmp wget http://www.lifewithqmail.org/qmailctl-script-dt70 cp /tmp/qmailctl-script-dt70 /var/qmail/bin/qmailctl chmod 755 /var/qmail/bin/qmailctl ln -s /var/qmail/bin/qmailctl /usr/bin
Affichage des LOGS
tail -f /var/qmail/supervise/qmail-send/log/main/current | tai64nlocal tail -f /var/qmail/supervise/qmail-smtpd/log/main/current | tai64nlocal
Les logs s’affichent au format TimeStamp mais DaemonTools inclut un outil qui va convertir ce temps au format anglosaxon : « tai64nlocal ».
TCP SERVER
Recevoir les mails de tous
nano /etc/tcp.smtp 127.0.0.1:allow,RELAYCLIENT="" :allow qmailctl cdb
Tous les emails qui viennent des IP 127.0.0.X sont relayés. Tous les emails venant d’autres ip sont acceptés uniquement si le destinataire est configuré sur la machine (voir le serveur MX). Il n’est pas nécessaire de redémarrer le serveur smtp car le fichier est lu à chaque connexion smtp.
Démarrage de Qmail
Lancement du service qmail : « ln -s /var/qmail/supervise/qmail-send /service » Lancement du SMTP : « ln -s /var/qmail/supervise/qmail-smtpd /service »
ps aux | grep qmail root 7359 0.0 0.0 1428 300 ? S 13:40 0:00 supervise qmail-send qmails 7361 0.0 0.0 1608 372 ? S 13:40 0:00 qmail-send root 7363 0.0 0.0 1572 316 ? S 13:40 0:00 qmail-lspawn ./Maildir/ qmailr 7364 0.0 0.0 1568 304 ? S 13:40 0:00 qmail-rspawn qmailq 7365 0.0 0.0 1560 320 ? S 13:40 0:00 qmail-clean root 8082 0.0 0.0 1428 300 ? S 13:41 0:00 supervise qmail-smtpd root 8126 0.0 0.0 3284 632 pts/1 R+ 13:41 0:00 grep qmail
Vérification du bon fonctionnement :
netstat -a | grep :smtp
Qmail est bien lancé :
qmailctl stat /service/qmail-send: up (pid 7361) 535 seconds /service/qmail-send/log: up (pid 7362) 535 seconds /service/qmail-smtpd: up (pid 16696) 0 seconds /service/qmail-smtpd/log: up (pid 8085) 515 seconds messages in queue: 0 messages in queue but not yet preprocessed: 0
On remarque que tous les services ont démarré sauf « /service/qmail-smtpd » qui affiche un uptime de 0 seconde. Il faut donc corriger cela :
nano /var/qmail/supervise/qmail-smtpd/run
Il faut remplacer la ligne SMTP_CDB= »/etc/tcp/smtp.cdb » par SMTP_CDB= »/etc/tcp.smtp.cdb »
On affiche à nouveau l’état des services :
qmailctl stat /service/qmail-send: up (pid 7361) 1342 seconds /service/qmail-send/log: up (pid 7362) 1342 seconds /service/qmail-smtpd: up (pid 25461) 330 seconds /service/qmail-smtpd/log: up (pid 8085) 1322 seconds messages in queue: 0 messages in queue but not yet preprocessed: 0
Courier POP / IMAP
apt-get install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-pop
Configuration de l’authentification avec Courier
nano /etc/courier/authdaemonrc
authmodulelist= »authpam » -> authmodulelist= »authvchkpw »
Avec l’installation par paquet ne fournit pas la livraire AUTHVCHKPW donc il faut :
cd /tmp wget http://www.qmailrocks.org/downloads/qmailrocks.tar.gz tar xzf qmailrocks.tar.gz cp qmailrocks/scripts/misc/authvchkpw /usr/lib/courier/courier-authlib/authvchkpw bzip2 -d qmailrocks/courier-authlib-0.55.tar.bz2 tar xf qmailrocks/courier-authlib-0.55.tar courier-authlib-0.55 ./configure make cp /tmp/courier-authlib-0.55/.libs/libauthvchkpw.so /usr/lib/courier-authlib/
Redémarrage des démons
/etc/init.d/courier-authdaemon restart /etc/init.d/saslauthd restart /etc/init.d/courier-authdaemon restart /etc/init.d/courier-imap restart /etc/init.d/courier-imap-ssl restart /etc/init.d/courier-pop restart /etc/init.d/courier-pop-ssl restart
SMTP AUTH
SMTP AUTH permet à l’utilisateur de s’authentifier pour envoyer des mails à partir de n’importe quelle machine, tout en empêchant les envois de mails non désirés. En effet, il ne faut pas que le serveur soit « Open Relay ».
* Installation de CheckPassword
cd /tmp wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz tar xzf checkpassword-0.90.tar.gz cd checkpassword-0.90 make make setup check
Il faut stopper QMail car les fichiers binaires sont remplacés : « qmailctl stop« .
cd /tmp/netqmail-1.06/other-patches wget http://shupp.org/patches/netqmail-1.05-tls-smtpauth-20070417.patch cd /tmp/netqmail-1.06 patch -p0 < other-patches/netqmail-1.05-tls-smtpauth-20070417.patch
Si tout se passe bien :
patching file ./base64.c patching file ./base64.h patching file ./case_startb.c patching file ./conf-cc patching file ./dns.c patching file ./FILES.auth patching file ./hier.c patching file ./install_auth.sh patching file ./ipalloc.h patching file ./Makefile patching file ./Makefile-cert.mk patching file ./qmail-control.9 patching file ./qmail-remote.8 patching file ./qmail-remote.c patching file ./qmail-smtpd.8 patching file ./qmail-smtpd.c patching file ./README.auth patching file ./ssl_timeoutio.c patching file ./ssl_timeoutio.h patching file ./TARGETS patching file ./tls.c patching file ./tls.h patching file ./update_tmprsadh.sh
On lance la compilation et on installe :
make make setup check
Fabrication des certificats :
make cert Generating a 1024 bit RSA private key FR France Paris Qmail admin admin make tmprsadh
Les certificats ont été rajouté dans « /var/qmail/control ».
Modification du script de lancement de Qmail
Nous allons tester de nous authentifier auprès du serveur mail :
telnet ip_de_votre_serveur_mail 25 EHLO serveur-rps.fr 250-serveur-rps.fr 250-STARTTLS 250-PIPELINING 250-8BITMIME 250-SIZE 0 250 AUTH LOGIN PLAIN CRAM-MD5
Le serveur attend la chaine de caractère qui contient le destinataire, le domaine et le mot de passe du compte mail créé avec VPOPMail.
Génération du MDP : perl -MMIME::Base64 -e ‘print enpre_base64(« �00postmaster@domaine.com�00votre_mot_de_passe »)’ Ou alors un convertisseur en ligne : http://www.motobit.com/util/base64-deprer-enprer.asp
AUTH PLAIN la_cle_retournee_par_le_site
Erreur que j’ai eu
454 oops, unable to write pipe and I can't auth -> au lancement -> exec tcpserver -vR
Il faut modifier la ligne :
nano /var/qmail/supervise/qmail-smtpd/run ARGS=" $LOCAL $CHECKPW $TRUE" par ARGS=" $CHECKPW $TRUE"
On refait l’authentification et une nouvelle erreur apparait :
"535 authentication failed (#5.7.1)"
Dans les logs on remarque une erreur :
# voir les logs : /var/qmail/supervise/qmail-smtpd/log/main/current vmysql: can't read settings from /var/vpopmail/etc/vpopmail.mysql
Visiblement il y a un problème dans les droits, il faut donc corriger cela.
Par défaut :
ls -l /var/vpopmail/etc/vpopmail.mysql -rw-r----- 1 vpopmail vchkpw 576 2008-02-11 16:53 /var/vpopmail/etc/vpopmail.mysql # commande à exécuter pour modifier les propriétaires chown vpopmail:root /var/vpopmail/etc/vpopmail.mysql -rw-r----- 1 vpopmail root 576 2008-02-11 16:53 /var/vpopmail/etc/vpopmail.mysql
Il est toujours impossible de se loguer, une nouvelle table est créé dans la BDD MySQL et contient les tentatives de log : « vlog ». Affichage d’une nouvelle erreur : « vchkpw-smtp: vpopmail user not found postmaster@domaine.com:xxx.xxx.xxx.xxx »
Par défaut :
ls -l /var/vpopmail/bin/vchkpw -rwx--x--x 1 vpopmail vchkpw 86320 2008-02-11 16:47 /var/vpopmail/bin/vchkpw # commande à exécuter pour modifier les droits chmod 751 /var/vpopmail/bin/vchkpw chmod 4711 /var/vpopmail/bin/vchkpw -rws--x--x 1 vpopmail root 86320 2008-02-11 16:47 /var/vpopmail/bin/vchkpw
SpamAssassin
Il existe un patch pour permettre à Qmail 1.03 d’utiliser le binaire « qmail-queue » différent de celui qui est intégré par défaut. Mais puisque l’installation de Qmail a été réalisée avec NetQmail, le patch est déjà intégré.
Installation de Qmail-scanner
cd /tmp wget http://prdownloads.sourceforge.net/qmail-scanner/qmail-scanner-2.02.tgz?download tar xfzv qmail-scanner-2.02.tgz cd qmail-scanner-2.02 ./configure Y
Mais une erreur se produit -> « Cannot find reformime on your system! ».
Toutes les options de compilation sont listées [[http://qmail-scanner.sourceforge.net/configure-options.php|sur cette page]].
./configure --spooldir /var/lib/qscan --qmaildir /var/qmail --bindir /var/qmail/bin --qmail-queue-binary /var/qmail/bin/qmail-queue --admin postmaster --domain serveur-rps.fr --add-dscr-hdrs yes --lang fr_FR --debug yes --scanners fast_spamassassin
Il faut donc récupérer « reformime ». Il est possible de le faire en compilant MailDrop puis en copiant le binaire dans le répertoire. Par contre, il est possible d’avoir des problèmes lors d’une mise à jour par paquet donc je vous conseille d’installer mail drop par paquet « apt-get install maildrop ».
Si vous souhaitez tout de même copier seulement le binaire, voici la manipulation :
- Maildrop
cd /tmp wget http://prdownloads.sourceforge.net/courier/maildrop-2.0.4.tar.bz2 bzip2 -d maildrop-2.0.4.tar.bz2 tar xf maildrop-2.0.4.tar cd maildrop-2.0.4 ./configure make
Une nouvelle erreur apparait : (Perl-compatible regular expression library) n’est pas présent -> « configure: error: pcre.h not found – install PCRE from www.pcre.org ».
- PCRE
cd /tmp wget http://kent.dl.sourceforge.net/sourceforge/pcre/pcre-7.6.tar.gz tar xzf pcre-7.6.tar.gz cd pcre-7.6 ./configure make make install
- Récupération de reformime
cd maildrop-2.0.4 ./configure make
Recompilation de maildrop pour créer Reformime :
cd /tmp/maildrop-2.0.4 ./configure make
Copie du binaire « reformime » dans /usr/local/bin
cp /tmp/maildrop-2.0.4/rfc2045/reformime /usr/local/bin
Refaire le ./configure avec « –install 1″ à la fin pour éxécuter l’installation.
On reprend la configuration de qmail-scanner :
./configure --spooldir /var/lib/qscan --qmaildir /var/qmail --bindir /var/qmail/bin --qmail-queue-binary /var/qmail/bin/qmail-queue --admin postmaster --domain serveur-rps.fr --add-dscr-hdrs yes --lang fr_FR --debug yes --scanners fast_spamassassin The following binaries and scanners were found on your system: mimeunpacker=/usr/local/bin/reformime uudepre=/usr/bin/uudepre Content/Virus Scanners installed on your System max-scan-size=100000000 fast_spamassassin=/usr/bin/spamc If that looks correct, I will now generate qmail-scanner-queue.pl for your system... Continue? ([Y]/N) Y Testing suid nature of /usr/bin/perl... Whoa - broken perl install found. Cannot even run a simple script setuid You will either have to correct this or use the C-wrapper within the ./contrib dir Error was: Can't do setuid (cannot exec sperl) See FAQ for further details
- perl-suid
Il faut installer le paquet manquant :
apt-get install perl-suid
Ajout de « –install 1″ dans le « ./configure » pour que tout s’installe correctement.
Modification du fichier TCP.SMTP
Lors que le serveur reçoit un mail, le fichier « //tcp.smtp// » est appelé. C’est donc ce fichier qui va appelé Qmail Scanner avec SpamAssassin
nano /etc/tcp.smtp :allow,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" qmailctl cdb qmailctl restart
On vérifie le bon fonctionnement en envoyant un mail ou un SPAM qui traine dans une boite mail et on regarde les entêtes, on doit trouver :
X-Spam-Status: No, score=3.2 required=5.0 X-Spam-Level: +++
Si l’objet du mail n’est pas reécrit dans SpamAssassin :
nano /var/qmail/bin/qmail-scanner-queue.pl
Remplacer :
my $spamc_options='-s 256000 -t 30 -c ';
par :
my $spamc_options='-s 256000 -t 30 ';
Commandes à connaitre
Etat des services de qmail-send et qmail-smtp : qmailctl stat
Nombre de mail en attente : qmail-qstat
Entête des mails en attente : qmail-qread
Configuration sommaire : qmail-showctl
Pour toute modification de /etc/tcp.smtp il faut faire : qmailctl cdb
Fonctionnement en relai
Dans l’exemple précédent, tout Qmail est installé sur la même machine, et il se peut que le serveur sature avec la réception des mails, le traitement antispam puis le délivrement dans la boite mail.
Il est donc possible d’avoir un serveur en amont nommé relai qui va recevoir les mails puis appliqué SpamAssassin et enfin délivré dans les boites mails.
La configuration des relais est identique au serveur de boites mails, il faut :
- DaemonTools
- UCSPI-TCP
- NetQmail
- SpamAssassin
Il n’y a pas besoin de :
- Courier
- VPOPMail
Voici les IP que j’ai imaginé pour le réseau :
Serveur MX 1 -> 192.168.0.50 Serveur MX 2 -> 192.168.0.51 Serveur Boites mails -> 192.168.0.1 Domaine -> serveur-rps.fr
Sur les relais MX 1 et MX 2, il faut relayer les mails vers le serveur qui contient les boites mails. Ensuite, lorsqu’un utilisateur enverra un mail, le mail sera transféré à l’un des relais et c’est l’un des relais qui enverra le mail.
MX 1
Routage des mails reçus vers le serveur de boites mails :
nano /var/qmail/control/smtproutes serveur-rps.fr:192.168.0.1
Autorisation du serveur de boites mails à envoyer des mails avec le relai MX :
nano /etc/tcp.smtp :allow 192.168.0.1:allow,RELAYCLIENT="" qmailctl cdb
Autorisation du relai pour qui relai le domaine :
nano /var/qmail/control/rcpthosts serveur-rps.fr
MX 2
La configuration est identique au MX 1.
nano /var/qmail/control/smtproutes serveur-rps.fr:192.168.0.1
nano /etc/tcp.smtp :allow 192.168.0.1:allow,RELAYCLIENT="" qmailctl cdb
nano /var/qmail/control/rcpthosts serveur-rps.fr
Boites Mails
Autorisation des relais pour relayer les mails :
nano /etc/tcp.smtp 127.0.0.1:allow,RELAYCLIENT="" 192.168.0.50:allow,RELAYCLIENT="" 192.168.0.51:allow,RELAYCLIENT="" qmailctl cdb
Lors de l’envoi d’un mail par un utilisateur du serveur de boites mails, il faut que le serveur de boites envoi le mail en utilisant l’un des deux relais MX :
nano /var/qmail/control/smtproutes :192.168.0.50 :192.168.0.51
Test d’envoi et de réception
D’après les logs, il est tout à fait possible de suivre le bon cheminement d’un mail : Relai MX -> Serveur de Boites mails.