[doc, mail] DKIM + petits correctifs.
parent
772c5bef14
commit
541ab016f9
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
Description de plusieurs RFC intéressantes (ou non) autour des protocoles liés
|
Description de plusieurs RFC intéressantes (ou non) autour des protocoles liés
|
||||||
aux emails. Lorsque ces normes sont en application au Cr@ns (ou ont
|
aux emails. Lorsque ces normes sont en application au Cr@ns (ou ont
|
||||||
volontairement été repousées à plus tard), les solutions techniques étudiées
|
volontairement été repoussées à plus tard), les solutions techniques étudiées
|
||||||
seront décrites.
|
seront décrites.
|
||||||
|
|
||||||
/Remarques préalables/ :
|
/Remarques préalables/ :
|
||||||
|
@ -29,7 +29,7 @@ seront décrites.
|
||||||
mails issus de serveurs n'implémentant pas les protocoles les plus
|
mails issus de serveurs n'implémentant pas les protocoles les plus
|
||||||
importants. Quoi que l'on pense du poids de l'influence des géants, cela
|
importants. Quoi que l'on pense du poids de l'influence des géants, cela
|
||||||
permet d'élever les standards qualités des autres. Serons-nous un jour
|
permet d'élever les standards qualités des autres. Serons-nous un jour
|
||||||
spam-free ? Les publicités mentionant nos informations personnelles (nom,
|
spam-free ? Les publicités mentionnant nos informations personnelles (nom,
|
||||||
préférences, ...) seront-elles un jour toutes chiffrées ? Je ne sais pas,
|
préférences, ...) seront-elles un jour toutes chiffrées ? Je ne sais pas,
|
||||||
mais je l'espère haha.
|
mais je l'espère haha.
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ seront décrites.
|
||||||
|
|
||||||
Tous ce qui est discuté ci-dessous fonctionne de la manière suivante :
|
Tous ce qui est discuté ci-dessous fonctionne de la manière suivante :
|
||||||
- l'infrastructure émettrice (le Cr@ns) publie des informations la concernant,
|
- l'infrastructure émettrice (le Cr@ns) publie des informations la concernant,
|
||||||
- les serveurs réceptionnant les mails (~MX~ des destinateires des mails émis par
|
- les serveurs réceptionnant les mails (~MX~ des destinataires des mails émis par
|
||||||
le Cr@ns) peuvent vérifier les mails à l'aide de ces informations.
|
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
|
/NB/ : Je parle d'infrastructure ou d'organisation émettrice et non pas de serveur
|
||||||
|
@ -81,15 +81,15 @@ d'émettre des mails en ~crans.org~. Pour cela, nous publions un champ ~TXT~ po
|
||||||
un autre enregistrement SPF (/e.g./ celui de ~spf.mailjet.com~).
|
un autre enregistrement SPF (/e.g./ celui de ~spf.mailjet.com~).
|
||||||
|
|
||||||
Utiliser ~-all~ permet de demander aux serveurs récepteurs de rejeter tout mail
|
Utiliser ~-all~ permet de demander aux serveurs récepteurs de rejeter tout mail
|
||||||
ne satisfiant pas ce test.
|
ne satisfaisant pas ce test.
|
||||||
|
|
||||||
D'autres méchanismes et formats existent, mais nous ne les présentons pas
|
D'autres mécanismes et formats existent, mais nous ne les présentons pas
|
||||||
ici. Se référer à la RFC ou la page Wikipédia pour leur description.
|
ici. Se référer à la RFC ou la page Wikipédia pour leur description.
|
||||||
|
|
||||||
** Vérification (côté serveur récepteur)
|
** Vérification (côté serveur récepteur)
|
||||||
|
|
||||||
Lorsque ~redisdead~ (~MX~ du Cr@ns) reçoit un mail, nous demandons à un service
|
Lorsque ~redisdead~ (~MX~ du Cr@ns) reçoit un mail, nous demandons à un service
|
||||||
externe de vérififer le SPF (via la variable ~smtpd_recipient_restrictions~). Le
|
externe de vérifier le SPF (via la variable ~smtpd_recipient_restrictions~). Le
|
||||||
service externe tourne sur la même VM et est ~postfix-policyd-spf-python~.
|
service externe tourne sur la même VM et est ~postfix-policyd-spf-python~.
|
||||||
|
|
||||||
* TODO SRS
|
* TODO SRS
|
||||||
|
@ -102,6 +102,66 @@ service externe tourne sur la même VM et est ~postfix-policyd-spf-python~.
|
||||||
- [[https://www.rfc-editor.org/rfc/rfc6376.html][RFC]].
|
- [[https://www.rfc-editor.org/rfc/rfc6376.html][RFC]].
|
||||||
- [[https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail][Page Wikipedia]].
|
- [[https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail][Page Wikipedia]].
|
||||||
|
|
||||||
|
DKIM (/Domain Key Identified Mail/) permet au serveur émetteur de signer les
|
||||||
|
mails, et au serveur récepteur de vérifier cette signature, en utilisant des
|
||||||
|
méthodes de cryptologie asymétrique.
|
||||||
|
|
||||||
|
** Implémentation (côté émetteur)
|
||||||
|
|
||||||
|
*** Serveur Mail
|
||||||
|
|
||||||
|
Le serveur émetteur possède la clef privée. Il ajoute à tout mail sortant un
|
||||||
|
champ à l'en-tête de la forme suivante :
|
||||||
|
#+begin_src mail
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=crans.org; s=mail;
|
||||||
|
t=1702660809; bh=NqcDLO2gkZU0IxcV+mE7uZ2NRnN/yfceH73Q1nhaFg4=;
|
||||||
|
h=From:To:Subject:Date:From;
|
||||||
|
b=ZjomU0jkljKVwA6sUhUioCemnxh/OhSGgwwr57irEn39Gfbv8/cLF8jmHc3hmv4ly
|
||||||
|
fLvJdj7iVTkeGlTVeW72H93wEA0qrB6LHHz81YBeHPb8eg63zm+9soDSOaP91Gux8J
|
||||||
|
UgeY1PWXvfjdfe+MJX9JqnlBKqd4JRgpD8AXaO852Lrq+fLJy4ewLOc/3dAqpNMrTf
|
||||||
|
swi5y6vV5QH89cuFjpjWqF3UcuD4a20RCQIpU/j5K1sxr1CTbdKjgqlsq5mt9/JSKx
|
||||||
|
OcvZ5WTmgPwdimKKz0DfjAeXQBMac9d7V9Kb5LvCZx84kSbLQEKboGxpRRhNWGdBsK
|
||||||
|
f3YZXjmpe8cl8cpbvuvdKYWOE7E6fRGu/CwQEyEQYqmrmljiklSYPaG8IKs5uYWKrA
|
||||||
|
A2D4VTisIYOwGvdljFTQP5zfhPsi4OnNbiN3RVX475lCHNWbnFMh8OCF/ugLj30dyk
|
||||||
|
s8MLAzDyYlgaccOD0uZ6VsdGJ0LK8+TCKbsc5H1ynjg0VejmRyVzZJ5TzAjXrzS6CC
|
||||||
|
Lj9eQQex1IaO6d7uGe4P/ULghjSP90tgBcZVNFLlU3r59ylkVQyAu7THDr4CDaxFO0
|
||||||
|
63QE7/GNDE2vZv0K5gp5Yz2veVC3wyaP1dJzIoAzZc1kZRoWz6QK9cH1Bfmnlx9nUs
|
||||||
|
j+G+VLDQbxi2NuoYAD/I2naA=
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Le bloc contient une liste de clefs-valeurs :
|
||||||
|
- ~v~ indique la version du protocole,
|
||||||
|
- ~d~ le domaine attestant de la validité du mail,
|
||||||
|
- ~s~ le nom du sélecteur (/Cf/. plus bas),
|
||||||
|
- ~b~ et ~bh~ contiennent les signatures.
|
||||||
|
|
||||||
|
/Notes/ :
|
||||||
|
- Il est possible que le mail ne soit pas signé par le domaine correspondant à
|
||||||
|
l'addresse d'envoi, puisqu'il est possible d'autoriser autrui à envoyer un
|
||||||
|
mail à notre place (/Cf/. SPF plus haut).
|
||||||
|
- Se référer à la page Wikipédia, ou à la RFC pour une liste exhaustive des
|
||||||
|
clefs.
|
||||||
|
|
||||||
|
*** Serveur DNS
|
||||||
|
|
||||||
|
Il faut placer dans le serveur DNS un champ TXT dont la clef est
|
||||||
|
~sélecteur._domainkey.domain~, où ~domain~ (resp. ~sélecteur~) est la valeur de la
|
||||||
|
clef ~d=~ (resp. ~s~) définie plus haut.
|
||||||
|
|
||||||
|
Par exemple, pour le champ fourni plus haut, nous pouvons lire :
|
||||||
|
#+begin_src mail
|
||||||
|
mail._domainkey.crans.org. 3600 IN TXT "v=DKIM1; k=rsa; " "p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtwkNVd9Mmz8S4WcfuPk0X2drG39gS8" "+uxAv8igRILgzWeN8j2hjeZesl8pm/1UTVU87bYcdfUgXiGfQy9nR5p/Vmt2kS7sXk9nsJ/VYENg" "b3IJQ6paWupSTFMyeKycJ4ZHCEZB/bVvifoG6vLKqW5jpsfCiOcfdcgXATn0UPuVx9t93yRrhoEM" "ntMv9TSodjqd3FKCtJUoh5cNQHo0T6dWKtxoIgNi/mvZ92D/IACwu/XOU+Rq9fnoEI8GukBQUR5A" "kP0B/JrvwWXWX/3EjY8X37ljEX0XUdq/ShzTl5iK+CM83stgkFUQh/rpww5mnxYEW3X4uirJ7VJH" "mY4KPoIU+2DPjLQj9Hz63CMWY3Ks2pXWzxD3V+GI1aJTMFOv2LeHnI3ScqFaKj9FR4ZKMb0OW2BE" "FBIY3J3aeo/paRwdbVCMM7twDtZY9uInR/NhVa1v9hlOxwp4/2pGSKQYoN2CkAZ1Alzwf8M3EONL" "KeiC43JLYwKH1uBB1oikSVhMnLjG0219XvfG/tphyoOqJR/bCc2rdv5pLwKUl4wVuygfpvOw12bc" "vnTfYuk/BXzVHg9t4H8k/DJR6GAoeNAapXIS8AfAScF8QdKfplhKLJyQGJ6lQ75YD9IwRAN0oV+8" "NTjl46lI/C+b7mpfXCew+p6YPwfNvV2shiR0Ez8ZGUQIcCAwEAAQ=="
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Vérification (côté récepteur)
|
||||||
|
|
||||||
|
Côté réception (~redisdead~ pour nous), nous utilisons le milter (filtre pour
|
||||||
|
mail) fourni par ~opendkim~. Ce milter écoute en local et est appelé par ~postfix~.
|
||||||
|
Lors de la réception d'un mail, postfix demande à ~opendkim~ quelle décision
|
||||||
|
prendre. Ce dernier va regarder les en-têtes du mail. S(il trouve une signature
|
||||||
|
DKIM, il va effectuer la requête DNS décrite plus haut, et vérifier la signature
|
||||||
|
du mail (valeurs des clefs ~b~ et ~bh~).
|
||||||
|
|
||||||
* TODO DMARC
|
* TODO DMARC
|
||||||
|
|
||||||
- [[https://www.rfc-editor.org/rfc/rfc7489][RFC]],
|
- [[https://www.rfc-editor.org/rfc/rfc7489][RFC]],
|
||||||
|
@ -112,10 +172,6 @@ service externe tourne sur la même VM et est ~postfix-policyd-spf-python~.
|
||||||
- [[https://www.rfc-editor.org/rfc/rfc8617.html][RFC]],
|
- [[https://www.rfc-editor.org/rfc/rfc8617.html][RFC]],
|
||||||
- [[https://en.wikipedia.org/wiki/Authenticated_Received_Chain][Page Wikipedia]].
|
- [[https://en.wikipedia.org/wiki/Authenticated_Received_Chain][Page Wikipedia]].
|
||||||
|
|
||||||
* TODO Sender Rewriting Scheme (SRS)
|
|
||||||
|
|
||||||
- [[https://en.wikipedia.org/wiki/Sender_Rewriting_Scheme][Page Wikipédia]].
|
|
||||||
|
|
||||||
* TODO MTA-STS
|
* TODO MTA-STS
|
||||||
|
|
||||||
- [[https://datatracker.ietf.org/doc/html/rfc8461][RFC]],
|
- [[https://datatracker.ietf.org/doc/html/rfc8461][RFC]],
|
||||||
|
|
Loading…
Reference in New Issue