messagerie
Sommaire
1. Présenter le service de messagerie
2. Installation et configuration de postfix
3.
4.
5.
Le courrier électronique est transmis via les composants du serveur de messagerie comme
suit :
1. Dans son application MUA, l'expéditeur crée un courrier électronique et clique sur
Envoyer.
2. L'application MUA utilise SMTP pour envoyer le courrier électronique à un agent
MTA.
3. L'agent MTA relaie et achemine le courrier électronique vers un MTA dans le
domaine du destinataire.
4. L'agent MTA du domaine du destinataire envoie le courrier électronique à un MDA
du système du destinataire.
5. Le MDA stocke le courrier électronique dans une zone MSA.
6. L'application MUA du destinataire interroge un MSS.
7. Le MSS utilise IMAPv4 ou POP pour extraire le courrier électronique pour le
destinataire à partir de la zone MSA.
8. Le MSS renvoie le courrier électronique à l'application MUA.
9. Dans son application MUA, le destinataire lit le courrier électronique envoyé par
l'expéditeur.
1.4.2. Description d’Agents de messagerie
Le tableau ci-dessous répertorie chaque composant du serveur de messagerie, décrit
chaque composant et fournit quelques exemples de chaque composant.
Composants Description
Mail User Agent Application sur un système client, permettant aux utilisateurs de
(MUA) créer, d'afficher, d'envoyer et de recevoir du courrier électronique.
Mail Transfer Sert à transférer des messages électroniques entre des hôtes utilisant
Agent (MTA) SMTP. Un message peut requérir l'utilisation de plusieurs MTA lors de
sa progression vers sa destination finale
Mail Delivery Utilisé par le MTA pour distribuer « Enregistrer » le courrier arrivant
Agent (MDA) dans la boîte aux lettres de l'utilisateur approprié « Zone MSA ». Il se
peut que ce programme effectue des tâches supplémentaires telles
que le filtrage de courrier électronique ou la distribution de
courrier électronique aux sous-dossiers.
Mail Storage Système ou serveur local dans lequel l'application MTA stocke du
Area (MSA) courrier électronique. Il s'agit également de l'emplacement à partir
duquel le serveur MSS extrait du courrier électronique à la demande de
l'application MUA.
Mail Storage Application permettant d'extraire du courrier électronique de la zone
Server (MSS) MSA et de le renvoyer à l'application MUA.
2.3. Installation
Postfix est inclus dans une installation minimale de CentOS. S’il n’est pas présent sur
le système, on peut l’installer comme ceci.
# rpm -ihv postfix-2.6.6-8.el6.x86_64.rpm
On installera également la commande mail (paquet mailx) et le client mutt pour
pouvoir tester et gérer les mails en ligne de commande directement sur le serveur.
# rpm -ihv mutt-1.5.20-8.20091214hg736b6a.el6.x86_64.rpm
# rpm -ihv tokyocabinet-1.4.33-6.el6.x86_64.rpm
# rpm -ihv urlview-0.9-7.el6.x86_64.rpm
# rpm -qa | grep mailx
mailx-12.4-8.el6_6.i686
set from='change_this_user_name@gmail.com'
set realname='Your Name'
set move = no
set imap_keepalive = 900
Lancer Mutt:
# mutt -s "Test Email" user@example.com < /dev/null
Ou
# mutt
La fenêtre principale de Mutt affiche la boite de réception. Les nouveaux mails sont marqués
par un N. Une barre d’état en haut de l’écran affiche les principaux raccourcis. En règle
générale, Mutt fonctionne avec les mêmes raccourcis que Vim. Pour lire un message, il suffit
de le sélectionner et d’appuyer sur Entrée.
# Utilisateurs
user011: user01.tri1
user012: user01.tri2
user013: user01.tri3
user014: user01.tri4
user015: user01.tri5
Fait suivre le mail reçu à l'adresse « user011@ismontic.ma » au compte local
« user01.tri1 ».
D’autres exemples d’alias :
# Fait suivre le mail reçu à l'adresse < user012@ismontic.ma >
# à l'adresse <nom.prenom@gmail.com > :
user012: nom.prenom@gmail.com
# Fait suivre le mail reçu à l'adresse < user013@ismontic.ma >
# aux comptes "user01" et "user02" et à l'adresse <nom.prenom@exemple.org> :
user013: user1,user2, nom.prenom@exemple.org
# A la réception d'un mail à l'adresse < user014@ismontic.ma >,
# exécuter le scripte deleteTrash.sh :
user014: "|/chemin/vers/deleteTrash.sh"
Explication :
La définition d’un alias dans le fichier d’entrée des alias à la forme ci-après :
nom: valeur1, valeur2, ...
o Le nom est une adresse locale (pas une partie de domaine).
o La valeur contient un ou plusieurs mots ci-après :
Adresse email: Le mail est transféré à l’adresse email.
/file/name: Le mail est ajouté à /file/name. L’envoi n’est pas limité à
un fichier courant. Par exemple, pour se débarrasser du courrier
indésirable, renvoyez-le à /dev/null.
|commande : Le mail est «tuyauté» dans la commande
« commande ».
:include:/file/name : Un mail est envoyé aux destinations listées
dans le fichier nommé. Les lignes dans le fichier :include: ont la même
syntaxe que le côté droit des entrées d’alias.
Une destination peut être n’importe quelle destination qui est décrite
ci-dessus. Cependant, livré à "|command" et « /file/name » est
désactivé par défaut. Pour l’activer, éditez les configurations des
paramètres « allow_mail_to_commands » et « allow_mail_to_files ».
À chaque modification de ce fichier, il faut reconstruire /etc/aliases.db, la base
de données des alias avec :
# newaliases
2.6.2. Définir les destinataires autorisés
Dans la configuration par défaut, tous les comptes Linux peuvent recevoir du
courrier, y compris les comptes système comme root, named ou nobody si l’on utilise le
fichier /etc/aliases fourni par défaut. Dans notre configuration, c’est l’utilisateur user01 qui
recevra les mails pour les comptes système.
Pour tester ce comportement, on peut créer un utilisateur « user_test » avec
useradd, et à partir de cette adresse en envoie un mail à l’adresse « user01@ismontic.ma ».
On constate alors que « user01 » reçois le mail.
# tree /home/user01/Maildir/
/home/user01/Maildir/
├── cur
├── new
│ └── 1489396170.V803I1c00037M362342.ismontic.ma
└── tmp
On va donc instaurer quelques restrictions pour éviter de spammer notre système mail. Pour
ce faire, on va créer un fichier /etc/postfix/local-recips avec la liste de tous les destinataires
autorisés, en suivant la syntaxe suivante.
# vim /etc/postfix/local-recips
user011 x
user012 x
user013 x
user014 x
user015 x
user01 x
À partir de ce fichier, on va générer une base de données dans un format lisible pour Postfix.
# cd /etc/postfix
# postmap local-recips
Nous pouvons vérifier si le fichier a été généré correctement.
# postmap -s hash:local-recips
user01 x
user011 x
user012 x
user013 x
user014 x
user015 x
À chaque modification de local-recips, il faudra réinvoquer # postmap local-recips pour
reconstruire le fichier de base de données local-recips.db.
Pour prendre en compte les nouvelles restrictions, éditer /etc/postfix/main.cf et ajouter le
paramètre suivant.
# Tables de correspondance
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
local_recipient_maps = hash:/etc/postfix/local-recips $alias_maps
Prendre en compte les modifications.
# service postfix restart
À partir de là, seuls les utilisateurs explicitement définis dans local-recips pourront recevoir
du courrier.
2.6.3. Comptes Linux et adresses de messagerie
La prochaine étape consiste à faire correspondre les comptes Linux et les adresses de
messagerie. Pour ce faire, on va créer un fichier /etc/postfix/canonical.
# vim /etc/postfix/canonical
user01.tri1 user01.tri1@ismontic.ma
user01.tri2 user01.tri2@ismontic.ma
user01.tri3 user01.tri3@ismontic.ma
user01.tri4 user01.tri4@ismontic.ma
user01.tri5 user01.tri5@ismontic.ma
Convertir le tableau en un format lisible pour Postfix.
# cd /etc/postfix/
# postmap canonical
Définir le paramètre correspondant dans /etc/postfix/main.cf.
# Tables de correspondance
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
local_recipient_maps = hash:/etc/postfix/local-recips $alias_maps
canonical_maps = hash:/etc/postfix/canonical
2.6.4. Domaines virtuels avec des utilisateurs
distincts
Commençons par quelques notions de base sur les domaines de messagerie que
Postfix peut gérer. Postfix distingue trois types de domaines :
2.6.4.1. Domaines locaux
Un utilisateur local est simplement un utilisateur système normal, répertorié dans le
fichier /etc/passwd.
Cela signifie que tous les utilisateurs du système recevront des courriels pour tous les
domaines locaux.
Le paramètre de configuration «mydestination» répertorie tous les domaines locaux.
2.6.4.2. Domaines de boîtes aux lettres virtuelles
Un domaine « Mailbox virtuelle » est également un domaine utilisé pour recevoir des
courriers électroniques (est le plus important).
Vous n'utilisez pas les utilisateurs du système (/etc/passwd) pour spécifier des
adresses électroniques valides dans ce domaine.
A la place, vous indiquez explicitement à Postfix quelles adresses sont valides (sans
les créer).
Un moyen simple de configurer de tels domaines et utilisateurs consiste à utiliser
des fichiers texte.
Example de "virtual_mailbox_maps" A revoir
Utilisateur virtuel Emplacement de la boîte virtuelle
john@example.org /var/mail/doe.org/john/Maildir
jack@example.org /var/mail/doe.org/jack/Maildir
jack@example.com /var/mail/foo.org/jack/Maildir
Vous avez deux domaines : example.org et example.com. Il faut d'abord informer Postfix de
l'existence de ces domaines. Ceci est effectué en mettant l'indication :
virtual_mailbox_domains = example.org example.com
Dans votre configuration de Postfix, vous devez ensuite informer Postfix des adresses mails
pour lesquelles vous êtes prêt à recevoir du courrier et de l'endroit sur le disque où il doit
ranger les courriers pour ces adresses.
Le fichier devant recevoir ces informations devrait être /etc/postfix/virtual_mailbox_users et
son contenu devrait ressembler à ceci :
john@example.org /var/vmail/example.org/john/Maildir
jack@example.org /var/vmail/example.org/jack/Maildir
jack@example.com /var/vmail/example.com/jack/Maildir
Chaque entré est de la forme suivant :
o LHS pour « left hand side» (qui signifie côté main gauche): Adresses mail
o RHS pour « right hand side » (côté main droite) : Emplacements sur le
disque où stocker les emails pour chaque destinataire.
Un tel fichier avec deux colonnes est appelé mapping ou hash table.
Dans le cas de nombreux domaines, la configuration « virtual_mailbox_domains » n'est pas
faisable. Donc c’est mieux d’utiliser un fichier de mapping pour configurer les domaines. Par
exemple /etc/postfix/virtual_mailbox_domains, il devra contenir les lignes suivants :
example.org OK
example.com OK
La raison est qu'un fichier de hachage doit toujours avoir deux colonnes. Dans ce
cas d'un fichier de hachage concernant des données « uni-dimentionnelles »
(une liste de domaines) Postfix ne s'occupe pas de la seconde colonne.
Celle-ci pourrait contenir n'importe quoi à la place de la mention « OK », mais elle
doit exister.
Si vous décidiez que ce système de fichiers texte est suffisant pour vos besoins il
faudra encore les compiler en utilisant la commande postmap comme ceci :
# postmap /etc/postfix/virtual_mailbox_domains
# postmap /etc/postfix/virtual_mailbox_users
La commande créera des fichiers supplémentaires portant les mêmes noms que
ces fichiers mais avec un suffixe « .db ».
N'oubliez pas de lancer la commande « postmap » après chaque modification
d'une table de hachage.
Pour que Postfix connaisse l'existence de ces fichiers vous devez rajouter ces lignes à son
fichier de configuration main.cf :
virtual_mailbox_domains = hash:/etc/postfix/virtual_mailbox_domains
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox_users
Testez la configuration.
2.6.4.2.1. MailBox virtuelles avec MySQL
Une table de hachage est simplement un moyen d'associer une valeur à une autre.
Tout ce que vous avez à faire est donc de demander à Postfix de prendre les deux colonnes
de cette table de hachage dans deux colonnes d'une table d'une base de données
Relationnel. On fait cela avec des fichiers de configuration en .cf .
Voici par exemple un fichier virtual_mailbox_maps.cf contenant :
# Informations de connexion au serveur MySQL
user = someone
password = some_password
hosts = 127.0.0.1
# Domaines virtuels
virtual_alias_domains = ismontic.ma,ofppt.ma
...
# Tables de correspondance
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
local_recipient_maps = hash:/etc/postfix/local-recips $alias_maps
canonical_maps = hash:/etc/postfix/canonical
virtual_alias_maps = hash:/etc/postfix/virtual
Il ne reste qu’à recharger Postfix pour prendre en compte la nouvelle configuration.
# service postfix restart
En résume :
Le fichier /etc/aliases est implémenté par « alias_maps ». De l'autre côté, postfix a « virtual_maps »
et « virtual_alias_maps » pour gérer l'alias de messagerie. Alors, quelle est la différence entre eux?
Paramètre « alias_maps » :
o Utilisé uniquement pour la livraison locale.
o Selon la classe d'adresse dans le suffixe, l'e-mail sera livré par local (Démon de
livraison des mails de Postfix) si les noms de domaine destinataires sont répertoriés
dans « mydestination »
o L'entrée de recherche (Appelé nom dans le manuel) était uniquement des parties
locales provenant d'adresses de messagerie complètes (par exemple, myuser de
myuser@example.com). Il supprime les parties de domaine du destinataire.
o Le résultat de la recherche peut contenir un ou plusieurs des éléments suivants:
adresse e-mail: l'e-mail sera transféré à l'adresse e-mail
/fichier/nom: l'e-mail sera ajouté à /fichier/nom
|commande: courrier redirigé vers la commande
:inclure:/fichier/nom: inclure l'alias de /fichier/nom
Paramètre « virtual_alias_maps » :
o Utilisé par livraison virtuelle
o Toujours invoqué la première fois avant toute autre classe d'adresse.
o Peu importe que le domaine destinataire soit répertorié dans mydestination,
« virtual_mailbox_domains » ou ailleurs. Il remplacera l'adresse/l'alias défini à
d'autres endroits.
o L'entrée de recherche a un certain format :
user@domain: il correspondra littéralement à user@domain
utilisateur: il correspondra à « utilisateur@site » lorsque le site est égal à
$myorigin, lorsque le site est répertorié dans $mydestination, ou lorsqu'il
est répertorié dans $inet_interfaces ou $proxy_interfaces.
Cette fonctionnalité chevauche avec la fonctionnalité de la base de
données d'alias locaux.
@domain: il correspondra à tout e-mail destiné au domaine,
indépendamment des parties locales
o Le résultat de la recherche doit être :
Adresse e-mail valable
utilisateur sans domaine.
o Postfix ajoutera $myorigin si « append_at_myorigin » est défini sur yes (Valeur par
défaut).
Questions/Réponses :
Pourquoi avons-nous besoin de /etc/alias lorsque le courrier électronique à l'intérieur de la
carte des alias virtuels semble le remplacer?
o Comme vous pouvez le voir ci-dessus, alias_maps (/etc/aliases) a quelques
fonctionnalités supplémentaires (à côté du transfert) comme la canalisation à
commander. Cela contraste avec « virtual_alias_maps » qui ne fait que transférer
des e-mails.
Quel est le but de disposer de ces 2 alias distincts et quand décidons-nous quand utiliser
quoi?
o L’inconvénient d'alias_maps est que vous ne pouvez pas différencier si le
destinataire d'origine à la forme « root@example.com » ou « root@example.net ».
Les deux seront mappés à l'entrée « root » dans alias_maps.
o D’autre part, vous pouvez définir différentes adresses de transfert avec
« virtual_alias_maps ».
Pourquoi fail2ban (qui est configuré pour envoyer un e-mail à root@localhost) va-t-il
d'abord suivi l'adresse e-mail indiquée dans « alias_maps » (/etc/aliases) et a ensuite décidé
de l'ignorer une fois « virtual_alias_maps » ajouté?
o Avant l'ajout de « virtual_alias_maps »: root@localhost était aliasé par alias_maps
parce que localhost était répertorié dans mydestination.
o Après la définition de « virtual_alias_maps »: l'entrée root (dans virtual_alias_maps)
n'a pas de parties de domaine et localhost a été répertorié dans mydestination, donc
il correspondra à root me@example.com.
Pourquoi tous les services ne lisent-ils pas les alias de messagerie mentionnés dans
/etc/aliases et ne fonctionnent-ils que lorsque les alias de messagerie sont ajoutés dans la
carte d'alias virtuels?
o La commande « mail root » enverra un courrier électronique à root. En raison du
manque de parties de domaine, Postfix trivial-rewrite (Démon de réécriture et de
résolution d'adresses Postfix) ajoutera $myorigin aux parties de domaine. Ainsi, le
courrier sera envoyé à root@myorigin.
Avant l'ajout de « virtual_alias_maps »: Malheureusement, myorigin n'est
pas répertorié dans mydestination, il ne sera donc pas alias par alias_maps.
Après l'ajout de « virtual_alias_maps »: L’entrée de root (dans
virtual_alias_maps) n'a pas de parties de domaine et myorigin (évidemment)
identique à myorigin, donc
3.2. Fonctionnalités
Dovecot gère les formats de boîte de messagerie mbox et Maildir. Les quotas
Maildir++ sont également gérés. Il prend en charge de manière complète IMAP4 révision 1 et
POP3.
Les méthodes d'identifications offertes sont CRAM-MD5, DIGEST-MD5, APOP, NTLM
de Microsoft, GSSAPI (Kerberos v5), LDAP, Base de données RPA, LOGIN, à l'aide d'un
compte anonyme, OTP et SKEY.
Dovecot offre aux administrateurs de nombreux outils de migration des serveurs
Uw-IMAP, Uw-POP3, Linuxconf, VIMAP, Courier IMAP et POP3 ainsi que Cyrus IMAP et POP3.
Dovecot inclus également un MDA, avec un support optionnel des filtres Sieve « Un
langage de filtrage de courrier électronique.
L'IPv6, SSL et TLS sont pris en charge.
Les systèmes d'exploitation pris en charge sont GNU/Linux, Solaris, FreeBSD,
OpenBSD, NetBSD et MacOSX.
3.3. Modules
Dovecot propose également des modules qui permettent d'augmenter le nombre de
fonctionnalités.
Module quota pour l'application et le suivi des quotas.
Module imap_quota pour interroger l'état actuel des quotas.
Module acl pour le contrôle des accès aux boîtes de messagerie.
Module convert pour passer d'un modèle de boîte de messagerie à l'autre à la
connexion de l'utilisateur.
Module trash afin d'effacer les emails du répertoire Trash quand l'utilisateur dépasse
son quota.
Module lazy_expunge afin de faire que les commandes EXPUNGE et DELETE ne
fassent que déplacer les mails à un autre endroit.
Module expire qui permet d'effacer les courriels au bout d'un certain nombre de
jours.
Module zlib qui permet un accès en lecture seule aux boîtes de messagerie
compressées au format gzip.
Module mail_log afin d'enregistrer des actions des emails.
Également disponibles des modules externes.