Mise en place d'un système de messagerie électronique sous Linux

Guillaume Sigui

Cet article traite de la mise en place d'un système de messagerie électronique sous Linux. Les tests ont été effectués sous Debian Etch 4.
Il présente d'abord toute la généralité sur le fonctionnement d'un tel système, puis fournit la pratique sur la configuration des serveurs en interaction.
La présentation est simple et assimilable par tous, même les débutants.

- Titre : Mise en place d'un système de messagerie électronique sous Linux

- Auteur : Guillaume Sigui

- Parution : 30 décembre 2008

- Mise à jour : 25 juin 2020

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2009 Guillaume Sigui. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Généralités

- I-A. Description de l'architecture de fonctionnement

- I-B. Mail Transfert Agent ou MTA

- I-C. Serveur du protocole entrant

- I-D. Mail Delivery Agent ou MDA

- I-E. Mail User Agent ou MUA

- I-F. Remarques

- II. Choix des serveurs à configurer

- III. Configuration d'un MTA: le serveur Postfix

- IV. Configuration d'un serveur IMAP: Courier-imap

- V. Configuration d'un MDA: Procmail

- VI. Configuration d'un MUA: le client SquirrelMail

- VI-A. Généralités

- VI-B. Méthode directe

- VI-C. Méthode indirecte

- VII. Opérations complémentaires

- VII-A. Création du répertoire Maildir

- VII-B. Intégration du système dans un réseau

- VIII. Conclusion et Remerciements

I - Généralités

Un système de messagerie électronique est l'ensemble des éléments contribuant à transmettre un courriel( courrier électronique : message transmis via un réseau informatique) de l'émetteur au récepteur. Il y a quatre éléments fondamentaux. Ce sont :
- le Mail Transfert Agent ou MTA ;
- le serveur du protocole entrant ;
- le Mail Delivery Agent ou MDA ;
- le Mail User Agent ou MUA.

I-A - Description de l'architecture de fonctionnement

Les différents éléments du système de messagerie sont agencés selon une architecture logique, pour en assurer le fonctionnement.
Nous représentons cette architecture par le schéma suivant :

Ce schéma présente le transfert d'un courriel d'un expéditeur à un destinataire.
1 - L'expéditeur communique son courriel via le MUA.
2 - Le MUA transmet ce courriel au MTA (la plupart des MUA intègre des clients SMTP).
3 et 4- Le MTA du système de l'émetteur établit un canal de transmission avec le MTA du système du destinataire, par émissions successives de requêtes bidirectionnelles .
5 - Une fois le canal établi, le courriel est transmis d'un système à un autre par les MTA.
6 - Dans le système du destinataire, Le MTA transmet le courrier reçu au serveur IMAP ou POP3.
7, 8 et 9 - Le MDA récupère le courriel du serveur IMAP / POP 3, et le met à disposition du MDA.
10 - Le MDA dépose le courriel dans la boite aux lettres du destinataire qui pourra le consulter à tout moment, sur authentification.

I-B - Mail Transfert Agent ou MTA

C'est un agent qui permet d'acheminer le courriel d'un serveur à un autre. Le MTA de l'émetteur route le mail sur le MTA du récepteur.
Il implémente un protocole sortant. Notons que les protocoles sortants permettent de gérer la transmission du courrier entre les systèmes de messagerie. Le protocole sortant généralement utilisé est le Simple Mail Transfert Protocol ou SMTP.

SMTP peut être traduit comme protocole simple de transfert de courriel . Il est de la famille des protocoles basés sur TCP/IP. Il utilise généralement le port 25.
Le mécanisme de fonctionnement de SMTP est qu'il commence par vérifier l'existence de l'expéditeur et du ou des destinataires, indiqués dans l'entête du message, puis il transmet le contenu.
La transmission s'effectue sur un canal de communication établi entre l'émetteur et le destinataire par émission bidirectionnelle de requêtes basées sur des commandes.
Il existe plusieurs serveurs MTA qui implémentent SMTP. Parmi les plus connus, il y a Postfix, Exim, Qmail et Sendmail.

I-C - Serveur du protocole entrant

Les protocoles entrants permettent la réception et la distribution du courriel. Les plus généralement utilisés sont : Post Office Protocol version 3 (POP3) et Internet Message Access Protocol (IMAP), qui sont tous deux basées sur TCP/IP.
Dans son fonctionnement, POP3 va récupérer le courriel sur un serveur de messagerie.

IMAP est une version améliorée de POP3 qui intègre les opérations suivantes :
-> la gestion de plusieurs accès simultanés ;
-> la gestion de plusieurs boites aux lettres ;
-> la synchronisation des courriels entre le serveur et le client (les courriels ne sont pas effacés sur le serveur de messagerie comme le fait POP3 ) ;
-> le tri du courrier selon des critères
Il existe une version sécurisée de IMAP : IMAPS qui intègre le protocole SSL (Secure Socket Layer).
Dans le système de messagerie, il est nécessaire d'avoir un serveur qui implémente un protocole entrant.

I-D - Mail Delivery Agent ou MDA

Il s'agit d'un agent qui est en charge de la gestion des boites aux lettres. Il est chargé de livrer le courriel dans la boite à messages du destinataire. Pour cela, il est souvent considéré comme le point final d'un système de messagerie.
Dans le MDA on peut filtrer les courriels, et même supprimer les spams par des antispams (comme spamassassin) et contrôler les virus par des antivirus.
Il existe plusieurs serveurs MDA, les plus courants sont procmail, maildrop et cyrus.

I-E - Mail User Agent ou MUA

Le MUA est un logiciel client de messagerie qui fournit un environnement pour la gestion du courriel (envoi, saisie, réception, suppression, etc.). Il est très proche du MDA.
Tout comme les autres agents, il existe également plusieurs MUA. Un MUA avec une interface Web, est appelé Webmail. Vous trouverez ici une liste de webmails.

I-F - Remarques

1 - Avec SMTP comme protocole sortant et IMAP ou POP 3 comme protocole entrant, il est possible d'ajouter une couche de sécurité aux transmissions en imposant une authentification préalable. Il existe deux techniques pour le faire : open-smtp et smtp-auth.
-open-smtp consiste pour l'utilisateur (qui voudra se connecter au serveur SMTP pour envoyer un message) de s'authentifier préalablement au niveau du protocole entrant avec son login et son mot de passe. Cette technique se base sur le principe que tous les utilisateurs du système de messagerie ont un compte d'accès.
-smtp-auth est une technique similaire à la précédente, le principe reste le même, mais l'authentification a lieu directement sur le serveur implémentant SMTP. Elle est la plus utilisée et l'est par les messageries sur Internet dans la lutte contre les spams. La sécurité devient encore plus renforcée avec des mots de passe compliqués, et un recours à SSL (IMAPS).

2 - Le MUA peut intégrer le MDA, le client IMAP / POP3 et le client SMTP.

II - Choix des serveurs à configurer

Comme décrit dans son architecture, le système de messagerie a quatre parties principales. Pour chacune de ces parties, il existe plusieurs serveurs types (paquetages) à installer et à configurer pour assurer toutes les fonctionnalités.
Dans le tableau ci-après, nous indiquons les différents serveurs choisis pour construire le système de messagerie présenté dans ce tutoriel.

COMPOSANTS

SERVEURS

MTA (Mail Transfert Agent)

Postfix

Serveur IMAP (Serveur du protocole entrant)

Courier-imap

MDA (Mail Delivery Agent)

Procmail

MUA (Mail User Agent)

Squirrelmail (Webmail)

Pour l'installation de ces différents composants, référez-vous à la présentation faite ici avec le cas d'Apache.

N.B. Toutes les configurations qui suivent ont été faites sous Debian, et obéissent à une logique donnée.

III - Configuration d'un MTA: le serveur Postfix

Pour l'acheminement des courriers, le serveur choisi est Postfix. Le paquetage qui le contient est : postfix. Le répertoire /etc/postfix et crée après installation de ce paquetage. C'est ce répertoire qui contient les fichiers de configuration de notre serveur. Son principal fichier de configuration est : main.cf.

Le tableau ci-dessous présente les directives de configuration les utiles.

DIRECTIVES DE CONFIGURATION

COMMENTAIRES

myhostname

Nom du serveur de messagerie

mydomain

Nom du domaine (important en cas d'existence d'un serveur DNS)

myorigin

Nom du domaine qui sera mentionné dans les courriers à envoyer à partir de notre système de messagerie

alias_maps
alias_database

Chemin de la table des alias où l'on dirige les messages envoyés à certains destinataires tels que le root

mydestination

Domaines de destinations à prendre en compte

relayhost

Serveur de relais SMTP auquel transférer les messages non gérés par le serveur courant.

mynetworks

Les réseaux de confiance que doit prendre en compte le serveur

mailbox_size_limit
recipient_delimiter

Gestion de la taille maximale de la boite de réception.

inet_interfaces

Interfaces réseau d'écoute du serveur.

default_transport

Protocole, par défaut, pour le transport des messages

home_mailbox

Répertoire de réception des messages. Il doit exister dans les répertoires personnels de chaque utilisateur.
Il existe deux principaux formats de réception de messages : Mbox et Maildir.
Mbox est le plus ancien et consiste à sauvegarder tous les mails reçus dans un seul fichier. Les mails y sont séparés par une ligne vide. Chaque mail commence par le mot clé « From ».
Maildir vient après Mbox. Dans son architecture, chaque mail reçu est sauvegardé dans un fichier. Le répertoire Maildir est créé dans le dossier personnel de chaque utilisateur avec une commande spécifique. Un répertoire Maildir a trois sous-répertoires que sont tmp, new et cur. tmp contient les mails en cours de réception, new sauvegarde les nouveaux mails et cur concerne les mails déjà lus. Tous les mails transitent d'abord par le répertoire tmp, puis dès réception définitive sont renvoyés dans le dossier new, et après lecture ils sont déplacés dans le répertoire cur.

mailbox_command

Commande de récupération des messages (Généralement le MDA)

Exemple de configuration :

myhostname=mail.sigui.ci<br/>
mydomain=sigui.ci<br/>
myorigin=$mydomain<br/>
alias_maps=hash:/etc/aliases<br/>
alias_database=hash:/etc/aliases<br/>
#Il y a aussi le vide pour indiquer que les destinations peuvent être tout autre<br/>
mydestination=sigui.ci, , localhost<br/>
#Dans le cas où il n'y a pas de serveur de relais SMTP, ne rien écrire<br/>
relayhost=<br/>
mynetworks=192.168.0.0/24, 127.0.0.0/8<br/>
#La taille maximale de la boite de réception est mise à illimité.<br/>
mailbox_size_limit=0<br/>
recipient_delimiter=+<br/>
inet_interfaces=all<br/>
#le protocole de transport des messages. Postfix est un serveur SMTP<br/>
default_transport=smtp<br/>
home_mailbox=Maildir/<br/>
#La commande de récupération des messages. Procmail est notre MDA <br/>
mailbox_command=/usr/bin/procmail<br/>

IV - Configuration d'un serveur IMAP: Courier-imap

Le serveur IMAP choisi est courier-imap. Son installation génère le répertoire /etc/courier/, qui contient ses fichiers de configuration, dont le principal est : imapd.

De tout le contenu de ce fichier, seulement trois paramètres sont à modifier. Les autres paramètres peuvent conserver leurs valeurs par défaut.
Voici leur présentation dans le tableau ci-dessous :

DIRECTIVES DE CONFIGURATION

COMMENTAIRES

DEFDOMAIN

Nom du domaine (Important pour le serveur DNS)

IMAPDSTART

La valeur est Oui ou Non, selon qu'on utilise le protocole IMAP ou non.

MAILDIRPATH

Nom du répertoire qui doit contenir les mails

Exemple de configuration:

DEFDOMAIN= "sigui.ci"<br/>
#Le protocole IMAP est utilisé, car le MTA choisi est Postfix<br/>
IMAPDSTART=YES<br/>
#Le nom du répertoire paramétré dans home_mailbox, dans la configuration de Postfix<br/>
MAILDIRPATH=Maildir<br/>

En plus du fichier imapd, il faudrait aussi s'assurer que dans le fichier authdaemonrc (contenu dans le même répertoire) le paramètre authmodulelist a la valeur authpam. Cette valeur assure que les tous les modules de base requis sont pris en compte par notre serveur IMAP.

V - Configuration d'un MDA: Procmail

Pour la livraison des messages, le MDA choisi est Procmail. Le paquetage qui permet son installation est procmail. Le fichier procmailrc est créé dans le répertoire /etc/, après l'installation de ce paquetage. C'est l'unique fichier de configuration de procmail.
Pour rappel, nous avons défini dans la configuration de postfix que procmail doit s'exécuter à chaque réception de courriel. Il faut donc aussi faire attention dans la configuration de procmail, parce qu'on peut aussi perdre des courriels, tout dépend du filtrage configuré.

Il y a trois principaux paramètres. Il en existe d'autres pour la configuration avancée. Le tableau ci-dessous présente ces trois paramètres.

DIRECTIVES DE CONFIGURATION

COMMENTAIRES

MAILDIR

On y indique le répertoire racine pour la réception des courriels. C'est dans ce répertoire que seront créés les autres sous-répertoires liés aux filtres.

DEFAULT

Ce paramètre contient le répertoire, par défaut, qui doit contenir les mails.
Cette variable peut aussi désigner le répertoire courant sur lequel on applique un filtre.

LOGFILE

La valeur de ce paramètre correspond au fichier journal de procmail.

Procmail permet aussi de faire du filtrage sur les mails et de classer les mails dans des répertoires spécifiques de la boite de réception de l'utilisateur.
La syntaxe de filtrage est simple. Il suffit de définir des règles pour chaque filtre à mettre en place.
Pour l'édition des règles, il faut savoir que :
- le caractère # précède un commentaire (analogue aux autres fichiers de configuration) ;
- l'ensemble de caractères :0 ou :0: indique le début d'une nouvelle règle. Il faut toujours le mettre en début de ligne pour un souci de clarté dans le fichier de configuration ;
- une ligne qui commence par le caractère * indique une condition à satisfaire avant l'application de la règle qui suit.
Tout message respectant la condition définie se voit appliquer la règle qui suit la condition en question.
En général, ces commandes portent sur le transfert, la suppression ou la sauvegarde d'un message. Et les conditions sont relatives à l'entête (émetteur, sujet du message, etc.), et au corps ;
- le caractère \ précède un caractère spécial pour que celui-ci soit juste lu comme du texte, et non interprété.

Exemple de configuration :

### --- DÉFINITION DES PARAMÈTRES GÉNÉRAUX <br/><br/>

#On définit le répertoire se trouvant dans le répertoire personnel de l'utilisateur<br/>
#comme répertoire de réception des mails<br/>
MAILDIR=$HOME/Maildir<br/>
#On désigne Maildir (stocké dans la variable $MAILDIR comme répertoire par défaut )<br/>
DEFAULT=$MAILDIR <br/>
#On identifie le fichier journal, qui sera aussi stocké dans le répertoire Maildir.<br/>
LOGFILE=$MAILDIR/logfile <br/>
<br/><br/>

### --- DÉFINITION DES FILTRES, RÈGLES ET CONTRAINTES <br/><br/>

##--Pour sauvegarder dans le répertoire journaux de la boite de réception les mails <br/>
##--reçus régulièrement d'un compte de journal<br/>
:0: <br/>
* ^From:.*journal@mon-jounal\.com<br/>
journaux<br/>
<br/><br/>

##--Pour rediriger instantanément des mails intempestifs du robot le-robot@je-suis-ennui.com vers <br/>
##--la poubelle /dev/null<br/>
:0: <br/>
* ^From:.*le-robot@je-suis-ennui\.com<br/>
{<br/>
:0<br/>
/dev/null<br/>
}<br/>
<br/><br/>

##--Pour sauvegarder les mails de la direction informatique dans un même fichier<br/>
:0: <br/>
* ^From:.*direction-informatique@mon-service\.ci<br/>
{<br/>
:0<br/>
/home/mailsSpeciaux/direction-info.txt<br/>
}<br/>
<br/><br/>

##--Pour sauvegarder les mails dont le sujet contient une expression donnée dans un répertoire spécifique<br/>
:0: <br/>
* ^Subject:.*expression<br/>
{<br/>
:0<br/>
/home/mailsSpeciaux/direction-info.txt<br/>
}<br/>

Il est possible de spécifier des filtres propres à chaque utilisateur, pour cela il faut créer le fichier .procmailrc dans le répertoire personnel des utilisateurs. Et le configurer comme indiqué ci-dessus.
À Procmail, on peut aussi associer un antivirus et un antispam. Pour une documentation à ce sujet, consulter cet article.

VI - Configuration d'un MUA: le client SquirrelMail

VI-A - Généralités

Le choix du MUA s'est porté sur un webmail, l'un des plus faciles et des plus conviviaux. Il s'agit de SquirrelMail. Il est installé par le paquetage squirrelmail.

Après installation de ce paquetage, les répertoires /etc/squirrelmail et /usr/share/squirrelmail sont créés. Le répertoire /etc/squirrelmail contient les fichiers de configuration de notre MUA et les fichiers propres au fonctionnement de Squirrelmail sont contenus dans le répertoire /usr/share/squirrelmail.

Avant de configurer Squirrelmail, il faudrait préalablement installer et configurer un serveur web (Squirrelmail étant un webmail), Apache par exemple. Pour l'installation et la configuration d'Apache, voir ici. Il convient aussi de s'assurer que les librairies des modules d'exécution des directives de configuration en Perl et en PHP sont correctement pris en compte par le serveur web. Généralement, pendant l'installation de Squirrelmail, Apache est configuré pour l'intégration de ces modules. Ils sont extrêmement importants pour le fonctionnement de Squirrelmail.

En plus de la configuration d'Apache fournie sur le lien précédent, il faut suivre les étapes suivantes:

1-> copier le fichier apache.conf du répertoire /etc/squirrelmail/ vers le répertoire /etc/apache2/conf.d/

2-> renommer ce répertoire en squirrelmail.conf

3-> modifier la première ligne de ce fichier de la façon suivante (pour qu'on puisse accéder à l'interface de messagerie dans le navigateur en tapant: http://localhost/messagerie):

Alias /messagerie /usr/share/squirrelmail

La suite du contenu de ce fichier gère le paramétrage du répertoire /usr/share/squirrelmail. Pour mieux comprendre les directives de configuration de son contenu, aller sur ce lien.

Après toutes ces modifications, redémarrer le serveur Apache. (Sous Debian : /etc/init.d/apache2 restart)

Venons-en à la configuration proprement dite de Squirrelmail .
Le fichier de configuration Squirrelmail est config.php qui est également dans le répertoire : /etc/squirrelmail/. Il est possible de le configurer suivant deux méthodes : la méthode directe et la méthode indirecte.

VI-B - Méthode directe

Cette méthode consiste à éditer directement le fichier config.php. Il convient donc de comprendre préalablement certaines directives de sa configuration.

SCRIPTS

COMMENTAIRES

$domain

Nom du domaine (requis en cas d'utilisation d'un serveur DNS)

$imapServerAddress

Nom du serveur IMAP

$imapPort

Port d'écoute du serveur IMAP

$useSendmail

Valeur vrai ou faux, selon qu'on utilise Sendmail (un autre MTA), ou pas.

$smtpServerAdress

Nom du serveur de messagerie SMTP Postfix

$smtpPort

Port d'écoute du serveur de messagerie SMTP Postfix

$pop_before_smtp

Ordre de priorité du POP sur le SMTP

$imap_server_type

Type du serveur IMAP

$default_folder_prefix

Dossier par défaut de réception des mails

$trash_folder

Dossiers des mails supprimés

$sent_folder

Dossiers des mails envoyés

$draft_folder

Dossiers des mails brouillons

Exemple de configuration:

$domain = 'sigui.ci';<br/>
$imapServerAddress = 'sigui.ci';<br/>
$imapPort = 143;<br/>
#Nous utilisons Postfix et non Sendmail<br/>
$useSendmail = false;<br/>
$smtpServerAdress = 'mail.sigui.ci' ;<br/>
$smtpPort = 25;<br/>
#Nous privilégions le SMTP sur le POP<br/>
$pop_before_smtp = false;<br/>
#Le type de notre serveur, courier-imap, est dans la catégorie «other» des types de serveurs<br/>
$imap_server_type = 'other';<br/>
#Notre dossier de réception des mails est par défaut celui configuré dans le serveur IMAP c'est-à-dire le Maildir.<br/>
$default_folder_prefix = '';<br/>
$trash_folder = 'INBOX.Trash';<br/>
$sent_folder = 'INBOX.Sent';<br/>
$draft_folder = 'INBOX.Drafts';<br/>

Les valeurs par défaut des autres paramètres sont admises. On peut les modifier pour changer le design de la page, et certains autres éléments.

VI-C - Méthode indirecte

Par celle-ci, nous configurons notre webmail via une interface graphique développée en Perl. On ouvre cette interface avec la commande /usr/share/squirrelmail/conf.pl.
Une fenêtre présentant plusieurs options s'ouvre. En tapant 2, on ouvre sur la configuration de notre serveur IMAP. Après un peu de lecture de ce qui précède, vous devriez arriver à paramétrer les différents éléments qui se présentent.

VII - Opérations complémentaires

VII-A - Création du répertoire Maildir

Il faudrait maintenant créer les répertoires Maildir, dans les répertoires personnels des utilisateurs qui ont un compte dans le système de messagerie. Mais il faudrait d'abord créer un compte pour chaque utilisateur sur la machine qui héberge le système de messagerie (utiliser la commande adduser <nom_utilisateur> sous Debian).  Il existe plusieurs autres méthodes de gestion des utilisateurs. Celle-ci est la plus simple, il en existe une qui exploite une base de données, etc.

La création des répertoires se fait suivant plusieurs étapes. Pour être pratique, considérons l'utilisateur siguillaume qui a été préalablement créé dans le système. On procède alors comme suit :

1-> se positionner dans le répertoire /home/siguillaume/: # cd /home/siguillaume

2-> se loguer en tant que siguillaume: # su siguillaume

3-> exécuter la commande de création du répertoire: # maildirmake Maildir

Il est également possible de rester en root pour créer le répertoire. Mais il faudrait après changer le propriétaire du répertoire et de son contenu :

1->se positionner dans le répertoire /home/siguillaume/: # cd /home/siguillaume
2->exécuter la commande de création du répertoire: # maildirmake Maildir
3->changer le propriétaire du répertoire Maildir : # chown servinformatique:servinformatique Maildir
4->entrer dans le répertoire Maildir : # cd Maildir
5->modifier le propriétaire du répertoire Maildir : # chown servinformatique:servinformatique *

VII-B - Intégration du système dans un réseau

Pour que le système de messagerie soit exploitable, il est important de lui associer un serveur web (pour le webmail) et surtout le déclarer sur le serveur DNS avec le paramètre MX, et en précisant la priorité. Par exemple:
mail IN MX 10 mail.sigui.ci.

VIII - Conclusion et Remerciements

Mettre en place un système de messagerie électronique est de plus en plus une tâche indispensable dans les structures. Il convenait de rendre disponible, à ce sujet une documentation complète et facile à assimiler. D'où l'intérêt de ce tutoriel.
Je termine ce tutoriel en remerciant tous ceux qui l'ont lu et apporté des corrections, et plus particulièrement à RideKick pour ses corrections orthographiques.
Je reste ouvert aux critiques et aux suggestions. Vous pouvez me contacter ici.