Exim est le serveur SMTP packagé par défaut de la distribution Debian. Il y a beaucoup de supporters de Postfix, mais dans la pratique, pour envoyer des emails depuis la crontab ou depuis une application Web, Exim fait très bien l’affaire et surtout il est « facile » à tester lors de la mise au point des configurations.
Le serveur SMTP est souvent la dernière roue du carrosse sur les serveurs de l’Internet. Aussi, il arrive souvent qu’au login sur le serveur, on voit passer un message signalant qu’on a reçu des emails. Beaucoup d’utilisateurs ignorent le message qui est souvent la marque d’un serveur SMTP non configuré.
1 2 3 4 5 6 7 8 9 10 11 12 |
aa2@apollo:~ $ ssh arditi-host3.arditi.net Linux arditi-host3 4.19.0-24-amd64 #1 SMP Debian 4.19.282-1 (2023-04-29) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Feb 23 10:43:40 2024 from 68.201.202.129 You have new mail arditi-host3:~# |
Si on décide de regarder ce qu’il y a dans la boîte aux lettres, on a souvent une surprise de ce type :
1 2 3 4 5 6 7 8 9 10 |
arditi-host3:~# mail Mail version 8.1.2 01/15/2001. Type ? for help. "/var/mail/root": 1812 messages 1812 new >N 1 root@localhost Fri Feb 23 10:43 19/657 Cron <root@localhost> [ -x /usr/sbin/filetraq ] && /usr/sbin/filetraq N 2 root@localhost Fri Feb 23 10:45 19/657 Cron <root@localhost> [ -x /usr/sbin/filetraq ] && /usr/sbin/filetraq N 3 root@localhost Fri Feb 23 10:53 19/593 Cron <root@localhost> [ -x /usr/sbin/filetraq ] && /usr/sbin/filetraq N 4 root@localhost Fri Feb 23 10:54 19/593 Cron <root@localhost> [ -x /usr/sbin/filetraq ] && /usr/sbin/filetraq N 5 root@localhost Fri Feb 23 10:55 18/642 *** SECURITY information for localhost *** N 6 root@localhost Fri Feb 23 10:55 18/675 *** SECURITY information for localhost *** & |
On voit que le serveur émet des alertes, qui, tant qu’on n’a pas ouvert la boîte aux lettres, sont ignorées. D’autre part, le fichier qui contient tous ces emails « /var/mail/root » ne fait que grossir….
C’est dommage, car les messages des crons permettent souvent de diagnostiquer un problème rapidement.
Exim est particulièrement simple à configurer pour faire le minimum, c’est à dire permettre l’envoi des emails administratifs. Pour les emails applicatifs, il est souvent préférable d’avoir un service externalisé d’envoi d’emails pour éviter d’avoir à gérer tous les problèmes de rejets d’emails et de whitelisting auprès des grands acteurs du mail, comme Gmail, Hotmail, Free, Orange, La Poste, etc…
Préliminaires
L’outil dpkg-reconfigure permet d’initialiser la configuration d’Exim de manière interactive en quelques écrans.
Avant de lancer la configuration, il faut s’assurer que la machine a un nom FQDN correct, c’est à dire que la commande « hostname -f » renvoie le nom complet de la machine. Lors de l’installation le nom fourni se retrouve dans le fichier /etc/hostname. C’est le nom court de la machine. Le nom long provient du fichier /etc/hosts dans lequel on doit retrouver le nom court.
Si /etc/hostname contient arditi-host3, dans /etc/hosts on doit retrouver une ligne avec le nom FQDN suivi du nom court.
1 2 3 4 5 6 7 |
127.0.0.1 localhost 51.159.28.23 arditi-host3.arditi.net arditi-host3 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
Ici, on déclare l’IP du serveur lui-même, mais on peut aussi utiliser une IP locale : 127.0.1.1 pour déclarer le FQDN. On a un fichier de la forme
1 2 3 4 5 6 7 |
127.0.0.1 localhost 127.0.1.1 arditi-host3.arditi.net arditi-host3 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
Et la commande répond :
1 2 3 |
arditi-host3:~# hostname -f arditi-host3.arditi.net arditi-host3:~# |
Une fois cette étape réalisée, on peut lancer la configuration d’Exim avec la commande dpkg-reconfigure exim4-config
Dans les écrans qui suivent, on indique qu’on va envoyer et recevoir des emails sur Internet, mais comme on mettre 127.0.0.1 en IP d’écoute, aucun mail ne pourra arriver depuis l’extérieur. On est donc dans une configuration qui ne peut qu’envoyer des emails vers l’Internet. On verra dans un autre article l’utilisation d’un relais (smarthost). Dans le nom du système, on met le nom FQDN de la machine.
Configuration des alias et des adresses
Dernier point pour que les emails administratifs fonctionnent, c’est la configuration des alias. En effet, les emails administratifs sont pour la plupart des emails provenant de tâches planifiées (cron), qui sont adressés à « root » par défaut. On va donc donner à root une véritable adresse email grâce au fichier /etc/aliases, c’est la dernière ligne du fichier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
arditi-host3:~# cat /etc/aliases # /etc/aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root noc: root security: root root: alain@arditi.fr arditi-host3:~# |
Pour signer les emails administratifs, et en particulier s’ils bouncent, il faut une boîte aux lettres réelle pour les émetteurs. Ainsi les bounces vont pouvoir revenir sur une boîte aux lettres plutôt que d’être perdus dans le « goulp » ! On déclare ces emails dans le fichier /etc/email-addresses
1 2 3 4 5 6 7 8 9 10 11 12 13 |
arditi-host3:~# cat /etc/email-addresses # This is /etc/email-addresses. It is part of the exim package # # This file contains email addresses to use for outgoing mail. Any local # part not in here will be qualified by the system domain as normal. # # It should contain lines of the form: # #user: someone@isp.com #otheruser: someoneelse@anotherisp.com root: alain@arditi.fr www-data: alain@arditi.fr arditi-host3:~# |
A noter que j’ai déclaré une adresse pour www-data, car c’est l’utilisateur qui va envoyer les emails lorsqu’on utilise un serveur Apache pour une application Web.
Pour terminer, afin de donner un nom à l’émetteur, on peut modifier le fichier /etc/password et mettre à jour le champ Gecos de l’utilisateur
1 2 3 4 5 |
arditi-host3:~# cat /etc/passwd root:x:0:0:root-arditi-host3.arditi.net:/root:/bin/bash .... www-data:x:33:33:Wordpress Contact:/var/www:/usr/sbin/nologin .... |
La ligne root contient le nom long, comme ça on voit d’où vient l’email sans avoir à regarder les en-têtes SMTP.
Un email reçu depuis cette machine sera de la forme :
from: | root-arditi-host3.arditi.net <alain@arditi.fr> | ||
to: | root@arditi-host3.arditi.net | ||
date: | Feb 23, 2024, 12:01 PM |
On voit dans cet exemple, la différence entre le destinataire du message qui est root et l’adresse de l’enveloppe, alain@arditi.fr qui permet à l’email de sortir sur Internet et d’arriver dans la boîte aux lettres.