{"id":3480,"date":"2021-04-08T14:00:00","date_gmt":"2021-04-08T12:00:00","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=3480"},"modified":"2021-04-13T16:38:34","modified_gmt":"2021-04-13T14:38:34","slug":"exim4","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=3480","title":{"rendered":"exim4"},"content":{"rendered":"\n<p>J&rsquo;ai effectu\u00e9 courant d\u00e9cembre 2020, une migration de mes services auto-h\u00e9berg\u00e9s vers une nouvelle machine. Ayant r\u00e9organis\u00e9 en 2019 l&rsquo;ensemble de mes roles Ansible, et passant d&rsquo;une base Debian 9 \u00e0 Debian 10, de nombreuses corrections ont une nouvelle fois \u00e9t\u00e9 n\u00e9cessaires avant que l&rsquo;ensemble soit \u00e0 nouveau d\u00e9ploy\u00e9 correctement de mani\u00e8re automatique. La majorit\u00e9 des adaptations provenaient du passage \u00e0 php7.4, avec un test de la version 8 (encore trop r\u00e9cente pour plusieurs services). Le reste concernait l&rsquo;envoi de mail depuis le serveur avec <code>exim4<\/code>.<\/p>\n\n\n\n<p>En commen\u00e7ant l&rsquo;aventure de l&rsquo;auto-h\u00e9bergement, la question de l&rsquo;envoi des mails ne s&rsquo;\u00e9tait pas pos\u00e9e, car, dans mes souvenirs en tout cas, WordPress arrivait \u00e0 me notifier par mail sans avoir de modification \u00e0 effectuer au niveau du syst\u00e8me Debian fournit avec le serveur Kimsufi que j&rsquo;utilisais \u00e0 l&rsquo;\u00e9poque. En migrant par la suite sur un VPS et en auto-h\u00e9bergeant certains services \u00e0 mon domicile, l&rsquo;envoi de mail avait cess\u00e9 de fonctionner et j&rsquo;avais choisi d&rsquo;ignorer la question jusqu&rsquo;\u00e0 la mie 2019, o\u00f9 j&rsquo;avais r\u00e9ussi \u00e0 produire une configuration fonctionnelle, en utilisant les serveurs de mail de l&rsquo;h\u00e9bergeur. Une nouvelle migration d&rsquo;Unicoda courant 2020 avait \u00e0 nouveau rendu l&rsquo;envoi de mail inop\u00e9rant. Idem avec la r\u00e9cente migration de ma machine locale.<\/p>\n\n\n\n<p>Afin de continuer de recevoir les notifications li\u00e9es \u00e0 l&rsquo;ex\u00e9cution des sauvegardes journali\u00e8res de l&rsquo;ensemble des services, et de b\u00e9n\u00e9ficier \u00e0 nouveau des notifications WordPress, comme celles des nouveaux commentaires, je me suis donc replonger dans les profondeurs de la configuration des services mails sous GNU\/Linux, afin de corriger le r\u00f4le Ansible responsable de la configuration automatique des services mails. <\/p>\n\n\n\n<p>Voici donc \u00e0 la suite, le r\u00e9sultat de mes notes de 2019, adapt\u00e9es et corrig\u00e9es apr\u00e8s les recherches de d\u00e9cembre l&rsquo;an dernier. J&rsquo;esp\u00e8re ne pas avoir oubli\u00e9 d&rsquo;\u00e9tapes, mais les essais successifs de param\u00e8tres diff\u00e9rents conduisent parfois \u00e0 des incoh\u00e9rences, lorsque les notes ne sont pas mises \u00e0 jour avec les derni\u00e8res modifications effectu\u00e9es \u00e0 l&rsquo;issue d&rsquo;une session \u00e9reintante de d\u00e9bogage :). Par ailleurs, si mon r\u00f4le Ansible a bien \u00e9t\u00e9 mis \u00e0 jour, il me reste n\u00e9anmoins \u00e0 le tester une nouvelle fois, sur un syst\u00e8me vierge, dans l&rsquo;id\u00e9al, afin de garantir son bon fonctionnement. Cela \u00e9tant dit, voici la configuration qui permet \u00e0 mes serveurs d&rsquo;envoyer des mails.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Configuration<\/h4>\n\n\n\n<p>Commen\u00e7ons par installer les composants n\u00e9cessaires:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo aptitude install exim4 openssl ca-certificates mailutils<\/pre>\n\n\n\n<p>Je modifie ensuite <code>\/etc\/email-addresses<\/code> pour lier utilisateurs locaux et adresses mails. Ici, le but est de renvoyer tout vers l&rsquo;adresse <code>example@unicoda.com<\/code> (adresse fictive pour l&rsquo;exemple):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">root : example@unicoda.com\nmonUtilisateur : example@unicoda.com\n* : example@unicoda.com<\/pre>\n\n\n\n<p>Manipulation similaire, cette fois dans <code>\/etc\/aliases<\/code> , puis j&rsquo;ex\u00e9cute la commande <code>newaliases<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">root: monUtilisateur\nmonUtilisateur : example@unicoda.com<\/pre>\n\n\n\n<p>Je modifie ensuite le fichier <code>\/etc\/exim4\/passwd.client<\/code>, pour y ajouter une ligne contenant les informations de connexion au serveur mail choisi pour l&rsquo;envoi, de la forme <code>target.mail.server.example:login:password<\/code> , et lui applique un masque <code>640<\/code> pour les autorisations d&rsquo;acc\u00e8s.<\/p>\n\n\n\n<p>Avant d&rsquo;aller plus loin dans la configuration, je m&rsquo;assure \u00e9galement que mon fichier <code>\/etc\/hosts<\/code> contient une ligne faisant pointer le hostname de la machine vers elle-m\u00eame, soit la ligne <code>127.0.0.1 hostname<\/code>. Par ailleurs, je modifie \u00e9galement <code>\/etc\/mailname<\/code> pour y ajouter le hostname, cette modification m&rsquo;ayant \u00e9t\u00e9 particuli\u00e8rement utile pour le cas d&rsquo;un message \u00e0 destination d&rsquo;un utilisateur de la machine, soit par exemple <code>root@hostname<\/code>.<\/p>\n\n\n\n<p>\u00c9tape suivante, d\u00e9ploiement du fichier <code>\/etc\/exim4\/exim4.conf.localmacros<\/code> avec le contenu suivant, pour l&rsquo;utilisation de TLS et du port 465:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">MAIN_TLS_ENABLE = 1<br>REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS = *<br>TLS_ON_CONNECT_PORTS = 465<br>REQUIRE_PROTOCOL = smtps<br>IGNORE_SMTP_LINE_LENGTH_LIMIT = true<\/pre>\n\n\n\n<p>Avant de continuer plus avant, il faut cr\u00e9er un certificat TLS pour exim4, on peut se baser pour cela sur l&rsquo;\u00e9tape 4 de <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/imthenachoman\/How-To-Secure-A-Linux-Server#gmail-and-exim4-as-mta-with-implicit-tls\" target=\"_blank\">ce tutoriel<\/a>, qui donne la commande \u00e0 ex\u00e9cuter. De mon c\u00f4t\u00e9, j&rsquo;utilise les modules <code>openssl_privatekey<\/code>, <code>openssl_csr<\/code> et <code>openssl_certificate<\/code> dans ansible pour r\u00e9aliser ces op\u00e9rations. <\/p>\n\n\n\n<p>J&rsquo;apporte quelques modifications au fichier <code>\/etc\/exim4\/update-exim4.conf.conf<\/code>, correspondant aux \u00e9tapes 9 et 10 du tutoriel cit\u00e9 ci-dessus, \u00e0 savoir, l&rsquo;ajout du bloc suivant, juste <strong>avant<\/strong> la ligne <code>.ifdef REMOTE_SMTP_HEADERS_REWRITE<\/code> (\u00e9tape 9):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.ifdef REQUIRE_PROTOCOL\n  protocol = REQUIRE_PROTOCOL\n.endif<\/pre>\n\n\n\n<p> Ainsi que le bloc suivant, juste <strong>apr\u00e8s<\/strong> la ligne (\u00e9tape 10):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.ifdef TLS_ON_CONNECT_PORTS\n  tls_on_connect_ports = TLS_ON_CONNECT_PORTS\n.endif<\/pre>\n\n\n\n<p>Enfin, \u00e9dition du fichier <code>\/etc\/exim4\/update-exim4.conf.conf<\/code> pour sp\u00e9cifier le comportement d&rsquo;exim4, qui peut \u00e9galement \u00eatre g\u00e9n\u00e9r\u00e9 dynamiquement via <code>sudo dpkg-reconfigure exim4-config<\/code>. \u00c0 noter, que le mode <code>satellite<\/code> ne prend pas en consid\u00e9ration l&rsquo;envoi local, et ne tient donc pas compte des alias configur\u00e9s (comme pr\u00e9cis\u00e9 dans <a rel=\"noreferrer noopener\" href=\"https:\/\/serverfault.com\/a\/907815\" target=\"_blank\">ce message<\/a>). Pour \u00eatre complet, je lui ai donc pr\u00e9f\u00e9r\u00e9 le mode <code>smarthost<\/code>. J&rsquo;ai pour ma part chang\u00e9 le <code>dc_readhost<\/code> par rapport au tutoriel dont je me suis inspir\u00e9, qui proposait <code>localhost<\/code> comme valeur. Je crois me souvenir que <code>localhost<\/code> ne fonctionnait pas dans mon cas, mais une nouvelle s\u00e9rie de tests avec cette configuration ne serait pas inutile pour \u00eatre fix\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dc_eximconfig_configtype='smarthost'\ndc_other_hostnames=''\ndc_local_interfaces='127.0.0.1 ; ::1'\ndc_readhost='unicoda.com'\ndc_relay_domains=''\ndc_minimaldns='false'\ndc_relay_nets=''\ndc_smarthost='target.mail.server.example::465'\nCFILEMODE='644'\ndc_use_split_config='false'\ndc_hide_mailname='true'\ndc_mailname_in_oh='true'\ndc_localdelivery='mail_spool'<\/pre>\n\n\n\n<p>Nous y sommes presque, il suffit \u00e0 pr\u00e9sent de d\u00e9ployer la configuration exim4 via <code>sudo update-exim4.conf<\/code>, puis de red\u00e9marrer le service avec la commande <code>sudo service exim4 restart<\/code>. On peut ensuite essayer d&rsquo;envoyer un mail depuis la machine avec <code>echo \"test\" | mail -s \"Test\" example@unicoda.com<\/code>. Si tout va bien, le mail arrive correctement \u00e0 l&rsquo;adresse fournie, sinon, il vous faudra, comme moi, parcourir les logs (<code>sudo tail \/var\/log\/exim4\/mainlog<\/code>) pour comprendre la nature du probl\u00e8me de configuration et parcourir les nombreux sujets et documentation autour d&rsquo;exim4.<\/p>\n\n\n\n<p>Pour finir, avant une liste d&rsquo;article qui m&rsquo;avait \u00e9t\u00e9 utile lors de la configuration, voici encore quelques commandes utiles pour d\u00e9boguer une configuration exim4 non fonctionnelle.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Commandes<\/h4>\n\n\n\n<p>Consulter la liste des messages gel\u00e9s.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">exim4 -bp<\/pre>\n\n\n\n<p>Supprimer tous les messages gel\u00e9s.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">exiqgrep -z -i | xargs exim -Mrm<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Sources<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/imthenachoman\/How-To-Secure-A-Linux-Server#gmail-and-exim4-as-mta-with-implicit-tls\" target=\"_blank\">Gmail and Exim4 As MTA With Implicit TLS<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"http:\/\/vhaguersblog.ouvaton.org\/main\/configuration-dexim-sous-debian-jessie-pour-de-lenvoi-de-mails.html\" target=\"_blank\">Configuration d&rsquo;Exim sous Debian Jessie pour de l&rsquo;envoi de mails<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/snippets.webaware.com.au\/howto\/exim4-with-wildcard-email-aliases\/\" target=\"_blank\">exim4 with wildcard email aliases<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/wiki.debian.org\/Exim\" target=\"_blank\">Exim &#8211; Debian Wiki<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai effectu\u00e9 courant d\u00e9cembre 2020, une migration de mes services auto-h\u00e9berg\u00e9s vers une nouvelle machine. Ayant r\u00e9organis\u00e9 en 2019 l&rsquo;ensemble de mes roles Ansible, et passant d&rsquo;une base Debian 9 \u00e0 Debian 10, de nombreuses corrections ont une nouvelle fois \u00e9t\u00e9 n\u00e9cessaires avant que l&rsquo;ensemble soit \u00e0 nouveau d\u00e9ploy\u00e9 correctement de mani\u00e8re automatique. La majorit\u00e9 &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=3480\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;exim4&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[337,316,31],"tags":[580,278],"class_list":["post-3480","post","type-post","status-publish","format-standard","hentry","category-auto-hebergement","category-configuration","category-installation","tag-exim4","tag-mail"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/3480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3480"}],"version-history":[{"count":8,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/3480\/revisions"}],"predecessor-version":[{"id":4490,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/3480\/revisions\/4490"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}