Installer et configurer Postifx et Courier (pop) pour son serveur avec authentification simple

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, …

Ce tutorial a pour but de faire les choses simplement ! Nous allons travailler sur une debian woody. Nous nous passerons donc de toute complication parceque c’est déjà assez complexe…

Postfix

Pour installer Postfix, avec une debian :

apt-get install postfix

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

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

virtual_mailbox_domains = votredomaine1.com votredomaine2.com

virtual_maps = hash:/etc/postfix/virtual_adresse

virtual_mailbox_base = /home/vmail

virtual_mailbox_maps = hash:/etc/postfix/virtual_emplacement

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étre généraux

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)

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é. De plus, vous pouvez faire du forwarding avec ce paramètre. Par exemple : webmaster@votredomaine.com vers contact@votredomaine.com. Comme la liste peut être grande, postfix utilise un fichier sous forme de base de donnée. Tout d’abord, vous devez ecrire un fichier texte nommée virtual_adresse

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étres relay_domains = votredomaine.com votredomaine2.com

pico virtual_adresse

Entrez vos adresses de boites virtuelles et/ou forwarding

contact@votredomaine.com contact@votredomaine.com

contact@votredomaine2.com contact@votredomaine2.com

webmaster@votredomaine.com contact@votredomaine.com

Une fois enregistré, vous devez transformer ce fichier en base de donnée en faisant

postmap virtual_adresse

Cela vous créé un nouveau fichier qui sera utilisé par Postfix. La commande hash: indique à Postfix le format du fichier à lire.

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. Ce fichier contient une liste composée des adresses email suivi d’un chemin (relatif à virtual_mailbox_base).

pico virtual_emplacement
contact@votredomaine.com votredomaine.com/contact/

contact@votredomaine2.com votredomaine2.com/contact/
postmap virtual_emplacement

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.

N’oubliez pas de faire postmap virtual_emplacement

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 toute 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 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 :

  1. l’adresse email du destinataire n’est pas reconnue, dans ce cas un problème peut se situer dans virtual_adresse
  2. 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-debug

Nous allons faire l’identification des clients se connectant au serveur de courrier pour relever leur email par l’authentification userdb mais d’abord configurons un peu courier

Configuration de base

cd /etc/courier

Editer le fichier pop3d, décommenter la ligne

vi pop3d
POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1"

Commentez la ligne

#POP3AUTH=""

Editer ensuite le fichier authdaemonrc

vi authdaemonrc

Mettez le paramètre

authmodulelist="authuserdb"

Ce dernier permet de dire à Courier que l’authentification des utilisateurs se fait avec userdb. Normalement il n’y a rien d’autre à faire.

Redémarrez les démons

/etc/init.d/courier-pop restart

/etc/init.d/courier-authdaemon restart

Créez une liste d’utilisateur

Vous n’allez pas autoriser tout le monde à relever le courrier sur votre serveur. Pour cela vous devez indiquer une liste d’utilisateur avec leur mot de passe. Nous allons utiliser userdb qui est livré en standard et laisse moins de faille de sécurité que mysql par exemple.

Allez dans /etc/courier

cd /etc/courier

Créez le répertoire userdb, pour une raison de sécurité faite un chmod 0 userdb (empeche quelqu’un de lire le contenu)

mkdir userdb

chmod 0 userdb

Nous allons construire maintenant notre liste d’utilisateur. Nous allons créer dans le répertoire userdb autant de fichier que de domaine hébergé sur le serveur. Ces fichiers vont contenir les informations nécessaires.

La commande userdb permet la création de ces fichiers facilement. Disons que vous voulez créer l’utilisateur contact@votredomaine.com, voici la commande à entrer

userdb votredomaine.com/contact@votredomaine.com 
set mail=/home/vmail/votredomaine.com/contact 
home=/home/vmail/votredomaine.com/contact 
uid=5000 gid=5000

Explication de la commande, on créer l’entrée contact@votredomaine.com dans le fichier votredomaine.com avec les paramètres mail et home qui contiennent l’adresse du courrier de cet utilisateur (voir postfix) et le repertoire de base de cet utilisateur. Ensuite pour cette entrée nous créons un mot de passe cryptée en md5. (le mot de passe est cryptée car nous avons défini dans pop3d d’authentifier une connexion avec un mot de passe cryptée)

userdbpw -md5 | userdb votredomaine.com/contact@votredomaine.com set systempw

Le prompt vous demande un mot de passe et une confirmation

Si tout c’est bien passé, un fichier votredomaine.com a été créé dans userdb contenant toute les informations nécessaires.

Si vous avez fini, transformez les fichiers textes en base de donnée par

makeuserdb

Maintenant nous allons tester le fonctionnement du pop

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/votredomaine.com/contact

UID/GID: 5000/5000

Maildir: /home/vmail/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 userdb en testant avec courierauthtest. 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…)