Il y avait deux dépôts d'infrastructure et aucune frontière entre eux. La seule distinction défendable — « documentation » d'un côté, « fichiers de configuration » de l'autre — ne tenait plus : infra avait fini par contenir plus de documentation qu'owni, pendant qu'owni décrivait du concret (IP, bases, comptes). Tout vient donc ici : conf/ (vhosts de référence), dns/ (export de zone), services/ (units systemd), scripts/ (sauvegarde) et docs/ (courrier sortant, certificats, sauvegardes, et le déploiement par service). Dans ce sens plutôt que l'inverse parce qu'« owni » nomme la machine, là où « infra » ne dit pas de quoi il s'agit — et c'est le nom que Cédric emploie spontanément, y compris pour le dossier de secrets. Les renvois croisés entre les deux dépôts deviennent des liens internes : un lien vers un dépôt qu'on s'apprête à archiver aurait pourri en silence. Reste une incohérence, signalée plutôt que corrigée à la hâte : docs/admin.md, static.md, wiki.md, dynamic.md et proxy-calendar.md décrivent le déploiement de sites, pas la machine. Ils ont la même place ici que celle que la messagerie n'avait pas — ils devraient rejoindre leurs dépôts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SFbwnJurBwTs7x7t93ecku
5.5 KiB
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 : 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+<référence>@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: <bounce+…@alpinux.org> à 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+<ref>@alpinux.org tombe dans bounce@, l'adresse complète restant
lisible dans Delivered-To. Le VERP en dépend entièrement.
Vérifier
# 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.