Outils pour utilisateurs

Outils du site


commun:passerelle_email_locale

Ceci est une ancienne révision du document !


Passerelle email locale (relais SMTP)

Dernière mise à jour : août 2026

Relais SMTP local sur le serveur cahute (192.168.1.9) : Exim4 configuré en smarthost. Toutes les applications du serveur envoient leur courrier au relais local, qui l'authentifie et le relaie vers Infomaniak. Objectif : centraliser les identifiants SMTP à un seul endroit au lieu de les configurer (et les changer) dans chaque application.

Principe

  • Exim4 écoute en local (127.0.0.1:25) et relaie tout vers mail.infomaniak.com:587 (STARTTLS + authentification).
  • Les identifiants Infomaniak sont dans un seul fichier : /etc/exim4/passwd.client.
  • Chaque application pointe vers le relais local sans authentification ni chiffrement (le relais s'en charge en amont vers Infomaniak).
  • Changement de mot de passe Infomaniak → une seule ligne à modifier, plus aucune application à reconfigurer.
Application (Gitea, Nextcloud…) ──> Exim4 local (127.0.0.1:25) ──[TLS+AUTH]──> mail.infomaniak.com:587

Configuration Exim4

Paquet : exim4-daemon-light (MTA par défaut de Debian, déjà présent). Pas besoin de Postfix.

Réglages principaux

Configurés via dpkg-reconfigure exim4-config :

  • Type : envoi par relais (smarthost) ; réception SMTP ou fetchmail
  • IP d'écoute SMTP : 127.0.0.1 ; ::1
  • Smarthost : mail.infomaniak.com::587 (double deux-points = syntaxe port Exim)
  • Domaines locaux : vide
  • Machines à relayer : vide
  • Config découpée en plusieurs fichiers : Oui (dc_use_split_config=true)

Le mode découpé (split=true) est nécessaire : il permet à Exim de lire les authenticators dans /etc/exim4/conf.d/auth/. En mode non-découpé, les ajouts personnalisés y sont ignorés.

Identifiants (fichier unique)

Fichier : /etc/exim4/passwd.client — permissions 640 root:Debian-exim

Format : serveur:login:motdepasse

mail.infomaniak.com:beafrancois@beafrancois.fr:LE_MOT_DE_PASSE

Caractères spéciaux dans le mot de passe : les authenticators Debian par défaut (plain / login de 30_exim4-config_examples) gèrent les “:” présents dans le mot de passe via une extraction regex (le login est isolé sur le premier “:”, tout le reste = mot de passe). Donc :

  • Mot de passe avec des “:” → OK, à coller tel quel, sans guillemets, sans échappement.
  • Seule contrainte : le login (champ 2) ne doit pas contenir de “:” (une adresse email n'en a pas).

Appliquer un changement de config Exim

sudo update-exim4.conf          # recompile la config
sudo systemctl restart exim4
sudo systemctl is-active exim4  # doit renvoyer "active"

Changer le mot de passe Infomaniak

Une seule opération, aucune application à toucher :

  1. Éditer /etc/exim4/passwd.client, remplacer le mot de passe sur la ligne mail.infomaniak.com.
  2. sudo update-exim4.conf && sudo systemctl restart exim4
  3. Tester (voir ci-dessous).

Test d'envoi

echo "Test relais - $(date)" | sudo exim4 -v -i -f beafrancois@beafrancois.fr beafrancois@beafrancois.fr

Séquence attendue dans la sortie -v :

  • AUTH PLAIN envoyé, réponse 235 (auth acceptée)
  • MAIL FROM / RCPT TO / DATA → 250
  • 250 Ok: queued as … (message accepté par Infomaniak)
  • Log : A=plain CV=yes (authentification + certificat TLS OK)

Le -f définit l'expéditeur d'enveloppe : sans lui, l'envoi part avec MAIL FROM:<> (vide) et peut être refusé.

Configuration des applications

Principe commun : pointer vers le relais local, sans auth, sans TLS.

Gitea (bare-metal)

Section [mailer] de /etc/gitea/app.ini — mode sendmail (le plus simple, appelle Exim directement) :

[mailer]
ENABLED = true
PROTOCOL = sendmail
FROM = beafrancois@beafrancois.fr
SENDMAIL_PATH = /usr/sbin/sendmail

Supprimer les anciennes lignes : SMTP_ADDR, SMTP_PORT, SMTP_STARTTLS, USER, PASSWD. Recharger : sudo systemctl restart gitea. Tester via Administration → Configuration → Mailer → Send Testing Email.

Nextcloud (bare-metal)

Administration → Paramètres de base → Serveur de messagerie :

  • Mode d'envoi : SMTP
  • Chiffrement : Aucun
  • Authentification : désactivée
  • Serveur : 127.0.0.1 — Port : 25

Conteneurs Docker (Diun, etc.)

Depuis un conteneur, 127.0.0.1 désigne le conteneur lui-même, pas l'hôte. Un conteneur joint donc Exim via l'IP de la passerelle de son réseau Docker (172.x.0.1). Deux conditions côté Exim, toutes deux configurées :

  1. Exim écoute sur les passerelles Docker (pas seulement localhost).
  2. Exim autorise le relais depuis les sous-réseaux Docker.

Réglages appliqués

Dans /etc/exim4/update-exim4.conf.conf (les directives dc_* ont priorité sur les macros — c'est ici qu'il faut modifier, pas dans localmacros) :

dc_local_interfaces='127.0.0.1 ; ::1 ; 172.17.0.1 ; 172.18.0.1 ; 172.19.0.1 ; 172.20.0.1'
dc_relay_nets='172.16.0.0/12'
  • dc_local_interfaces : localhost + passerelles des 4 réseaux Docker.
  • dc_relay_nets : 172.16.0.0/12 couvre toute la plage privée Docker (172.16 → 172.31), donc pas besoin de la modifier à chaque nouveau réseau.

Appliquer : sudo update-exim4.conf && sudo systemctl restart exim4. Vérifier l'écoute : sudo ss -tlnp | grep ':25 ' → doit lister les 172.x.0.1:25.

Correspondance réseaux Docker (référence)

Réseau Passerelle (IP hôte) Sous-réseau
bridge (défaut) 172.17.0.1 172.17.0.0/16
surveillance_net 172.18.0.1 172.18.0.0/16
lldap_net 172.19.0.1 172.19.0.0/16
diun_net 172.20.0.1 172.20.0.0/16

Retrouver la passerelle d'un réseau : docker network inspect <net> –format 'range_.ipam.configgatewayend'

Config d'un conteneur

Serveur SMTP = IP de la passerelle de son réseau (ex. Diun sur diun_net → 172.20.0.1), port 25, sans auth, sans TLS.

Exemple pour Diun (diun.yml) :

notif:
  mail:
    host: 172.20.0.1
    port: 25
    ssl: false
    from: "beafrancois@beafrancois.fr"
    to: "beafrancois@beafrancois.fr"

(les champs username / password deviennent inutiles)

Test de connexion depuis un conteneur

docker run --rm --network diun_net alpine sh -c \
  "apk add --no-cache netcat-openbsd >/dev/null 2>&1; \
   printf 'EHLO test\r\nQUIT\r\n' | nc -w 5 172.20.0.1 25"

Exim doit répondre 220 … ESMTP Exim suivi des capacités 250-….

⚠️ Sécurité : ouvrir le relais à 172.16.0.0/12 autorise tout conteneur à envoyer via Infomaniak. Acceptable tant que les passerelles Docker ne sont pas routables depuis le LAN (elles ne le sont pas par défaut). Un conteneur compromis pourrait néanmoins émettre du courrier.

Note sur l'adresse expéditeur (From)

Infomaniak peut refuser d'expédier un message dont le From n'est pas une adresse autorisée sur le compte. La valeur validée est beafrancois@beafrancois.fr (l'adresse authentifiée). Pour utiliser un From différent par service (ex. git@beafrancois.fr), il faut que ce soit un alias autorisé côté Infomaniak, sinon l'envoi est rejeté.

Fichiers de référence

Fichier Rôle
/etc/exim4/update-exim4.conf.conf Réglages principaux : dc_use_split_config=true, dc_local_interfaces (écoute), dc_relay_nets (relais Docker)
/etc/exim4/passwd.client Identifiants Infomaniak (fichier unique, 640 root:Debian-exim)
/etc/exim4/conf.d/auth/30_exim4-config_examples Authenticators Debian (plain / login) utilisés
/var/lib/exim4/config.autogenerated Config compilée (ne pas éditer à la main)

Important : les directives dc_* de update-exim4.conf.conf ont priorité sur les macros MAIN_* de localmacros (mécanisme .ifndef). Pour l'écoute et le relais, modifier les dc_*, pas les macros.

Dépannage

  • 530 Authentication required : Exim n'a pas envoyé d'AUTH. Vérifier que dc_use_split_config=true et que la ligne existe dans passwd.client. Recompiler.
  • Exim n'écoute pas sur les IP Docker malgré la macro : normal, les dc_local_interfaces priment. Modifier update-exim4.conf.conf, pas localmacros.
  • relay not permitted depuis un conteneur : le sous-réseau du conteneur n'est pas dans dc_relay_nets. Vérifier que 172.16.0.0/12 y figure.
  • Conteneur ne joint pas Exim : il vise 127.0.0.1 (= lui-même) au lieu de la passerelle. Utiliser l'IP 172.x.0.1 de son réseau.
  • Mail gelé (Frozen) : voir la file avec sudo mailq, détails avec sudo exim4 -Mvl <id>. Relancer un message après correction : sudo exim4 -M <id>.
  • Voir la file d'attente : sudo mailq — vider un message : sudo exim4 -Mrm <id>.
  • Logs : sudo tail -f /var/log/exim4/mainlog.
commun/passerelle_email_locale.1785583623.txt.gz · Dernière modification : de francois

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki