Notes d’introduction sur l’utilisation du MTA exim4 sur la distribution Debian et explications sur « la manière Debian » de gérer le serveur Exim et ses fichiers de configuration.
Introduction
Ce n’est pas un secret, la distribution Debian est ma préférée depuis que j’ai adopté Sarge (version 3.1) il y a 13 ans. D’ailleurs presque tous les articles de ce blog se basent sur cette distribution et ses paquets, que ce soit pour une utilisation station de travail ou centre serveur.
Pour mettre sur pieds un serveur SMTP, la distribution Debian me semble encore une fois adaptée notamment en raison des qualités de stabilité qu’on lui prête, y compris lors des mises à jour. Quant à Exim4 c’est un choix personnel qui est pour le coup très bien intégré à Debian et souvent qualifié de « MTA par défaut » de la distribution.
Les paquets Debian
L’installation d’Exim se fait avec les paquets exim4-daemon-config ou exim4-daemon-light. L’un comme l’autre dépendent de exim4-base et exim4-config .
La différence entre la version légère et lourde consiste en l’implémentation de scanners anti-virus, anti-malware et anti-spam pour la seconde.
On peut regarder les paramètres utilisés par le mainteneur lors de la compilation des binaires dans /usr/share/doc/exim4-daemon-heavy/EDITME.exim4-heavy.gz . Dans le même dossier se trouve un README et un CHANGELOG assez complets.
On a également les paquets exim4-doc-html et exim4-doc-info que je n’utilise pas au profit de « The Exim Specification » pour version 4.89, la version empaquetée dans Debian 9 « Squeeze ».
Configuration de base
Lors de l’installation d’Exim, un questionnaire ncurses est proposé pour remplir les champs du fichier de configuration /etc/exim4/update-exim4.conf.conf .
Remplissez ce que vous voulez, de toutes manières le questionnaire ncurses ne vous donne pas les clés pour comprendre ce que vous faites.
Mon conseil est de remplir ce fichier après avoir lu la page de manuel de l’outil update-exim4.com (cf. ci-après). En particulier :
- dc_eximconfig_configtype : définit un mode de fonctionnement. De nombreuses lignes de configuration sont conditionnelles (exemple : fonctionnement local ou internet).
- dc_other_hostnames : liste de domaines que le serveur Exim doit considérer comme étant lui-même.
- dc_local_interfaces : liste d’adresses IP locales sur lesquelles le serveur Exim doit écouter.
- dc_relay_domains : liste de domaines pour lesquels le serveur Exim est un MX. Pas utilisé dans le cas d’un serveur SMTP d’envoi seul.
- dc_minimaldns : choisir ‘false’ vu que de nombreuses lignes de configuration sont désactivées si ‘true’, notamment pour DKIM ou la vérification rDNS (champ PTR d’une IP entrante).
- dc_relay_nets : liste d’adresses IP pour lesquels Exim enverra le courrier en mode open relay sans authentification.
- dc_use_split_config : utiliser exim4.conf.template ou bien conf.d pour générer le fichier de configuration effectif dans /var/lib/exim4. Je recommande de laisser sur ‘true’ pour éviter de se perdre dans un fichier de 2000 lignes.
Toutes ces lignes sont des « macros » c’est à dire des variables configurables et dont dépendent de nombreuses lignes de configuration conditionnelles.
Par exemple dc_minimaldns est exploité sous la forme DC_minimaldns dans la configuration comme suit (MAIN_HOST_LOOKUP vaut « * » sauf si définition par l’utilisateur).
1 2 3 4 5 6 7 |
# Do a reverse DNS lookup on all incoming IP calls, in order to get the # true host name. If you feel this is too expensive, the networks for # which a lookup is done can be listed here. .ifndef DC_minimaldns [...] host_lookup = MAIN_HOST_LOOKUP .endif |
Les pages de manuel
Voici les pages de manuel à connaitre avant de tenter toute modification.
- man exim4 que l’on peut compléter par la synthèse des commandes Exim proposée par Q. Busuttil.
- man exim4-config_files pour voir les fichiers de configuration qui sont gérés automatiquement par la configuration Exim4 par défaut de Debian.
- man update-exim4.conf pour prendre conscience que le fichier de configuration utilisé par exim est réellement /var/lib/exim4/config.autogenerated bien que les modifications doivent impérativement se faire dans /etc/exim4 . Le générateur de configuration est donc /usr/sbin/update-exim4.conf et il se configure dans /etc/exim4/update-exim4.conf.conf notamment pour choisir une configuration à plant en un seul fichier ou bien dans conf.d.
- /usr/share/doc/exim4-base/README.Debian.gz à consulter grâce à un navigateur internet ou un éditeur de texte.
- /usr/share/doc/exim4-base/spec.txt.gz à consulter de la même manière.
Tests et débogage
Démarrer et arrêter Exim
En production service exim4 stop et service exim4 start seront utiles. On remarque que le script init de démarrage s’occupe de regénérer /var/lib/exim4/config.autogenerated grâce au programme /usr/sbin/update-exim4.conf .
On peut vérifier que le daemon tourne dans la liste des processus sous la forme /usr/sbin/exim4 -bd -q30m. Le dernier argument définit un temps de 30 minutes entre deux tentatives d’expédition de la liste d’attente et il se configure dans /etc/default/exim4 avec quelques autres paramètres de lancement.
Lorsque je suis en pleins tests, j’éteins le daemon avec la commande ci-dessus et je le lance comme ceci.
1 2 3 4 5 |
# screen -L # update-exim4.conf ; exim4 -bd -d -v # Ctrl+c (quitter exim) # Ctrl+d (quitter screen) # vi screenlog.0 |
Les arguments exim sont respectivement : mode daemon – debug – verbose. Dans ce cas, ne pas oublier de régénérer la configuration ! L’utilisation de screen permet de loguer la sortie d’Exim pour faire des recherches plus facilement.
Simuler une connexion SMTP
Pour simuler une connexion d’un client mail (MUA) ou d’un autre serveur MTA on peut utiliser telnet sur le port SMTP. Cela n’est pas facile avec les méthodes d’authentification autres que login/plain. Ce n’est pas non plus très facile pour tester une connexion SSL/TLS.
A la place il existe un mode d’Exim à utiliser sur le serveur capable de simuler une connexion entrante de la part d’une IP quelconque :
1 |
# exim -bhc <ip-du-client> |
On bénéficie ainsi de tout le dialogue SMTP coté client et coté serveur, ce qui est plus facile pour débugger.
Tester une expression Exim
Le langage de configuration Exim n’est pas toujours très lisible avec sa quantité d’accolades {}. On peut exécuter une expression toute simple pour voir si elle est valide. Exemple qui renvoie le mot de passe clair d’un login configuré dans le fichier passwd :
1 |
# exim -be '${extract{2}{:}{${lookup{login}lsearch{/etc/exim4/passwd}}}}' |
Et maintenant, il n’y à plus qu’à commencer…
Après avoir pris connaissance de ces paquets, fichiers de configurations et commandes de base, vous pouvez enfin vous attaquer à la configuration du serveur Exim à proprement dite. Étant donné la puissance et la souplesse du logiciel, mieux vaut ne pas griller les étapes.