SRS, fin de l'explication générique

merge-requests/21/head
glevy 2025-07-24 06:58:07 +02:00
parent 6b765c7b2c
commit 318b090d77
1 changed files with 56 additions and 4 deletions

View File

@ -25,7 +25,7 @@ seront décrites.
## Au Cr@ns
| | *Statut au Cr@ns ?* | Adoption |
| | Statut au Cr@ns ? | Adoption |
|---------|-------------------|------------------------------------|
| SPF | Implémenté | Large |
| DKIM | Implémenté | Large |
@ -43,7 +43,7 @@ Tous ce qui est discuté ci-dessous fonctionne de la manière suivante :
le Cr@ns) peuvent vérifier les mails à l'aide de ces informations.
*NB :* je parle d'infrastructure ou d'organisation émettrice et non pas de serveur
émetteur car plus d'un service est souvent requis (*e.g.* un serveur DNS
émetteur car plus d'un serveur est souvent requis (*e.g.* un serveur DNS
autoritaire, un serveur Web,...).
## SPF
@ -114,17 +114,69 @@ Cas d'usage : un expéditeur envoie un mail à une mailing-list (du Cr@ns),
qui retransmet aux adresses abonnées, qu'elles soient ou non au Cr@ns.
Un problème survient, empêchant un abonné de recevoir le mail
(à tout hasard, le quota de stockage est dépassé).
Ce problème génère un *bounce*, un mail automatique d'erreur.
Ce problème génère un *bounce*, un mail automatique d'erreur.
Question : qui doit recevoir ce *bounce* ?
Logiquement, l'expéditeur d'origine, c'est lui qui a envie
de savoir qu'un destinataire n'a pas lu son message.
(À continuer)
Pour cela, le serveur intermédiaire va conserver le champ `Envelope-From`
d'origine et passer le mail tel quel au serveur final.
Or, ce choix bien intentionné se heurte, comme annoncé,
aux politiques anti-usurpation à base de `SPF`.
Si le serveur de l'expéditeur applique une politique `SPF`
strice (`-all`) et que le serveur d'arrivée suit les instructions,
le mail transféré sera refusé en raison de son champ `SPF` invalide.
Comment faire ? Réfléchissons à partir de nos contraintes :
dans le pire des cas, on doit s'adapter à une politique `SPF`
stricte pour ne perdre aucun mail d'adhérent.
On doit donc montrer patte blanche en transférant le mail
avec un champ `Envelope-From` dans notre domaine,
de sorte que le mail soit accepté à l'arrivée.
Conséquence : c'est à nous que reviendront les
éventuels *bounces* qui nous motivaient à l'origine.
Sauf qu'ils ne nous intéressent pas directement,
on doit trouver un moyen de les renvoyer à l'expéditeur.
C'est là que `SRS` entre en jeu : il fabrique,
en suivant un schéma de nommage normalisé,
une adresse temporaire qui va encoder l'adresse de
l'expéditeur d'origine, plus quelques métadonnées,
dans la partie "compte" (avant le `@`) de l'adresse fabriquée.
Prenons un exemple, éhontément pris de la page Wikipédia.
Alice, détentrice de l'adresse `alice@nane.in`,
veut envoyer un mail à son ami Bob, détenteur de
l'adresse `bob@crans.org`.
Ce qu'Alice ne sait pas (et n'a pas besoin de savoir),
c'est que Bob est en train de passer ses contacts
sur son adresse ENS, `bob@ens-cachan.fr`.
Il transfère donc tous ses mails Cr@ns vers sa
boîte ENS, sans avoir besoin de prévenir qui que ce soit.
À la réception d'un mail d'Alice, le serveur du Cr@ns (`redisdead`)
va lire l'instruction de forwarding de Bob et va changer le champ
`Envelope-From` de `alice@nane.in` (origine) à
`SRS0=HHH=TT=nane.in=alice@crans.org`.
Le `HHH` est un hash d'identification, le `TT`
un marqueur temporel.
Il est à noter que si un utilisateur a l'idée saugrenue de prendre
un alias commençant par `SRS0=`, on va peut-être avoir un problème.
Prions pour que ça n'arrive pas.
Si la boîte mail ENS de Bob est pleine, le *bounce* part sur
l'adresse `SRS` et est ensuite retransféré à Alice, dont
l'adresse est clairement extractible de l'adresse `SRS`.
Et voilà !
*Note :* les adresses générées par `postsrsd` sont valides pendant 21 jours.
### Implémentation
**TODO**
## DKIM
- [La RFC](https://www.rfc-editor.org/rfc/rfc6376.html),