====== 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 ([[https://help.ubuntu.com/community/Exim4|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 - suger - sugerpro - Pour des raisons à la fois historiques et pratiques, suger a trois adresses email, chacune avec son propre SMTP - suger@p2pfr.com, smtp: smtp.gmail.com, connexion avec authentification SSL sur le port 587 - suger@free.fr, smtp: smtp.free.fr - 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 - 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