Laisser un commentaire

Les commandes essentielles pour dompter Exim4

Exim4 est un MTA léger et couramment utilisé sur les serveurs ; c’est d’ailleurs le MTA par défaut sous Debian. Sa configuration est assez aisée, mais au delà de la configuration en elle-même, il peut s’avérer salvateur de connaître les principales commandes permettant de diagnostiquer d’éventuels problèmes et d’administrer le serveur. Voyons tout cela.

Afin de bien poser les choses, et parce que c’est souvent un peu flou dans nos esprits, passons rapidement en revue les différents organes qui entrent en jeu dans le fonctionnement de l’email.

Les différentes pièces de l’email

Mail Transfer Agent (MTA)
Il s'occupe de transmettre les messages à une autre machine du réseau et d'accepter les messages à destination de ses propres utilisateurs. Dans une utilisation courante, lorsque vous envoyez un mail, le MTA de votre machine contactera le MTA de votre FAI, qui transmettra lui même le mail au MTA du FAI du correspondant.
Mail Delivery Agent (MDA)
Il s'occupe de la partie réception de l'email. Lorsque le MTA accepte des messages à destination de ses utilisateurs, il les transmet au MDA qui va s'occuper de les trier et de les placer dans les bonnes boites de réception.
Mail Retrieval Agent (MRA)
On est bien d'accord que la boite mail à proprement parler n'est pas sur votre ordinateur de bureau mais bien sur un serveur. Le MRA a donc pour mission de rapatrier les mails sur votre machine.
Mail User Agent (MUA)
C'est le client "le navigateur du mail", il se charge d'afficher convenablement les mails pour que vous puissiez les lire, et formate ceux que vous écrivez avant de les passer au MTA.
Mail Submission Agent (MSA)
C'est un programme interne au MUA, il fait en fait le lien entre le MUA et le MTA. C'est un simple relai.
Protocoles
Pour que tout ce petit monde communique, il faut bien qu'ils se soient mis d'accord sur des protocoles à utiliser. Les deux protocoles utilisés sont les protocoles SMTP et POP (ou bien IMAP). Les MTA communiquent entre eux via le protocole SMTP. Attention cependant, la boite e-mail n'est pas forcement configurée pour qu'on s'y connecte via POP ou IMAP. Il faut pour cela installer un serveur POP ou IMAP. Faire en sorte que sa boite soit accessible via ses protocoles s'appelle "exposer la boite".

Installation d’exim4

apt-get install exim4
dpkg-reconfigure exim4-config

Pour le reconfigure, vous allez avoir une fenêtre interactive qui va s’ouvrir. Mes serveurs étant des serveurs web, je sélectionne “distribution directe par smtp” (ce qui permet d’envoyer des mails sans configurer la réception). Ensuite je laisse les paramètres par défaut, sauf en ce qui concerne le nom du courriel système.

Par défaut le hostname entier est configuré. Par exemple sur mon serveur en1.buzeo.me, le champ est pré-remplis avec “en1.buzeo.me”, or comme l’explique la fenêtre, ce champ doit correspondre au FQDN, mais j’enlève le nom du serveur, car les email locaux sont par exemple contact@xxx.fr et non contact@en1.xxx.fr.

Une fois tout cela mis en place, on teste l’envoi d’un email pour confirmer que tout fonctionne convenablement.

echo "This is a test." | mail -s Testing mail@monmail.fr

Exim est aussi capable d’envoyer les emails par l’intermédiaire d’un smarthost [en], c’est à dire un serveur intermédiaire qui va se charger de communiquer directement avec le MTA du destinataire. Cela peut être particulièrement utile dans les cas où le port 25 est bloqué par votre FAI. Cette configuration est expliquée dans les docs de Debian [en].

Commandes Exim

Chaque email se compose de trois fichiers dans Exim. Un dans /var/spool/exim/msglog qui contient les logs liés au message et qui porte comme nom le message-id, les deux autres se trouvent dans /var/spool/exim/input et prenne comme nom le message-id plus un suffixe indiquant s’il s’agit du header (-H) ou du corps du message (-D).

À propos du message-id, ce dernier est composé de caractères alphanumériques et prends la forme suivante : XXXXXX-YYYYYY-ZZ.

Commandes courantes

exiwhat
Montre ce qu'Exim est en train de faire.
exim -bP
Afficher la configuration du serveur.
mailq
Affiche simplement la file d'attente des emails. C'est un alias de exim -bp
exim -bpc
Compte le nombre de messages dans la file d'attente.
exim -bp | exiqsumm
Cette commande affiche par domaine, le nombre de messages dans la queue, le volume par domaine de destination concerné et, pour chacun d'eux, l'email le plus vieux ainsi que le plus récent.
Count  Volume  Oldest  Newest  Domain
-----  ------  ------  ------  ------
   11   495KB     14h     14h  gmail.com
   20   900KB     14h     14h  homtail.com
  154  6930KB     14h     14h  yahoo.com

exim -bt monmail@domaine.fr
Montre comment Exim compte router le message.

Recherches dans la mailqueue

Exim expose un outil très pratique, j’ai nommé exiqgrep. Ce dernier permet d’effectuer des recherches par expressions régulière directement dans la file d’attente des mails.

exiqgrep -f [user]@domaine

On cherche ici facilement l’ensemble des messages émis par une adresse email précise ou un domaine.

exiqgrep -r [user]@domaine
On fait ici tout le contraire de ce que nous avons fait à la ligne ci-dessus. On recherche les emails par destinataire.
exiqgrep -o 120
On cherche tous les messages envoyés il y a plus de 120 secondes.
exiqgrep -y 120
On cherche ici tous les messages envoyés il a moins de 120 secondes.

En plus des paramètres précédents, on peut encore restreindre la recherche en utilisant les paramètres -i, -z et -x qui permettent respectivement de n’afficher que les id des messages, les messages gelés (frozen) et ceux non gelés.

Gérer la file d’attente A.K.A Exim queue

exim -Mf message-id
Freezer un message.
exim -Mt message-id
Dégeler un message.
exim -M message-id
Forcer l'envoi du message.
exim -Mvl message-id
Voir les logs liés au message.
exim -Mvh message-id
Afficher les headers du message.
exim -Mvb message-id
Montrer le corps du message.
exim -Mrm message-id
Supprimer le message de la queue.
exim -qf
Forcer l'envoi des messages en état frozen.
exim -qff
Forcer l'envoi de tous les messages.
exim -Mar message-id address [address …]
Ajouter des destinataires à un message.
exim -Mes message-id address
Modifier l'expéditeur de l'email.

En bonus, voici quelques commandes avancées :

# lister tous les messages de la queue groupés par expéditeur
exim -bpr | grep -Eo "<[^ ]*@[^ ]*>" | sort | uniq -c

# lister tous les messages de la queue groupés par destinataire
exim -bpr | grep -Eo "^\s*[^ ]*@[^ ]*$" | sort | uniq -c

# supprimer tous les messages de plus de 12 heures
exiqgrep -o 43000 -i | xargs exim -Mrm

# supprimer tous les messages gelés de la file d'attente
exiqgrep -z -i | xargs exim -Mrm

# supprimer tous les messages d'un expéditeur particulier
exiqgrep -i -f [user]@domaine | xargs exim -Mrm

# supprimer tous les messages de plus de 12 heures d'un expéditeur particulier
exiqgrep -o 43000 -i -f [user]@domaine | xargs exim -Mrm

# effacer tous les messages contenant "bla bla bla" dans leur contenu
grep -lr 'bla bla bla' /var/spool/exim/input/ | sed -e 's/^.*\/\([a-zA-Z0-9-]*\)-[DH]$/\1/g' | xargs exim -Mrm

Ça devrait bien vous aider dans votre utilisation d’Exim ! Si vous avez des remarques ou des commandes complémentaires, n’hésitez pas à m’en faire part.

Commentaires

Rejoignez la discussion !

Vous pouvez utiliser Markdown pour les liens [ancre de lien](url), la mise en *italique* et en **gras**. Enfin pour le code, vous pouvez utiliser la syntaxe `inline` et la syntaxe bloc

```
ceci est un bloc
de code
```