85.1.25. pepsi-stage-auto-whitelist

whitelist recipients of outgoing mail

Section du manuel:

1

85.1.25.1.1. Nom

pepsi-stage-auto-whitelist - l’étape d’enregistrement des destinataires du pipeline Pepsi.

85.1.25.1.2. Synopsis

pepsi-stage-auto-whitelist [GLOBAL-OPTIONS] worker

85.1.25.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-auto-whitelist 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 charge cette ligne pepsi.workqueue (refusant d’agir sauf si son status est running) et lit sa section [stage-<stage>]. C’est le pendant côté écriture de pepsi-stage-check-whitelist(1) : au passage d’un message sortant, il note chaque destinataire d’enveloppe (rcpt_to) dans une liste blanche nommée, de sorte que lorsque cette personne répond plus tard, pepsi-stage-check-whitelist(1) reconnaît son en-tête From: et laisse la réponse franchir la barrière de paiement anti-spam. Placez-la sur le chemin sortant (par exemple, en amont d’une étape de relais).

La liste blanche réside dans la table pepsi.whitelist, partagée avec pepsi-stage-check-whitelist(1) — cette étape ne fait qu’y INSÉRER, de sorte qu’elle n’a besoin d’aucun schéma propre. Chaque adresse de destinataire est stockée comme un whitelist_regex : l’adresse est mise en minuscules, chaque caractère non alphanumérique est échappé par antislash pour qu’il corresponde littéralement, et le résultat est ancré sur ^/$ afin qu’il corresponde à cette adresse et à rien d’autre. L’étape de vérification compare ce regex sans tenir compte de la casse (l’opérateur ~* de PostgreSQL) à l”addr-spec extraite par analyse de l’en-tête From: d’une réponse — et non à la valeur brute de l’en-tête, de sorte qu’une adresse en liste blanche écrite en position de nom d’affichage (From: "bob@example.com" <evil@attacker.example>) ne peut pas usurper une correspondance. L’ancrage sur les limites est ce qui empêche en outre bob@example.com.evil de correspondre.

Chaque ligne insérée porte deux indicateurs de condition qui régissent quand une future réponse compte comme étant en liste blanche :

  • dkim_required est réglé à partir de l’option DKIM_REQUIRED de l’étape (par défaut yes) : lorsqu’il est vrai, la réponse n’est jugée digne de confiance que si sa signature DKIM ou ARC s’est vérifiée.

  • signature_required est mis à true lorsque l’état du message sortant a encrypted: true (le message était chiffré de bout en bout), sinon false. Cette clé est écrite par pepsi-stage-encrypt(1) : cette étape doit donc s’exécuter après l’étape de chiffrement (et, puisqu’elle ne modifie aucun contenu, peut s’exécuter entre celle-ci et pepsi-stage-dkim-sign(1), qui est l’endroit où --wizard de pepsi-setup(1) la place). Placée plus tôt, aucune ligne ne porte jamais l’indicateur. Les lignes des correspondants chiffrés exigent alors que leurs réponses arrivent avec une signature vérifiée (state.signature_verified, que pepsi-stage-decrypt(1) positionne) pour correspondre tout court.

Chaque ligne est écrite avec match_field = 'from' : ce que cette étape note est une adresse dont une réponse arrivera. Elle n’écrit jamais les lignes list-id que pepsi-stage-check-whitelist(1) comprend également — reconnaître qu’un utilisateur s’est abonné à une liste de diffusion est une inférence différente sur des en-têtes différents, qui se fait à la main avec pepsi-whitelist add-list.

Les lignes existantes sont laissées intactes (l’insertion est ON CONFLICT DO NOTHING sur la contrainte UNIQUE(whitelist_name, match_field, whitelist_regex)), de sorte que retraiter un message est sans danger. L’étape fait ensuite avancer le message vers NEXT_STAGE. Elle ne modifie jamais le propre state du message et n’abandonne jamais un message, ne le fait jamais rebondir et ne le met jamais en pause ; un message sans destinataires avance simplement.

85.1.25.1.4. Configuration

Les options résident dans la propre section [stage-<name>] de l’étape (PROGRAM = pepsi-stage-auto-whitelist) : le groupe WHITELIST_NAME obligatoire à peupler (un nom de liste blanche littéral ; l’étape ne développe aucun marqueur {login} ou {localpart} et refuse une valeur qui en contient un), DKIM_REQUIRED (par défaut yes) et un NEXT_STAGE — obligatoire lui aussi, puisque l’étape enregistre les destinataires puis transmet toujours le message ; pepsi-setup rejette donc une section qui en est dépourvue. Elles sont documentées dans pepsi.conf(5).

85.1.25.1.4.1. La whitelist de qui

L’étape s’exécute sur le chemin sortant, de sorte que les couches par adresse de la configuration sont recherchées pour l”expéditeur d’enveloppe : les lignes pepsi.config_override de cette adresse aux portées domain:/address: et sa ligne pepsi.settings décident de la liste dans laquelle ses destinataires sont écrits.

L’opérateur peut nommer n’importe quelle whitelist, y compris une whitelist partagée, dans chacune de ses propres couches : le fichier INI, pepsi.config_override à n’importe quelle portée, et une ligne pepsi.settings écrite avec pepsi-settings(1). L’étape écrit dans la valeur effective telle qu’elle la trouve.

Un propriétaire de compte qui peut modifier cette étape par courrier (elle figure dans les EDITABLE_STAGES de pepsi-stage-edit-settings(1)) ne peut choisir qu’une whitelist qui lui est propre : un nom dans l’espace de noms <login>/... du compte auquel son adresse se résout (alice/sent, par exemple), ou la whitelist que la configuration de l’opérateur nomme déjà pour lui. Tout autre choix – une liste partagée, celle d’un autre utilisateur, ou toute valeur pour une adresse qui ne correspond à aucun compte local – lui permettrait de remplir cette liste d’adresses de son choix, et pepsi-stage-edit-settings(1) le refuse. Le login est résolu comme pepsi-stage-check-whitelist(1) résout {login} : le domaine de l’adresse doit faire partie de LOCAL_DOMAINS (par défaut [pepsi-ingress] ACCEPTED_DOMAINS), sa local-part, sous-adresse après RECIPIENT_DELIMITER retirée, doit être un login passwd, et ce compte doit être permis par TARGETS. Ces trois options sont lues dans la section d’étape de l’opérateur, jamais dans la propre surcharge du propriétaire.

Une entreprise qui veut que chaque correspondant soit reconnu quel que soit le destinataire de sa réponse – un client invité à écrire à un collègue plutôt qu’à l’employé qui lui a écrit en premier – partage une seule whitelist entre tous les utilisateurs locaux, écrite par cette étape et lue par l’étape de vérification

[stage-auto-whitelist]
PROGRAM = pepsi-stage-auto-whitelist
NEXT_STAGE = dkim-sign
WHITELIST_NAME = correspondents

[stage-check-whitelist]
PROGRAM = pepsi-stage-check-whitelist
NEXT_STAGE = anti-spam
WHITELIST_NAME = correspondents

85.1.25.1.5. État

Entrées : les destinataires d’enveloppe proviennent de la colonne rcpt_to ; state.encrypted positionne l’indicateur signature_required stocké. Cette clé est écrite par pepsi-stage-encrypt(1), plus tôt sur le même chemin sortant, lorsque le message sortant a réellement été chiffré vers une clé de destinataire — de sorte qu’un correspondant atteint sous chiffrement est tenu plus tard aux mêmes exigences.

Sorties : aucune sur le message lui-même — le state du message est laissé intact. L’effet de bord est une ligne pepsi.whitelist par destinataire. La disposition de l’état est décrite dans pepsi.state(7).

Transitions : avance toujours vers NEXT_STAGE — après avoir inséré une ligne de liste blanche par destinataire d’enveloppe, ou inchangé lorsqu’il n’y en a aucun. Il n’y a pas de branche ; l’étape ne met jamais en pause, n’échoue jamais, ne réachemine ni ne termine jamais.

85.1.25.1.6. Commandes

worker

Exécuté comme un worker persistant de pepsi-dispatch(1), lisant les identifiants de message sur l’entrée standard.

85.1.25.1.7. Échecs

L’enregistrement est fail-open. Lorsque l”INSERT échoue (une erreur de base de données, un droit manquant), l’étape journalise un avertissement et avance tout de même le message : la liste blanche est une commodité pour la réponse du destinataire, et retenir le courrier sortant de l’utilisateur jusqu’à ce qu’elle puisse être enregistrée serait prendre les choses à l’envers. Un motif que PostgreSQL n’a pas pu compiler n’est jamais écrit (les motifs sont des adresses échappées, c’est donc un garde-fou, non un cas attendu).

85.1.25.1.8. Options globales

-c FILE, –config FILE

Lit la configuration depuis FILE au lieu de parcourir les emplacements par défaut.

-L LOGLEVEL, –log LOGLEVEL

Règle la verbosité de journalisation (par défaut info).

-v, –verbose

Affiche les messages de journal de toutes les sources.

-h, –help ; -V, –version

Affiche un résumé d’utilisation / la version et quitte.

85.1.25.1.9. Code de sortie

0

Le message a été traité (destinataires enregistrés et message avancé).

1

Une erreur s’est produite (message introuvable ou non running, étape mal configurée — par exemple un WHITELIST_NAME manquant — ou une erreur de base de données). La raison est écrite dans le journal.

85.1.25.1.10. Exemples

Enregistrer les destinataires du message 42 (il doit être running)

echo 42 | pepsi-stage-auto-whitelist -c /etc/pepsi/pepsi.conf worker

Une section de pipeline sortant qui met en liste blanche tous ceux à qui nous écrivons, en exigeant que leurs réponses soient signées par DKIM/ARC

[stage-auto-whitelist]
PROGRAM = pepsi-stage-auto-whitelist
NEXT_STAGE = srs
WHITELIST_NAME = trusted-senders
DKIM_REQUIRED = yes

85.1.25.1.11. Voir aussi

pepsi-config(1), pepsi-stage-check-whitelist(1), pepsi-stage-anti-spam(1), pepsi-stage-arc(1), pepsi-dispatch(1), pepsi.conf(5), pepsi.state(7), pepsi-setup(1)

85.1.25.1.12. Bogues

Signalez les bogues au gestionnaire de tickets de Pepsi.