Installer et configurer Postfix et courrier avec l’authentification Mysql
Dans ce tutorial, nous allons procéder à l’installation de postfix et courier en utilisant des bases de données mysql pour les paramètres. Cette configuration n’est pas la meilleure pour la sécurité (au niveau mysql) mais elle est très souple pour l’ajout d’utilisateur ou d’adresse email.
Postfix est un MTA, il permet en autre de récupérer le courrier envoyé à votre serveur (par exemple contact@votredomaine.com). Nous allons donc procéder ici à la configuration de Postfix afin qu’il gère le courrier reçu par le serveur. Courier est un client POP. Nous allons installer ce logiciel afin de lire notre courrier présent sur le serveur par un logiciel de type Outlook express, Eudora, …Les deux logiciels utiliseront des tables Mysql pour leur paramétres.
Nous allons travailler sur une debian woody mais à part l’installation, le reste ne change pas sur les autres systèmes.
Postfix
Pour installer Postfix, avec une debian :
apt-get install postfix postfix-mysql
La version installé de postfix :
postconf mail_version
Quelques différences existent entre la version 1 et 2 de Postfix alors regardez quelle version vous avez ou installez une version spécifique avec apt-get.
Si Postfix vous demande pour quelle utilisation vous voulez vous en servir, choisissez Internet site. Faites Entrée pour tout le reste.
Nous allons créer des boites aux lettres virtuelles. Il faut savoir que par défaut, postfix envoi le courrier sur les comptes unix. Etant donné que nous comptons héberger plusieurs domaines sur un serveur, il devient fastidieux et dangereux de créer de nouveaux utilisateurs unix.
Nous allons donc utiliser la fonction boite virtuelle de Postfix qui va créé automatiquement des répertoires contenant le courrier et divers paramètres. Il suffit juste de lui indiquer ou placer le courrier et aussi quelle boite aux lettres il doit gérer.
Après avoir installer Postfix, créer un compte unix vmail qui servira de base pour la réception de tous les courriers.
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /home/vmail –m
Les tables Mysql
Nous allons créer des tables Mysql qui contiendront tous les paramétrages de Postfix et Courier concernant les boites aux lettres virtuelles.
Tout d’abord, nous pouvons créer une base de donnée « courrier ».
Ensuite seulement trois tables.
CREATE TABLE `domaines` ( `domaine` varchar(100) NOT NULL default '', UNIQUE KEY `domaine` (`domaine`) ) TYPE=MyISAM;
Dans la table domaines, entrez vos domaines qui recevront du courrier, par exemple sos-dedie.com (pas de sous domaine)
CREATE TABLE `forward` ( `source` varchar(255) NOT NULL default '', `destination` varchar(255) NOT NULL default '', PRIMARY KEY (`source`) ) TYPE=MyISAM;
Dans forward, entrez tout vos forwards, par ex contact@sos-dedie.com vers webmaster@sos-dedie.om
CREATE TABLE `compte` ( `login` varchar(255) NOT NULL default '', `motdepasse` varchar(255) NOT NULL default '', `emplacement` varchar(255) NOT NULL default '', PRIMARY KEY (`login`) ) TYPE=MyISAM;
Enfin cette dernière table définie vos comptes. Le login est de la forme d’un email (par ex contact@sos-dedie.com), ensuite emplacement contient un chemin relatif au répertoire de base (normalement /home/vmail/) de type contact/ pour un format de boite aux lettres maildir
Initialisation de Postfix & mysql
Allez dans le répertoire /etc/postfix/ editer le fichier main.cf qui contient la configuration de postfix.
cd /etc/postfix/ pico main.cf
Voici un exemple de fichier main.cf épuré de tout commentaire (Postfix 2)
myhostname = votreserveur.com myorigin = votredomaine.com mydestination = $myhostname, localhost.$mydomain, localhost mynetworks = 127.0.0.0/8 best_mx_transport=virtual virtual_mailbox_domains = mysql:/etc/postfix/virtual_domaine.cf virtual_maps = mysql:/etc/postfix/virtual_adresse.cf mysql:/etc/postfix/virtual_forward.cf virtual_mailbox_base = /home/vmail virtual_mailbox_maps = mysql:/etc/postfix/virtual_emplacement.cf virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
Nous allons étudier ce fichier. Toute modification de ce fichier doit être confirmé en relançant postfix par la commande
/etc/init.d/postfix reload
Paramètres généraux de Postfix
Nous allons d’abord configurer les paramètres généraux :
myhostname : Contient le nom de votre machine ou à défaut votre nom de domaine, à l’installation postfix a normalement configuré ce champ
myorigin : Ce paramètre contient le nom de domaine qui apparaîtra dans tout courrier sortant de votre serveur. Dans le fichier d’exemple, ce paramètre contient la valeur $myhostname ce qui signifie que myorigin contiendra la valeur défini dans myhostname.
mydestination : Définit le domaine par défaut de destination (qui reçoit donc le courrier). Normalement ce paramètre est à localhost (le courrier est reçu à la machine elle-même)
best_mx_transport : Indique à Postfix de s’occuper d’abord du transport virtuel (gestion des boites aux lettres virtuelles)
Problème du Chroot de Postfix
Postfix s’execute en Chroot et pose un problème d’accès à la socket Mysql (qu’il cherche dans /etc/postfix). Pour contourner ce problème, on doit d’abord dire à Postfix de se connecter via l’adresse IP de notre serveur et non pas en local. Mais pour cela, nous devons encore dire à Mysql qu’il accepte les requêtes venant de l’extérieur. Voici une faille de sécurité.
pico /etc/mysql/my.cnf
Commentez la ligne skip-networking ou cherchez la ligne Bind_adress et permettez l’accès à votre serveur.
Redémarrez mysql.
/etc/init.d/mysql restart
Pour palier au problème de sécurité et dans le cas où le fichier de configuration de Mysql (my.cnf) ne contiennent pas la ligne Bind_adress, on doit simplement limiter par un firewall l’accès à Mysql à notre seule adresse de serveur.
Paramètre pour les boites aux lettres virtuelles
virtual_mailbox_base : Répertoire de base où sont stockés les boites aux lettres et leur courrier.
virtual_maps : Ce paramètre permet de définir toutes les adresses emails acceptés. Par exemple si vous voulez une adresse du genre contact@votredomaine.com il faut l’indiquer dans virtual_maps sinon celle-ci sera éjectée. De plus, vous pouvez faire du forwarding avec ce paramètre. Par exemple : webmaster@votredomaine.com vers contact@votredomaine.com. Pour indiquer toutes les adresses, nous allons utiliser la table user et forward.
Tout d’abord, nous devons créer des fichiers de configuration virtual_adresse.cf et virtual_forward.cf contenant la configuration pour l’accès de Postfix à mysql.
ATTENTION ! Pour la version 1 de Postfix, pas besoin de virtual_maps mais de transport_maps dans lequel vous indiquez un fichier contenant la liste des domaines virtuels suivi de virtual. De plus rajoutez le paramètre relay_domains = mysql:/etc/postfix/virtual_domaine.cf
pico virtual_adresse.cf
Entrez les champs suivant par ligne
user = login mysql password = mot de passe mysql dbname = courrier table = compte select_field = ‘virtual’ where_field = login hosts = adresse IP de votre serveur
Ce fichier sert donc à établir une connexion à mysql à la base de donnée dbname et à la table table. Voici la requête mysql que Postfix crée :
select ‘virtual’ from compte where login = '$lookup'
La variable $lookup contient l’adresse de destination qu’a reçu Postfix ou dans le cas général la valeur que veut vérifier postfix (nom de domaine, forward, …) Ici le champ de selection est ‘virtual’ car il s’agit simplement de vérifier si l’adresse email existe. Pour le fichier de forwarding (redirection d’une adresse vers une autre) voici le contenu du fichier virtual_forward.cf
pico virtual_forward.cf
Entrez les champs suivant par ligne
user = login mysql password = mot de passe mysql dbname = courrier table = forward select_field = destination where_field = source hosts = adresse IP de votre serveur
Maintenant que l’on a définit les adresses hébergées sur ce site, il faut tout de même dire où Postfix va stocker le courrier de chaque adresse. C’est le rôle de virtual_mailbox_maps. Ce paramètre contient le chemin d’un fichier nommée virtual_emplacement.cf. Ce fichier contient une liste composée des adresses email suivi d’un chemin (relatif à virtual_mailbox_base).
pico virtual_emplacement.cf
user = login mysql password = mot de passe mysql dbname = courrier table = compte select_field = emplacement where_field = login hosts = adresse IP de votre serveur
Nous organisons nos boites de cette façon. Un dossier “nom de domaine” contenant des sous-dossiers “boite aux lettres”. Attention au / à la fin du chemin qui indique que le format de la boite au lettre sera Maildir au lieu de Mailbox.
Enfin les derniers paramétres
virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
Ces dernières valeurs permettent de spécifier sous quel compte postfix va écrire les messages. Nous avons créé exprès un compte vmail (5000). Donc nous indiquons cette valeur qui est valable pour toutes les adresses (d’où le prefixe static 
Vérification
Sauvegardez votre main.cf et faite un
/etc/init.d/postfix reload
Si aucun message d’erreur n’apparaît, vous pouvez faire un petit contrôle avec un telnet.
Par exemple : telnet localhost 25 ou depuis l’extérieur telnet www.votredomaine.com 25
Si vous n’arrivez pas à vous connecter, regardez le fichier tail /var/log/syslog
telnet www.votredomaine.com 25
220 myserver ESMTP Postfix (Debian/GNU)
ehlo coucou.com
250-mailtest 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250 XVERP 250 8BITMIME
mail from:<test@coucou.com>
250 Ok
rcpt to:<contact@votredomaine.com>
250 Ok
data
354 End data with <CR><LF>.<CR><LF></LF></CR></LF></CR>
blablabla... .
250 Ok: queued as ABC1D1C123
quit
221 BYE
Les erreurs possibles
Une erreur peut se produire après la commande rcpt to: Le problème peut être souvent du à plusieurs facteurs :
- l’adresse email du destinataire n’est pas reconnue, dans ce cas un problème peut se situer dans virtual_adresse
- Postfix ne trouve pas le répertoire de destination, cette fois-ci c’est virtual_emplacement qui peut avoir un problème
Pour en savoir plus, n’hésitez pas à consulter /etc/var/mail.log ou /etc/var/syslog
Courier
L’installation de courier est assez simple, la partie la plus difficile se situe dans la connexion et l’indentification de votre logiciel de messagerie (outlook par exemple) à votre serveur.
apt-get install courier-pop courier-authdaemon courier-authmysql courier-debug
Nous allons faire l’identification des clients se connectant au serveur de courrier pour relever leur email. Nous avons déjà les tables Mysql, il reste à indiquer à Courier qu’il doit se servir de ces tables.
Configuration de base
cd /etc/courier
Editer le fichier pop3d, décommenter la ligne
pico pop3d
POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1"
Commentez la ligne
#POP3AUTH=""
Editer ensuite le fichier authdaemonrc
pico authdaemonrc
Mettez le paramètre
authmodulelist="authmysql"
Ce dernier permet de dire à Courier que l’authentification des utilisateurs se fait avec Mysql. Nous allons maintenant indiquer à Courier comment se connecter à Mysql et quelle base utiliser.
pico authmysqlrc
MYSQL_SERVER localhost MYSQL_USERNAME login mysql MYSQL_PASSWORD mot de passe mysql MYSQL_DATABASE courrier MYSQL_USER_TABLE compte
Commentez la ligne
MYSQL_CRYPT_PWFIELD crypt
Et décommentez
MYSQL_CLEAR_PWFIELD motdepasse
Ensuite entrez les valeurs
MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD login MYSQL_HOME_FIELD "/home/vmail/"
Décommentez la ligne suivante (ou ajoutez là si elle est absente)
MYSQL_MAILDIR_FIELD emplacement
Commentez la ligne
MYSQL_NAME_FIELD name
Redémarrez les démons
/etc/init.d/courier-pop restart /etc/init.d/courier-authdaemon restart
Vérification
Pour vérifier le fonctionnement de l’authentification, on utilise l’outil courierauthtest
courierauthtest contact@votredomaine.com motdepasse
Réponse du prompt
Authenticated: module authdaemon Home directory: /home/vmail UID/GID: 5000/5000 Maildir: votredomaine.com/contact/ AUTHADDR=contact@votredomaine.com AUTHFULLNAME=<none>
Maintenant vérifions la connexion pop au serveur
telnet www.votredomaine.com 110
+OK Hello there.
USER contact@votredomaine.com
+OK Password required.
PASS motdepasse
+OK logged in.
STAT
+OK 4 14434
TOP 1 5
+OK headers follow.
Return-Path: <test@coucou.com> Delivered-To: contact@votredomaine.com .... . QUIT
+OK Bye-bye.
Les erreurs possibles
Le plus souvent les erreurs se situe dans l’authentification (le paramétrage de courier est simple). Il faut donc faire marcher l’authentification mysql en testant avec courierauthtest. Les problèmes sont dû généralement à de mauvaise indication de champ dans le fichier de connection Mysql. Vérifiez bien que vous avez décommenté les lignes ou commentez celles indiquées.
Ensuite vérifier dans les logs ce qu’il se passe s’il y a des problèmes avec le telnet. Une erreur de type
-ERR Maildir: No such file or directory
est classique d’une mauvaise authentification ou d’un mauvais paramétrage dans l’authentification (mauvais chemin ,etc…)