| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| commun:passerelle_email_locale [2026/08/01 11:27] – francois | commun:passerelle_email_locale [2026/08/01 11:43] (Version actuelle) – francois |
|---|
| * Authentification : **désactivée** | * Authentification : **désactivée** |
| * Serveur : ''127.0.0.1'' — Port : ''25'' | * Serveur : ''127.0.0.1'' — Port : ''25'' |
| | |
| | ==== WordPress (blog, bare-metal) ==== |
| | |
| | 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.) ==== | ==== Conteneurs Docker (Diun, etc.) ==== |
| Appliquer : ''sudo update-exim4.conf && sudo systemctl restart exim4''. | 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''. | 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) === | === Correspondance réseaux Docker (référence) === |
| </code> | </code> |
| (les champs ''username'' / ''password'' deviennent inutiles) | (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 === | === Test de connexion depuis un conteneur === |
| | /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. | **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. |
| * **''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. | * **''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. | * **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''. |