# Courrier sortant d'owni Ce qui vaut pour **tout** le courrier de la machine, quel que soit le service qui l'émet — messagerie, Dolibarr, Gitea, avis système. Ce qui est propre à l'application de publipostage est dans son dépôt, [alpinux.messagerie](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux.messagerie) : en-têtes de liste, classement des rebonds, masquage des adresses, hygiène de liste. État au 27/09/2026. ## Tout sort par un relais **Depuis les 25-26 septembre 2026**, Postfix ne remet plus directement : ``` relayhost = [mail.acemail.fr]:587 smtp_sasl_auth_enable = yes ``` | | | |---|---| | IP qui parle aux destinataires | `176.9.125.188` (le relais) | | IP de la machine | `51.91.79.148` — n'émet plus | | Compte de soumission | `messagerie@alpinux.org` | Vérifié dans les logs : les messages de campagne sortent bien par `mail.acemail.fr[176.9.125.188]:587`. ### Trois conséquences **La réputation d'expéditeur n'est plus la nôtre seule.** Un rejet de plus compte contre une IP partagée avec les autres clients de l'hébergeur. Cela rend l'hygiène de liste plus impérative, pas moins. **Le blocage Microsoft sur `51.91.79.148` n'a plus d'objet.** Cette IP n'émet plus ; la demande de délistage a été abandonnée pour cette raison. **Un plafond d'envoi s'ajoute**, celui du relais, et il n'est pas connu. Le franchir ne produirait aucune erreur applicative : les messages s'accumuleraient en `status=deferred` dans la file de Postfix, avec un code `4.x.x` venu du relais. ### L'enveloppe doit survivre au relais La messagerie utilise des adresses de retour variables — `bounce+@alpinux.org` — pour savoir quel envoi a rebondi. Un relais authentifié réécrit volontiers l'enveloppe, soit pour la faire correspondre au compte SASL, soit en SRS. **Vérifié le 27/09/2026 : celui-ci la préserve.** Un message parti par le relais portait bien `Return-Path: ` à l'arrivée. > À revérifier après **tout** changement chez l'hébergeur du relais. La panne > serait silencieuse : aucune erreur, aucun log, simplement plus un seul > rebond relevé — et une liste qui se dégrade sans que rien ne le signale. > > Le symptôme à guetter en base : des rebonds qui arrivent tous **orphelins**, > non rattachés à leur envoi. ## DNS du courrier ``` SPF v=spf1 a mx include:_spf.acemail.fr -all DKIM sélecteur « default », 2048 bits, signé par owni avant le relais DMARC v=DMARC1; p=quarantine; pct=100; rua=mailto:postmaster@alpinux.org; aspf=r MX 10 owni.alpinux.org ``` `_spf.acemail.fr` autorise `ip4:176.9.125.188` : le relais est donc couvert. **DKIM est signé par owni avant la remise au relais.** C'est lui qui aligne DMARC si SPF venait à échouer — par exemple si l'hébergeur changeait d'IP sans mettre son SPF à jour. ### Ne pas rouvrir l'IPv6 sortante sans précaution L'envoi est forcé en IPv4 (`-o inet_protocols=ipv4` sur le transport `smtp` de `master.cf`). L'IPv6 a été ouverte le 21/09/2026 et refermée le 22 : en vingt-quatre heures, `2001:41d0:404:200::3f85` s'est fait lister par Spamhaus (CSS et XBL) et Gandi rejetait en `554`. Une IP neuve qui se met à émettre des campagnes est exactement le profil que cible la liste CSS. Postfix **ne se replie pas** en IPv4 quand un MX rejette en dur : le message rebondit sèchement. ## Limites de débit | Où | Réglage | Protège de | |---|---|---| | Postfix, soumission | `smtpd_client_message_rate_limit` = 400/h | un compte compromis | | Postfix, sortie | `smtp_destination_rate_delay` = 1 s | le `450` des MX distants | | Relais, en aval | **inconnue** | ce qu'on ignore | Le compteur de Postfix est **partagé** par tous les services de la machine — portail, Gitea, Dolibarr, messagerie. Un service qui s'emballe pénalise les autres. Profil réel mesuré le 24/09/2026 : une campagne de **254 messages en 10 minutes**, soit environ 25 par minute. C'est ce débit instantané qu'il faut confronter aux limites du relais, pas une moyenne horaire. ## Les boîtes du service `alpinux.org` est un **domaine virtuel** (`virtual_mailbox_domains` en MySQL, livraison LMTP vers Dovecot) : `/etc/aliases` ne s'y applique pas. Une adresse qui doit recevoir a besoin d'une vraie boîte. | Boîte | Reçoit | |---|---| | `bounce@alpinux.org` | les rapports de non-remise, via VERP | | `postmaster@alpinux.org` | rapports DMARC, plaintes FBL, courrier d'opérateur | | `abuse@alpinux.org` | alias de `postmaster@` (RFC 2142) | | `messagerie@alpinux.org` | expédie, et reçoit les réponses humaines | `recipient_delimiter = +` est actif : tout ce qui arrive sur `bounce+@alpinux.org` tombe dans `bounce@`, l'adresse complète restant lisible dans `Delivered-To`. **Le VERP en dépend entièrement.** ## Vérifier ```sh # Par où sort le courrier postconf -h relayhost sender_canonical_maps smtp_generic_maps recipient_delimiter # Ce que les destinataires voient réellement dig +short TXT alpinux.org | grep spf dig +short TXT _dmarc.alpinux.org dig +short TXT _spf.acemail.fr # Les remises récentes, et par quel relais sudo grep "relay=" /var/log/mail.log | grep -oE "relay=[^,]*" | sort | uniq -c | sort -rn | head # Les messages différés : le symptôme d'un plafond atteint sudo grep "status=deferred" /var/log/mail.log | tail -5 ``` Le miroir le plus utile reste **les rapports DMARC** : les logs disent ce qui est parti, les rapports disent ce qui est *arrivé*, vu d'en face — y compris ce qui est parti sans qu'on le sache. Ils sont dépouillés par la messagerie et consultables sur `/postmaster`.