Outils pour utilisateurs

Outils du site


commun:passerelle_email_locale

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
commun:passerelle_email_locale [2026/08/01 11:16] – créée francoiscommun:passerelle_email_locale [2026/08/01 11:43] (Version actuelle) – francois
Ligne 104: Ligne 104:
   * Serveur : ''127.0.0.1'' — Port : ''25''   * Serveur : ''127.0.0.1'' — Port : ''25''
  
-==== Diun et autres conteneurs Docker ====+==== WordPress (blog, bare-metal) ====
  
-⚠️ **Cas particulier** : depuis un conteneur, ''127.0.0.1'' désigne le conteneur, pas l'hôte. Il faut viser l'hôte via l'IP de la passerelle Docker (ou ''host.docker.internal'' selon la config réseau), et Exim doit accepter les connexions depuis le réseau Docker (pas seulement ''127.0.0.1''). À configurer au cas par cas — **non traité à ce jour**.+Plugin SMTP (« Autre SMTP » / WP Mail SMTP) : 
 +  * Hébergeur SMTP : ''localhost'' — Port : ''25'' 
 +  * Cryptage : **Aucun** 
 +  * **TLS auto : DÉSACTIVÉ** (sinon le plugin tente STARTTLS → échec ; c'est le réglage piège) 
 +  * Authentification : **désactivée** 
 + 
 +==== 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 : 
 + 
 +  - **Exim écoute sur les passerelles Docker** (pas seulement localhost). 
 +  - **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'') : 
 + 
 +<code> 
 +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' 
 +</code> 
 + 
 +  * ''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''. 
 + 
 +=== Pare-feu UFW === 
 + 
 +La politique ''INPUT'' est en ''DROP'' : sans règle explicite, le trafic des conteneurs vers le port 25 de l'hôte est **jeté avant d'atteindre Exim** (Exim écoute mais ne reçoit rien). Ouvrir le port 25 depuis la plage Docker : 
 + 
 +<code bash> 
 +sudo ufw allow from 172.16.0.0/12 to any port 25 proto tcp comment 'SMTP relais depuis conteneurs Docker' 
 +</code> 
 + 
 +(même plage que ''dc_relay_nets'' : les deux couches, pare-feu et relais Exim, sont alignées.) 
 + 
 +=== Désactiver l'annonce STARTTLS (sinon les clients tentent un TLS qui échoue) === 
 + 
 +Par défaut Exim annonce ''STARTTLS'' à tous. Un client conteneur (ex. Diun) tente alors un handshake TLS opportuniste, qui **échoue sur le certificat auto-signé d'Exim** (''gnutls_handshake: Certificate is bad''). On empêche l'annonce STARTTLS pour tout sauf le localhost strict — le trafic hôte↔conteneur passe alors en clair (local, non routable), et le chiffrement reste actif **en sortie** vers Infomaniak. 
 + 
 +⚠️ **Ne pas utiliser ''exim4.conf.localmacros''** : dans ce montage, les macros ''MAIN_*'' qu'on y place ne sont **pas** injectées dans la config compilée (testé : sans effet). Le fichier a été supprimé pour éviter toute confusion. Toute la config de ce relais passe par les directives ''dc_*'' (dans ''update-exim4.conf.conf'') et par des fichiers ''conf.d/main/''. Pour STARTTLS, la méthode fiable est un fichier direct dans ''conf.d/main/'' : 
 + 
 +<code bash> 
 +sudo tee /etc/exim4/conf.d/main/00_local_no_starttls > /dev/null << 'EOF' 
 +# STARTTLS annoncé uniquement en local strict ; pas aux conteneurs Docker. 
 +tls_advertise_hosts = 127.0.0.1 : ::1 
 +EOF 
 +sudo update-exim4.conf && sudo systemctl restart exim4 
 +</code> 
 + 
 +Vérifier que STARTTLS n'est plus annoncé aux conteneurs : 
 +<code bash> 
 +docker run --rm --network diun_net alpine sh -c \ 
 +  "printf 'EHLO test\r\nQUIT\r\n' | nc -w 5 172.20.0.1 25" | grep -i starttls 
 +</code> 
 +→ ne doit **rien** renvoyer (STARTTLS absent). 
 + 
 + 
 +=== 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.Config}}{{.Gateway}}{{end}}''' 
 + 
 +=== 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'') : 
 +<code yaml> 
 +notif: 
 +  mail: 
 +    host: 172.20.0.1 
 +    port: 25 
 +    ssl: false 
 +    from: "beafrancois@beafrancois.fr" 
 +    to: "beafrancois@beafrancois.fr" 
 +</code> 
 +(les champs ''username'' / ''password'' deviennent inutiles) 
 + 
 +**Tester l'envoi mail de Diun** : passer temporairement ''firstCheckNotif: true'', vider la base (''rm /mnt/stockage/docker/data/diun/diun.db'') et recréer le conteneur → Diun notifie chaque image détectée. **Remettre ''firstCheckNotif: false'' après le test**, sinon Diun re-notifie tout à chaque redémarrage. 
 + 
 +=== Test de connexion depuis un conteneur === 
 + 
 +<code bash> 
 +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" 
 +</code> 
 +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) ===== ===== Note sur l'adresse expéditeur (From) =====
Ligne 115: Ligne 212:
  
 ^ Fichier ^ Rôle ^ ^ Fichier ^ Rôle ^
-| /etc/exim4/update-exim4.conf.conf | Réglages principaux (dont ''dc_use_split_config=true'') |+| /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/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 | | /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) | | /var/lib/exim4/config.autogenerated | Config compilée (ne pas éditer à la main) |
 +| /etc/exim4/conf.d/main/00_local_no_starttls | Désactive l'annonce STARTTLS hors localhost (config découpée) |
 +| Règle UFW ''25/tcp ALLOW 172.16.0.0/12'' | Autorise les conteneurs à joindre le relais |
 +
 +**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 ===== ===== 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.   * **''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.
 +  * **Connexion conteneur jetée en silence (pas de réponse ''nc'')** : politique ''INPUT DROP'' d'UFW. Ouvrir le port 25 depuis ''172.16.0.0/12'' (voir section pare-feu).
 +  * **''gnutls_handshake: Certificate is bad'' depuis un conteneur** : le client tente STARTTLS et refuse le certificat auto-signé d'Exim. Désactiver l'annonce STARTTLS via ''conf.d/main/00_local_no_starttls'' (voir section dédiée).
 +  * **Une directive ne prend pas effet** : ne pas passer par ''exim4.conf.localmacros'' (macros non injectées dans ce montage — fichier supprimé). Utiliser un fichier ''conf.d/main/'' (config découpée) ou la directive ''dc_*'' correspondante.
   * **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>''.   * **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>''.   * **Voir la file d'attente** : ''sudo mailq''  — **vider un message** : ''sudo exim4 -Mrm <id>''.
   * **Logs** : ''sudo tail -f /var/log/exim4/mainlog''.   * **Logs** : ''sudo tail -f /var/log/exim4/mainlog''.
commun/passerelle_email_locale.1785582968.txt.gz · Dernière modification : de francois

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki