58. pepsi-stage-route

Envoyer chaque destinataire vers le saut suivant que son domaine sélectionne.

58.1. Rôle

pepsi-stage-route prend l’unique décision d’acheminement qu’une passerelle placée devant un autre système de courrier a à prendre sur chaque message entrant : ce destinataire appartient-il au système derrière moi, ou à l’internet ? Elle choisit une étape suivante par destinataire d’enveloppe d’après le domaine de ce destinataire, scindant le message lorsque les destinataires divergent. Elle ne déplace que la colonne stage — elle ne réécrit, ne remet, ne fait rebondir ni n’abandonne jamais un message, et state (y compris state.dsn) est préservé. Référence : pepsi-stage-route(1).

Se tromper sur cette décision n’est pas un échec de remise mais une boucle de courrier : les domaines situés derrière la passerelle sont exactement les domaines dont le MX public est la passerelle. Voir Microsoft Exchange comme passerelle pour le déploiement auquel cette étape est destinée.

58.2. Fonctionnalités

  • Domaines gérés par défaut. MANAGED_DOMAINS vaut par défaut [pepsi-ingress] ACCEPTED_DOMAINS, de sorte que l’ensemble des domaines traités comme « derrière la passerelle » ne peut pas dériver de l’ensemble que l’ingress accepte réellement. Avec MANAGED_STAGE défini, toute la topologie de passerelle tient en deux options.

  • Des règles explicites pour les exceptions. ROUTES prend des paires <domain>=<stage> séparées par des espaces ou des virgules, consultées avant l’ensemble géré, de sorte qu’un sous-domaine puisse aller ailleurs sans retirer son parent de MANAGED_DOMAINS (ce qui empêcherait aussi l’ingress de l’accepter).

  • Des motifs glob, pas des expressions régulières. * correspond à toute suite de caractères et la correspondance est ancrée aux deux extrémités : *.example.org correspond à mail.example.org mais ni à example.org ni à mail.example.org.evil.test. Un motif ayant l’allure d’une expression régulière est rejeté au moment de la configuration plutôt que de ne silencieusement correspondre à rien.

  • Éventail des destinataires par groupe. Les destinataires divergents deviennent des lignes pending sœurs en un seul appel à la base, chacune ne portant que ses propres destinataires, avec state.dsn.rcpt découpé pour correspondre à rcpt_to.

  • Regroupement déterministe. Les groupes sont formés dans l’ordre de première apparition, de sorte qu’un message réessayé conserve les mêmes destinataires sur la même ligne.

  • Métadonnées seules. Ni les en-têtes ni le corps ne sont chargés.

Note

Contrairement aux autres étapes à métadonnées seules, celle-ci n’a pas FUSION = yes par défaut. Sur le papier elle est candidate — elle est pliée dans le binaire unifié et ne charge aucun contenu de message — mais une étape fusionnée s’exécute dans le worker de son prédécesseur, et l’éventail de destinataires de cette étape refuse de s’exécuter tant que des modifications de contenu non validées d’un prédécesseur sont en attente. Plutôt que de faire de cette interaction une surprise à l’exécution, l’étape est simplement dispatchée normalement.

58.3. Prévention des boucles

pepsi-setup refuse — et n’avertit pas seulement — deux configurations :

  • une configuration dans laquelle un message pour un domaine servi pourrait atteindre pepsi-stage-relay-to-internet, trouvé en avançant depuis chaque étape qu’un destinataire géré peut atteindre, le long de chaque option qui fait elle-même suivre le message — NEXT_STAGE, les cibles de routage, les TRUE_STAGE et FALSE_STAGE de pepsi-stage-if, les ACCEPT_STAGE/QUARANTINE_STAGE d’un milter, le QUARANTINE_STAGE de decrypt, le SECURE_LINK_STAGE d’encrypt, le UNCHALLENGEABLE_STAGE du secrétaire et le BOUNCE_TARGET_STAGE du paywall. BOUNCE_STAGE et les autres voies d’échec (le REJECT_STAGE d’un milter, les cibles de quota, de Sieve, de notification et de boîte aux lettres inconnue des étapes de remise locale) ne sont pas suivis : ce qui y circule devient un DSN à expéditeur nul concernant une remise déjà échouée, et il atteint légitimement un relais. Pas davantage les cibles de type RESPONSE_STAGE (un nouveau message à quelqu’un d’autre), un RESTART_STAGE de ~/.forward ou les cibles des étapes de listes de diffusion, qui réadressent le message à de nouveaux destinataires.

  • une section [pepsi-stage-relay-to-smarthost-mta-*] dont le HOST est cet hôte et dont le PORT est un port auquel un listener d’ingress est lié. Les deux moitiés sont requises — un site peut légitimement exploiter un relais sans rapport sur le même hôte, ou joindre une autre machine sur le port 25.

Ce sont des refus parce qu’une boucle ne s’arrête que lorsque la garde MAX_HOP_COUNT des étapes de relais se déclenche, des dizaines de copies plus tard, et que le rebond que cette garde produit alors est lui-même adressé de nouveau dans la boucle.

58.4. Configuration

Option

Signification

ROUTES

Paires <domain-pattern>=<stage> séparées par des espaces ou des virgules, consultées en premier, dans l’ordre. Facultatif.

MANAGED_DOMAINS

Les domaines situés derrière cette passerelle. Vaut par défaut [pepsi-ingress] ACCEPTED_DOMAINS ; au moins un est requis.

MANAGED_STAGE

Où va un destinataire d’un domaine géré. Facultatif ; sans elle, les destinataires gérés prennent NEXT_STAGE, dont pepsi-setup doit alors prouver que ce n’est pas une boucle.

NEXT_STAGE

Où va tout autre destinataire. Requis — l’étape ne remet, ne fait rebondir ni n’abandonne jamais, de sorte que chaque destinataire doit avoir quelque part où aller.

58.5. Placement

Sur le chemin entrant, après l’authentification et le déchiffrement et avant les étapes de relais — typiquement arc → decrypt → aliases → route, où MANAGED_STAGE nomme l’étape smarthost qui relaie vers Exchange et NEXT_STAGE nomme l’étape de remise directe vers le MX.

58.6. Voir aussi