Installation de Postfix sur Debian
Par Nicolas Dutertry le mardi 7 avril 2009, 23:17 - Tutoriels - Lien permanent
Mon serveur personnel fait office de serveur de mail. Dans ce tutoriel nous allons voir quelles manipulations j'ai effectuées pour en arriver là.
Afin d'avoir un serveur de mail réellement utilisable, il est nécessaire d'avoir un nom de domaine à soi (par exemple mondomaine.com). Il faut avoir dans son DNS un enregistrement correspondant à l'adresse IP de la machine hébergeant le serveur (par exemple mcsr.mondomaine.com) ainsi qu'un enregistrement MX pointant sur cette machine. Cela permet d'avoir des adresses email de la forme user@mondomaine.com.
J'ai choisi Postfix comme serveur de mail car il est largement utilisé et très bien documenté. En plus de Postfix on installera Procmail pour le traitement des mails reçus et Courier-IMAP pour l'accès aux mails depuis l'extérieur en IMAP.
Dans ce tutoriel les utilisateurs du serveur de mail sont les mêmes que les utilisateurs Unix. Il est possible de configurer Postfix pour gérer ses utilisateurs dans une base de données, mais ce n'est pas ce que nous ferons ici. Les mails de chaque utilisateur seront stockés dans le répertoire Maildir de leur répertoire home.
Installation des composants
Les composants sont installés sur Debian avec la commande apt-get :
apt-get install postfix courier-imap-ssl courier-imap procmail mailutils
Le paquet mailutils contient, comme son nom l'indique, des utilitaires en ligne de commande pour les mails.
Par défaut sous Debian un serveur de mail est déjà installé. Il s'agit d'Exim. Il sera désinstallé automatiquement lors de l'installation de Postfix.
Lorsqu'on vous le demandera, choisissez de ne rien configurer pour Postfix. La configuration sera créée plus tard.
Configuration de Postfix
La configuration de Postfix se trouve dans le fichier /etc/postfix/main.cf. Ce fichier ne doit pas encore exister.
Créez tout d'abord un fichier /etc/mailname contenant votre nom de domaine (mondomaine.com).
Créez ensuite le fichier /etc/postfix/main.cf avec le contenu suivant :
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h mydestination = mcsr.mondomaine.com, mondomaine.com, localhost # Si vous avez un fournisseur d'accès : # relayhost = smtp.votrefai.tld relayhost = mynetworks = 192.168.0.0/24, 127.0.0.0/8, [::1]/128, [xxxx:xxxx:xxxx:xxxx::]/64 myhostname = mcsr.mondomaine.com mydomain = mondomaine.com # Tres important #home_mailbox = Maildir/ mailbox_command = procmail -a "$EXTENSION" unkown_local_recipient_reject_code = 550 alias_maps = hash:/etc/aliases mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all #smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination
Dans ce fichier, les lignes commençant par # sont des commentaires. Remplacez mondomaine.com et mcsr.mondomaine.com par votre nom de domaine et le nom de votre serveur.
Voici le détail des paramètres de ce fichier :
myorigin
Indique le domaine (la partie après @) qui apparaitra dans les mails envoyés directement depuis le serveur. C'est le cas par exemple pour certains mails automatiques envoyés en cas d'erreur. La valeur est ici renseignée dans le fichier /etc/mailname.
mydestination
Indique les domaines des mails que le serveur doit conserver. Lorsque Postfix reçoit un mail, il doit le conserver si ce mail est à destination d'un de ses utilisateurs ou le transférer vers un autre serveur si ce n'est pas le cas. Il utilise pour cela le domaine du mail.
mynetworks
Indique les adresses IP des machines clientes privilégiées. Par défaut ces machines sont les seules autorisées à envoyer des mails vers l'extérieur. Il est important de correctement valoriser ce paramètre pour ne pas faire de votre serveur un relais pour spams. J'ai utilisé ici la syntaxe permettant de spécifier une plage d'adresses IP : 192.168.0.0/24. Le /24 veut dire que les 24 premiers bits sont significatifs. Postfix acceptera donc les IPs allant de 192.168.0.0 à 192.168.0.255. Comme mon serveur fonctionne aussi en IPv6 j'ai ajouté les adresses IPv6 de mon réseau (remplacez les xxxx par les bonnes valeurs).
myhostname
Il s'agit du nom d'hôte complet du serveur.
mydomain
Le nom de domaine du serveur.
mailbox_command
Indique la commande à utiliser pour copier les mails reçus dans la boîte aux lettres. On utilise ici Procmail.
alias_maps
Indique la base de données à utiliser pour les alias. Les alias permettent de donner plusieurs adresses emails à un même utilisateur. Pour prendre en compte ces alias, il est nécessaire de lancer la commande suivante :
postalias /etc/aliases
Une fois la configuration créée, on peut redémarrer Postfix :
/etc/init.d/postfix restart
Création du dossier Maildir
Chaque utilisateur du serveur doit avoir un dossier Maildir permettant de stocker ses mails. On commence par créer ce dossier dans le répertoire /etc/skel qui sert de modèle lors de la création d'un nouvel utilisateur. On utilise pour cela la commande maildirmake qui crée le répertoire au format mail :
cd /etc/skel maildirmake.courier Maildir && maildirmake.courier Maildir/.Sent && maildirmake.courier Maildir/.Trash && maildirmake.courier Maildir/.Drafts && maildirmake.courier Maildir/.Lists chmod a+xr -R Maildir
Pour chaque utilisateur existant, on copie le répertoire Maildir vers le répertoire home (remplacez user par le nom d'utilisateur) :
cp -R /etc/skel/Maildir /home/user chown -R user:user /home/user/Maildir
Les utilisateurs qui seront créés dans le futur disposeront automatiquement du répertoire Maildir.
Configuration de Procmail
Grâce au paramètre mailbox_command, nous avons demandé à Postfix d'utiliser Procmail pour gérer les mails reçus. Procmail est un utilitaire assez puissant qui permet de classer les mails en fonction de règles. Ces règles sont écrites pour chaque utilisateur dans le fichier .procmailrc du répertoire home. la syntaxe de ce fichier est un peu barbare et je ne vais pas expliquer ici toutes les possibilités. Vous pouvez vous référer à cet article pour plus de détails.
Le fichier .procmailrc est composé de recettes qui indiquent comment traiter les mails reçus.
Une recette commence toujours par :0 et a le format suivant :
:0 [drapeaux] [ : [verrou_local] ] <zéro ou plusieurs conditions (une par ligne)> <exactement une ligne d'action>
Les conditions commencent par * et s'expriment en expressions régulières. A chaque mail reçu, la ligne d'action est exécutée si toutes les conditions sont remplies par le mail.
Nous allons créer dans /etc/skel le fichier .procmailrc modèle pour tout nouvel utilisateur :
MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ :0: $DEFAULT
En en-tête de fichier, nous avons défini des variables. Le fichier ne contient qu'une seule recette très simple qui copie chaque mail reçu dans le répertoire Maildir (la recette ne contient aucune condition donc tous les mails reçus seront traités par cette recette).
le : après :0 indique qu'il faut locker l'action pour ne pas que plusieurs mails soient copiés dans Maildir en même temps car cela pourrait corrompre le répertoire.
La ligne d'action contient juste le nom d'un répertoire. Pour Procmail cela veut dire de copier le mail dans ce répertoire.
Pour chaque utilisateur existant, on copie le fichier .procmailrc vers le répertoire home (remplacez user par le nom d'utilisateur) :
cp -R /etc/skel/.procmailrc /home/user chown user:user /home/user/.procmailrc
Il n'est pas nécessaire de redémarrer Postfix car le fichier .procmailrc est relu à chaque fois.
Redirection
Pour certains utilisateur, on veut forwarder tous les mails reçu au lieu de les conserver sur le serveur. Dans ce cas on écrira le .procmailrc de cette manière :
MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ :0 ! user@gmail.com
Le ! indique à Procmail qu'il faut rediriger les mails reçus. Remplacez user@gmail.com par la bonne adresse email de redirection.
Spam
Dans ce tutoriel, je n'ai pas parlé du traitement des spams. Pourtant ce traitement est indispensable si l'on ne veut pas se retrouver submergé. En collaboration avec SpamAssassin, Procmail permet de filtrer les spams, j'y reviendrai prochainement dans un billet dédié.
Récupération des mails depuis un poste client
Il n'y a aucune configuration à faire pour courier-IMAP. Vous avez donc tout de suite accès en IMAP à votre boîte aux lettres.
Votre serveur est maintenant prêt à recevoir et envoyer des emails !