54. pepsi-stage-secretary¶
Retenir le courrier des expéditeurs inconnus jusqu’à ce qu’ils confirment en répondant.
54.1. Rôle¶
pepsi-stage-secretary est une confirmation à l’envoi, dans l’esprit du qsecretary de qmail. Le courrier d’un expéditeur qu’aucune liste blanche ne connaît est retenu, et l’expéditeur est prié — dans sa langue — de répondre une fois. La réponse le met en liste blanche et libère tout ce qui était retenu pour lui ; son courrier ultérieur passe pepsi-stage-check-whitelist et n’est plus jamais retenu. Sans réponse avant HOLD_TIME, le courrier retenu prend le chemin d’expiration (BOUNCE_STAGE s’il en est branché un, sinon il est supprimé). Référence : pepsi-stage-secretary(1).
Elle est plus faible que le péage à l’envoi (pepsi-stage-anti-spam) : un spammeur disposant d’une boîte aux lettres fonctionnelle peut répondre, et la déclaration que l’expéditeur accepte (PENALTY) est une dissuasion juridique plutôt qu’économique. Elle vaut tout de même la peine, car la plupart du courrier de masse provient d’adresses qui ne peuvent pas recevoir, et un vrai correspondant paie une réponse, une seule fois. Fonctionnalités prises en charge compare les deux.
54.2. Ce qui fait l’objet d’un défi¶
Un message à expéditeur nul, le courrier soumis localement et un expéditeur en liste blanche (state.spam = false) passent sans être touchés ; state.spam = true prend le chemin d’expiration. Tout le reste fait l’objet d’un défi — sauf s’il ne le doit pas, auquel cas il va vers UNCHALLENGEABLE_STAGE (non défini : le chemin d’expiration) :
la RFC 3834 dit de ne pas y répondre (listes,
Precedence: bulk,Auto-Submitted:, expéditeurs de service, rapports de remise) ;son
From:n’est pas exactement l’expéditeur d’enveloppe — le défi part vers le MAIL FROM et la liste blanche compare leFrom:, il doit donc s’agir d’une seule et même adresse ;REQUIRE_AUTHENTICATED(activé par défaut) et ni SPF ni DMARC n’ont réussi — la barrière contre le backscatter ;l’expéditeur a déjà reçu
MAX_CHALLENGES_PER_SENDERdéfis (5 par défaut) au cours des dernières 24 heures, toutes listes blanches confondues.
Un défi couvre chaque message d’un même expéditeur vers une même liste blanche : un second message rejoint le défi ouvert et hérite de son échéance. Un message dont les destinataires développent WHITELIST_NAME en listes différentes est scindé en une ligne par liste.
54.3. Le défi et la réponse¶
Le défi est un message text/plain à expéditeur nul portant Auto-Submitted: auto-replied, injecté à RESPONSE_STAGE. Ses From: et Reply-To: sont l’adresse de réponse <CONTROL_LOCAL_PART>-<cookie>@<domain> (par défaut secretary-…), dont le cookie est un identifiant aléatoire de 128 bits. Il ne cite jamais le message retenu — un défi envoyé à un expéditeur falsifié remettrait sinon le spam pour le compte du spammeur — au-delà d’un indice de 8 caractères de son sujet (SUBJECT_HINT_LENGTH).
Le texte provient de MESSAGE_<LANG> dans la section propre de l’étape (celui d’un utilisateur, via la couche des paramètres) ou du modèle secretary-challenge.<lang>.body, par langue, avec un repli intégré en anglais ; les champs sont SENDER_NAME, RECIPIENT, SUBJECT_HINT, ORIGINAL_DATE, DEADLINE, REPLY_ADDRESS et PENALTY. Le choix de la langue et la règle des deux espaces sont ceux de pepsi-stage-vacation.
Une réponse à cette adresse confirme lorsqu’elle provient de l’adresse mise au défi (son expéditeur d’enveloppe ou son From:). Une réponse à expéditeur nul signifie que le défi a fait l’objet d’un rebond, et libère aussitôt le courrier retenu vers le chemin d’expiration ; une réponse marquée comme automatique (un message d’absence) est ignorée. Une réponse après l’échéance n’a aucun effet : le défi n’existe plus. La réponse elle-même est toujours consommée.
54.4. Placement¶
Après pepsi-stage-detect-language et pepsi-stage-check-whitelist, avant pepsi-stage-aliases, le routeur de listes et la remise locale. Faites tourner pepsi-stage-auto-whitelist vers le même WHITELIST_NAME sur le chemin sortant, afin que les personnes auxquelles vos utilisateurs écrivent ne soient jamais mises au défi. L’assistant de pepsi-setup branche le tout lorsqu’on répond à « Demander aux expéditeurs inconnus de confirmer par une réponse ».
54.5. Configuration¶
[stage-<name>] : PROGRAM = pepsi-stage-secretary, NEXT_STAGE et RESPONSE_STAGE (obligatoires), WHITELIST_NAME (obligatoire, un nom ou un modèle {login}/{localpart} ; l’opérateur peut nommer n’importe quelle liste blanche, y compris une liste partagée, tandis qu’une valeur qu’un titulaire de compte définit par courrier doit rester dans son espace de noms <login>/... ou être celle de l’opérateur – ce que pepsi-stage-edit-settings impose lorsqu’elle stocke la valeur), BOUNCE_STAGE, UNCHALLENGEABLE_STAGE, CONTROL_LOCAL_PART, HOLD_TIME, REQUIRE_AUTHENTICATED, MAX_CHALLENGES_PER_SENDER, DKIM_REQUIRED, CONFIRM_NOTICE, PENALTY, SUBJECT_HINT_LENGTH, TEMPLATE, SUBJECT, DEFAULT_LANGUAGE, les redéfinitions MESSAGE_<LANG>/SUBJECT_<LANG>/CONFIRM_MESSAGE_<LANG> et les options de localité. pepsi-setup rejette les cibles non résolubles et un DEFAULT_LANGUAGE sans texte, et avertit lorsqu’aucun check-whitelist ne consulte la liste blanche, qu’aucun auto-whitelist ne l’écrit, ou que CONTROL_LOCAL_PART est un login ou un alias. Voir pepsi-stage-secretary(1) et Configuration.
54.6. État¶
Entrées :
state.spam,state.local_origin,state.auth(SPF, DMARC, DKIM, ARC),state.language.Sorties :
state.secretarysur une ligne retenue (challenge,deadline,whitelist; puisconfirmedouabandoned),state.secretary.unchallengeablesur le courrier acheminé versUNCHALLENGEABLE_STAGE, etstate.spam = falsesur le courrier libéré. Le chemin d’expiration retirestate.secretary.state.dsnest préservé.Transitions : avancer vers
NEXT_STAGE; mettre en pause tant que le message est retenu ; réacheminer versUNCHALLENGEABLE_STAGEouBOUNCE_STAGE; supprimer une réponse, ou le courrier expiré lorsqu’il n’y a pas deBOUNCE_STAGE.
54.7. Base de données¶
pepsi.secretary_challenge (un défi ouvert par liste blanche et par expéditeur, supprimé lorsqu’il reçoit une réponse, fait l’objet d’un rebond ou expire) et pepsi.secretary_sent (le moment où chaque défi a été envoyé, sans son cookie, pour le plafond quotidien). Une confirmation écrit une ligne pepsi.whitelist ordinaire, échappée et ancrée exactement comme pepsi-stage-auto-whitelist en écrit une.
54.8. Voir aussi¶
pepsi-stage-check-whitelist, pepsi-stage-auto-whitelist, pepsi-stage-anti-spam, pepsi-whitelist, pepsi-settings, Fonctionnalités prises en charge, pepsi-stage-secretary(1).