Table des matières

Exim

Exim est un agent de transfert de messages (MTA), autrement dit un logiciel qui prend en charge la distribution du courrier aussi bien en local que sur un réseau, qu’il s’agisse d’un réseau local ou de l’ensemble du net (en termes simples, c’est un serveur smtp). Il est l’un des principaux MTA sous *nix, avec Postfix et est, actuellement, le MTA par défaut de Debian et de ses dérivées, notamment d’Ubuntu.

La configuration d’exim4 sous Debian est, a priori assez simple (Page de la doc d'Ubuntu sur la configuration d'Exim, en anglais), mais on peut parfois se trouver face à une situation plus complexe, notamment lorsque l’on veut pouvoir utiliser plusieurs serveurs relais SMTP, et pire encore, lorsque l’un des utilisateurs a plusieurs adresses internet utilisant chacune un relais SMTP différent.

C’est l’objectif de ce tuto : créer une configuration d’exim (au départ conçue pour un ordinateur portable qui peut se connecter à Internet soit via un réseau personnel, soit via un réseau professionnel n’autorisant pas les connexions SMTP sortantes (n’autorisant pas grand chose, en fait), portable qui se trouve avoir deux comptes principaux, l’un celui de l’utilisateur à titre perso (suger), l’autre celui de l’utilisateur à titre professionnel (sugerpro).

Description de la configuration

- Il y a deux utilisateurs qui se loguent sur l’ordinateur

  1. suger
  2. sugerpro

- Pour des raisons à la fois historiques et pratiques, suger a trois adresses email, chacune avec son propre SMTP

  1. suger@p2pfr.com, smtp: smtp.gmail.com, connexion avec authentification SSL sur le port 587
  2. suger@free.fr, smtp: smtp.free.fr
  3. suger@orange.fr, smtp: smtp.orange.fr

- Par ailleurs, suger est aussi le destinataire des mails envoyés à root, histoire de savoir ce qui se passe sur l’ordi

- Sugerpro, lui, n’a qu’une adresse, professionnelle, avec son SMTP

  1. suger@boulot.fr, smtp: smtp.boulot.fr

Enfin, en cas de problème avec un des smtps ci-dessus, on charge gmail de faire la distribution

L’ordinateur répond au joli nom de PortableSuger et a, entre autres un démon avahi/zeroconf qui tourne. De façon très originale, suger a appelé son réseau interne chez.moi

Mise en place du système de distribution du courrier

Première étape : paramétres extérieurs au MTA

Editer /etc/hosts et s’assurer que l’on a une ligne

127.0.0.1 PortableSuger.chez.moi PortableSuger localhost

Editer /etc/aliases et ajouter, si elle n’y est pas, une ligne

root: suger@localhost

Deuxième étape : installation et configuration de base d'Exim

Sous Debian et dérivées, c’est très simple :

sudo aptitude install exim4 exim4-config
sudo dpkg-reconfigure exim4-config

Et répondre aux questions :

Envoi via un relais ("smarthost") - réception SMTP ou fetchmail
Nom de courriel du système : PortableSuger.chez.moi
Liste d'Ips ou exim attend des connexions SMTP entrantes : 127.0.0.1
Addresses pour lesquelles cette machine est la destination finale : PortableSuger;portablesuger.local
Machine à relayer : laisser vide
Nom réseau ou IP du système smarthost : smtp.gmail.com::587 (soit le smtp de secours)
Cacher le nom local dans les courriers sortants : non
Minimiser les requêtes DNS : non
Méthode de distribution du courrier local : personnellement, j'utilise /var/spool/mail
Séparer la configuration dans plusieurs fichiers ? : oui

Création de fichiers de paramètres spécifiques

Bien, maintenant, on va créer un fichier /etc/exim4/smarthostlist dans lequel on va mettre, adresse par adresse, le smarthost à utiliser

suger@p2pfr.com: smtp.gmail.com::587
suger@free.fr: smtp.free.fr
suger@orange.fr: smtp.orange.fr
suger@boulot.fr: smtp.boulot.fr

Pour permettre l’authentification pour gmail, on édite le fichier /etc/exim4/password.client et on y ajoute

gmail-smtp.l.google.com:suger@p2pfr.com:monmdp 
*.google.com:suger@p2pfr.com:monmdp 
smtp.gmail.com:suger@p2pfr.com:monmdp 

Mise au point de la configuration d'exim

Il y a deux choses à faire :

Autoriser les utilisateurs à modifier leur en-tête de messagerie (le champ From). Sauf déclaration spécifique, en effet, exim remplace systématiquement celui-ci soit par le nom d’utilisateur (suger@localhost), soit par une adresse indiquée, utilisateur par utilisateur, dans /etc/exim4/email-addresses. Or, ici, suger veut pouvoir utiliser plusieurs adresses.

On crée donc un fichier

/etc/exim4/conf.d/main/00_localmacros (le 00_ au début du nom du fichier est important), dans lequel on met

.ifndef MAIN_TRUSTED_USERS
MAIN_TRUSTED_USERS = uucp:suger
.endif

Ensuite, il faut expliquer à exim qu’il faut choisir le smtp en fonction de l’adresse de l’expéditeur. C’est le rôle du fichier

/etc/exim4/conf.d/router/00_localmacros

où l’on met

smart_smarthost:
driver = manualroute
domains = ! +local_domains
route_data = ${lookup{$sender_address}lsearch{/etc/exim4/smarthostroutelist}}
no_verify
host_find_failed = defer
same_domain_copy_routing = yes
transport = remote_smtp_smarthost

Reconfigurer et relancer exim

sudo update-exim4.conf
sudo /etc/init.d/exim4 restart

Et voilà. Il n’y a plus qu’à être sur que son logiciel de messagerie mette bien l’adresse from en tête de l’enveloppe. Sous gnus, ça se fait en rajoutant deux lignes dans ~/.gnus

(setq message-sendmail-f-is-evil nil)
(setq message-sendmail-envelope-from 'header)

Utiliser des smtp différents selon le domaine du destinataire

Supposons, pour le plaisir de compliquer, que l’on veuille, en plus, pour certains destinataires particuliers, utiliser un smtp donné, par exemple parce que leur domaine n’accepte que certains smtp. Il faut, dans ce cas, modifier ainsi /etc/exim4/conf.d/router/00_localhost

special_routers:
driver = manualroute
domains = domaine.special;autre.domaine;encore.un.domaine
route_list = mon.smtp.special
no_verify
host_find_failed = defer
same_domain_copy_routing = yes
transport = remote_smtp_smarthost
smart_smarthost:
driver = manualroute
domains = ! +local_domains
route_data = ${lookup{$sender_address}lsearch{/etc/exim4/smarthostroutelist}}
no_verify
host_find_failed = defer
same_domain_copy_routing = yes
transport = remote_smtp_smarthost