85.1.5. pepsi-stage-srs

rewrite the envelope sender with the Sender Rewriting Scheme

Section du manuel:

1

85.1.5.1.1. Nom

pepsi-stage-srs - l’étape de réécriture d’expéditeur d’enveloppe SRS du pipeline Pepsi.

85.1.5.1.2. Synopsis

pepsi-stage-srs [GLOBAL-OPTIONS] worker

pepsi-stage-srs [GLOBAL-OPTIONS] forward ADDRESS

pepsi-stage-srs [GLOBAL-OPTIONS] reverse ADDRESS

85.1.5.1.3. Description

Cette étape a FUSION = yes par défaut : lorsque la fusion d’étapes est activée ([pepsi] ALLOW_FUSION, la valeur par défaut) et que cette étape est pliée dans le binaire pepsi unifié, un prédécesseur peut l’exécuter dans son propre processus worker plutôt que de la dispatcher séparément. Voir pepsi-dispatch(1) et pepsi.conf(5).

pepsi-stage-srs est un programme d’étape exécuté par pepsi-dispatch(1) comme un worker persistant lisant les identifiants de message sur l’entrée standard. Il implémente le Sender Rewriting Scheme (SRS).

Lorsque Pepsi redirige un message, il garde le corps intact mais le relaie depuis ses propres adresses IP. La vérification SPF du saut suivant voit alors Pepsi envoyer un courrier dont l’expéditeur d’enveloppe est encore le domaine de l’expéditeur original, qui n’autorise pas les IP de Pepsi, et la vérification échoue. SRS résout cela en réécrivant l’expéditeur d’enveloppe (MAIL FROM) en une adresse locale d’un domaine contrôlé par Pepsi (SRS_DOMAIN) qui encode — et signe en HMAC — l’expéditeur original :

SRS0=HHHH=TT=origin.example=alice@srs.example.org

SPF au saut suivant vérifie désormais srs.example.org, qui envoie légitimement depuis les IP de Pepsi. Le corps et ses signatures DKIM sont intacts. L’étape fait ensuite avancer le message vers son NEXT_STAGE (l’étape de remise). Elle ne change que l’expéditeur d’enveloppe, laissant le state de la ligne — y compris d’éventuels paramètres state.dsn RFC 3461 — intact pour que les étapes ultérieures l’honorent.

L’expéditeur nul (<>, c’est-à-dire un rebond de retour) n’est jamais réécrit, et un expéditeur déjà dans SRS_DOMAIN est laissé inchangé (la réécriture est idempotente). Un expéditeur qui est déjà une adresse SRS — le message a atteint Pepsi via un autre redirecteur — est re-signé sous la forme compacte SRS1 plutôt qu’imbriqué, de sorte qu’un rebond remonte un redirecteur à la fois.

85.1.5.1.3.1. Sens inverse

L’autre moitié de SRS — reconnaître un rebond renvoyé à une adresse SRS, vérifier sa signature et son horodatage, décoder l’expéditeur original et y relayer le rebond — est effectuée par pepsi-ingress(1) au moment du RCPT, pas par ce programme. Un destinataire dans SRS_DOMAIN dont la partie locale est un jeton SRS valide est accepté et réécrit en l’expéditeur original (même si le domaine de cet expéditeur n’est pas un que Pepsi sert — la signature valide autorise le relais) ; un jeton falsifié ou expiré est rejeté avec 550. Les deux sens lisent la même configuration partagée [pepsi-srs], de sorte que le secret et le domaine correspondent.

Cette moitié est ce qui fait de SRS_DOMAIN un domaine qui doit recevoir du courrier, et non seulement un domaine sous lequel cette machine envoie. Réécrire l’expéditeur d’enveloppe fait de Pepsi la destination des rejets d’un message qu’il n’a pas écrit ; si le domaine ne publie ni MX ni enregistrement d’adresse, le rejet qui revient est abandonné par le MTA qui a tenté de l’envoyer et l’auteur d’origine n’est jamais informé. pepsi-setup(1) le vérifie à chaque exécution, dans ses recoupements DNS, parce que les enregistrements SPF et DMARC du domaine paraissent complets sans lui.

85.1.5.1.4. Configuration

L’étape n’a besoin que d’un NEXT_STAGE dans sa propre section [stage-<name>] (PROGRAM = pepsi-stage-srs) ; les paramètres SRS (SRS_DOMAIN, SECRET/SECRET_FILE, MAX_AGE_DAYS) résident dans la section partagée [pepsi-srs] qu’elle partage avec pepsi-ingress(1). Tous sont documentés dans pepsi.conf(5). Omettre [pepsi-srs] désactive SRS : un worker de cette étape refuse alors de démarrer (comme lorsque le secret ne peut être lu), de sorte que le dispatcher garde en file les messages qui lui sont destinés jusqu’à ce que la configuration soit corrigée plutôt que de les mettre en échec, et pepsi-ingress(1) traite les destinataires d’apparence SRS comme des adresses ordinaires. Le secret est relu pour chaque message, de sorte qu’un secret renouvelé ne demande aucun redémarrage ; s’il devient illisible pendant qu’un worker tourne, le message est réessayé avec un back-off (voir pepsi-dispatch(1)).

85.1.5.1.5. État

Entrées : aucune — l’étape opère sur la colonne mail_from, pas sur state.

Sorties : state.srs.original, l’expéditeur d’enveloppe que la réécriture a remplacé. Rien d’autre dans state n’est touché — state.dsn et le reste sont préservés inchangés. La disposition de l’état est décrite dans pepsi.state(7).

Cette unique clé existe pour un DSN que Pepsi émet après le passage de cette étape, ce qu’est tout DSN sur un chemin de relais : cette étape précède nécessairement l’étape de remise, de sorte que pepsi-stage-bounce(1) adresserait sinon le rapport à notre propre alias SRS et lui ferait faire un aller-retour vers le saut suivant puis de nouveau vers l’intérieur par notre MX pour être décodé. L’étape de rebond lit ceci plutôt que d’inverser l’alias, ce qui garde le secret SRS hors d’une étape qui ne fait que composer du courrier. Elle n’est écrite que lorsqu’elle est absente, de sorte qu’un message réécrit deux fois conserve l’adresse qui nomme un correspondant réel plutôt que l’alias intermédiaire.

Transitions : avance toujours vers NEXT_STAGE, que l’expéditeur d’enveloppe ait été réécrit par SRS ou passé sans changement (un expéditeur nul, ou un déjà dans SRS_DOMAIN). Il n’y a pas de branche ; l’étape ne met jamais en pause, n’échoue, ne réachemine ni ne termine.

85.1.5.1.6. Commandes

Exécuté comme worker, le programme réécrit l’expéditeur d’enveloppe de chaque message et le fait avancer. Les sous-commandes sont des outils d’opérateur :

forward ADDRESS

Imprimer la réécriture SRS de ADDRESS (le sens direct) et quitter. Utile pour inspecter ce que devient un expéditeur donné.

reverse ADDRESS

Décoder et vérifier ADDRESS (une adresse SRS ou une partie locale nue) et imprimer l’expéditeur original, ou échouer si ce n’est pas une adresse SRS valide.

85.1.5.1.7. Options globales

-c FILE, –config FILE

Lit la configuration depuis FILE au lieu du chemin de recherche par défaut.

-L LOGLEVEL, –log LOGLEVEL

Règle la verbosité de journalisation (error, warn, info, debug, trace ; par défaut info).

-h, –help

Affiche un résumé d’utilisation et quitte.

-V, –version

Affiche la version et quitte.

85.1.5.1.8. Code de sortie

L’issue de chaque message est signalée à pepsi-dispatch(1) sur la ligne d’état du worker, et non par le code de sortie.

0

Le worker a tourné jusqu’à la fermeture de son entrée standard, ou la sous-commande forward / reverse a réussi.

1

Une erreur fatale s’est produite (configuration illisible, base de données impossible à ouvrir, échec de l’entrée/sortie standard, ou reverse a reçu une adresse qui n’est pas une adresse SRS valide). La raison est écrite dans le journal.

85.1.5.1.9. Exemples

Montrer en quoi un expéditeur est réécrit

pepsi-stage-srs -c /etc/pepsi/pepsi.conf forward alice@origin.example

Décoder une adresse de rebond renvoyée

pepsi-stage-srs -c /etc/pepsi/pepsi.conf reverse 'SRS0=HHHH=TT=origin.example=alice@srs.example.org'

85.1.5.1.10. Voir aussi

pepsi-config(1), pepsi-stage-relay-to-smarthost(1), pepsi-stage-relay-to-internet(1), pepsi-stage-bounce(1), pepsi-stage-dkim-sign(1), pepsi-dispatch(1), pepsi-ingress(1), pepsi.conf(5), pepsi.state(7), pepsi-setup(1)

85.1.5.1.11. Bogues

Signalez les bogues au gestionnaire de tickets de Pepsi.