Ecran noir

Aller au contenu | Aller au menu | Aller à la recherche

Installation de Postfix sur Debian

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 !