85.1.5. pepsi-stage-srs

rewrite the envelope sender with the Sender Rewriting Scheme

Handbuchabschnitt:

1

85.1.5.1.1. Name

pepsi-stage-srs - Stage der Pepsi-Pipeline zum SRS-Umschreiben des Umschlagabsenders.

85.1.5.1.2. Übersicht

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. Beschreibung

Diese Stage hat den Standardwert FUSION = yes: Wenn Stage-Fusion aktiviert ist ([pepsi] ALLOW_FUSION, der Standardwert) und diese Stage in das vereinheitlichte pepsi-Binärprogramm eingefaltet ist, kann ein Vorgänger sie in seinem eigenen Worker-Prozess ausführen, statt sie separat zu dispatchen. Siehe pepsi-dispatch(1) und pepsi.conf(5).

pepsi-stage-srs ist ein Stage-Programm, das von pepsi-dispatch(1) als persistenter Worker ausgeführt wird, der Nachrichten-IDs von der Standardeingabe liest. Es implementiert das Sender Rewriting Scheme (SRS).

Wenn Pepsi eine Nachricht weiterleitet, behält es den Nachrichtentext unversehrt, leitet sie aber von seinen eigenen IP-Adressen weiter. Die SPF-Prüfung des nächsten Hops sieht dann, dass Pepsi Mail sendet, deren Umschlagabsender noch die Domain des ursprünglichen Absenders ist, die Pepsis IPs nicht autorisiert, und die Prüfung schlägt fehl. SRS löst dies, indem es den Umschlagabsender (MAIL FROM) in eine lokale Adresse einer von Pepsi kontrollierten Domain (SRS_DOMAIN) umschreibt, die den ursprünglichen Absender kodiert — und per HMAC signiert:

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

SPF am nächsten Hop prüft nun srs.example.org, das legitim von Pepsis IPs sendet. Der Nachrichtentext und seine DKIM-Signaturen bleiben unberührt. Die Stage schaltet die Nachricht dann zu ihrem NEXT_STAGE (der Zustell-Stage) weiter. Sie ändert nur den Umschlagabsender und lässt das state des Datensatzes — einschließlich etwaiger RFC-3461-state.dsn-Parameter — unberührt, damit spätere Stages es beachten.

Der Null-Absender (<>, d. h. ein zurückkehrender Bounce) wird nie umgeschrieben, und ein bereits in SRS_DOMAIN liegender Absender bleibt unverändert (das Umschreiben ist idempotent). Ein Absender, der bereits eine SRS-Adresse ist — die Nachricht erreichte Pepsi über einen anderen Weiterleiter — wird in der kompakten SRS1-Form neu signiert, statt verschachtelt zu werden, sodass ein Bounce einen Weiterleiter nach dem anderen zurückspringt.

85.1.5.1.3.1. Gegenrichtung

Die andere Hälfte von SRS — einen an eine SRS-Adresse zurückgesendeten Bounce erkennen, seine Signatur und seinen Zeitstempel verifizieren, den ursprünglichen Absender dekodieren und den Bounce dorthin weiterleiten — wird von pepsi-ingress(1) zur RCPT-Zeit durchgeführt, nicht von diesem Programm. Ein Empfänger in SRS_DOMAIN, dessen Local-Part ein gültiges SRS-Token ist, wird angenommen und zurück zum ursprünglichen Absender umgeschrieben (obwohl die Domain dieses Absenders keine ist, die Pepsi bedient — die gültige Signatur autorisiert das Relay); ein gefälschtes oder abgelaufenes Token wird mit 550 abgelehnt. Beide Richtungen lesen dieselbe gemeinsame [pepsi-srs]-Konfiguration, sodass Geheimnis und Domain übereinstimmen.

Diese Hälfte ist das, was SRS_DOMAIN zu einer Domain macht, die Post empfangen muss, und nicht bloß zu einer, als die dieser Rechner sendet. Den Umschlagabsender umzuschreiben macht Pepsi zum Bounce-Ziel für eine Nachricht, die es nicht geschrieben hat; veröffentlicht die Domain keinen MX und keinen Adresseintrag, wird der zurückkommende Bounce von dem MTA verworfen, der ihn zu senden versuchte, und der ursprüngliche Autor wird nie benachrichtigt. pepsi-setup(1) prüft das bei jedem Lauf unter seinen DNS-Gegenprüfungen, weil die SPF- und DMARC-Einträge der Domain auch ohne ihn vollständig aussehen.

85.1.5.1.4. Konfiguration

Die Stage benötigt nur ein NEXT_STAGE in ihrem eigenen [stage-<name>]-Abschnitt (PROGRAM = pepsi-stage-srs); die SRS-Parameter (SRS_DOMAIN, SECRET/SECRET_FILE, MAX_AGE_DAYS) liegen im gemeinsamen [pepsi-srs]-Abschnitt, den sie mit pepsi-ingress(1) teilt. Alle sind in pepsi.conf(5) dokumentiert. Das Weglassen von [pepsi-srs] deaktiviert SRS: Ein Worker dieser Stage verweigert dann den Start (wie auch, wenn sich das Geheimnis nicht lesen lässt), sodass der Dispatcher die für sie eingereihten Nachrichten zurückhält, bis die Konfiguration korrigiert ist, statt sie fehlschlagen zu lassen, und pepsi-ingress(1) behandelt Empfänger, die wie SRS-Adressen aussehen, als gewöhnliche Adressen. Das Geheimnis wird für jede Nachricht neu gelesen, sodass ein rotiertes Geheimnis keinen Neustart erfordert; wird es unlesbar, während ein Worker läuft, wird die Nachricht mit Backoff wiederholt (siehe pepsi-dispatch(1)).

85.1.5.1.5. State

Eingaben: keine — die Stage operiert auf der mail_from-Spalte, nicht auf state.

Ausgaben: state.srs.original, der Umschlagabsender, den das Umschreiben ersetzt hat. Sonst wird nichts in state berührt — state.dsn und der Rest bleiben unverändert erhalten. Das State-Layout wird in pepsi.state(7) beschrieben.

Dieser eine Schlüssel existiert für eine DSN, die Pepsi nach dem Lauf dieser Stage erzeugt, was auf einem weiterleitenden Pfad jede DSN ist: Diese Stage geht der Zustell-Stage notwendigerweise voraus, sodass pepsi-stage-bounce(1) den Bericht sonst an unseren eigenen SRS-Alias adressieren und ihn damit auf eine Rundreise hinaus zum nächsten Hop und über unseren MX wieder herein zum Dekodieren schicken würde. Die Bounce-Stage liest stattdessen diesen Schlüssel, statt den Alias umzukehren, was das SRS-Geheimnis aus einer Stage heraushält, die nur Mail verfasst. Er wird nur geschrieben, wenn er fehlt, sodass eine zweimal umgeschriebene Nachricht die Adresse behält, die einen echten Korrespondenten benennt, und nicht den Zwischenalias.

Übergänge: schaltet immer zu NEXT_STAGE weiter, ob der Umschlagabsender SRS-umgeschrieben wurde oder unverändert durchlief (ein Null-Absender oder einer bereits in SRS_DOMAIN). Es gibt keine Verzweigung; die Stage pausiert nie, schlägt nie fehl, leitet nie um und schließt nie ab.

85.1.5.1.6. Befehle

Als Worker ausgeführt, schreibt das Programm den Umschlagabsender jeder Nachricht um und schaltet sie weiter. Die Unterbefehle sind Operator-Werkzeuge:

forward ADDRESS

Gibt die SRS-Umschreibung von ADDRESS (die Vorwärtsrichtung) aus und beendet sich. Nützlich, um zu inspizieren, was aus einem bestimmten Absender wird.

reverse ADDRESS

Dekodiert und verifiziert ADDRESS (eine SRS-Adresse oder ein bloßer Local-Part) und gibt den ursprünglichen Absender aus, oder schlägt fehl, wenn es keine gültige SRS-Adresse ist.

85.1.5.1.7. Globale Optionen

-c FILE, –config FILE

Liest die Konfiguration aus FILE statt aus dem Standard-Suchpfad.

-L LOGLEVEL, –log LOGLEVEL

Setzt die Log-Ausführlichkeit (error, warn, info, debug, trace; Standardwert info).

-h, –help

Gibt eine Verwendungsübersicht aus und beendet sich.

-V, –version

Gibt die Version aus und beendet sich.

85.1.5.1.8. Exit-Status

Das Ergebnis jeder Nachricht wird pepsi-dispatch(1) über die Statuszeile des Workers gemeldet, nicht als Exit-Status.

0

Der Worker lief, bis seine Standardeingabe geschlossen wurde, oder der Unterbefehl forward / reverse war erfolgreich.

1

Ein fataler Fehler ist aufgetreten (nicht lesbare Konfiguration, die Datenbank konnte nicht geöffnet werden, Standardeingabe/-ausgabe schlug fehl, oder reverse wurde eine Adresse übergeben, die keine gültige SRS-Adresse ist). Der Grund wird in das Log geschrieben.

85.1.5.1.9. Beispiele

Anzeigen, wozu ein Absender umgeschrieben wird:

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

Eine zurückgegebene Bounce-Adresse dekodieren:

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

85.1.5.1.10. Siehe auch

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. Fehler

Melden Sie Fehler an den Pepsi-Issue-Tracker.