guide.deuxfleurs.fr/content/operations/email.md

12 KiB

title description weight draft date extra
Emails Emails 10 false 2023-03-16
parent
operations/courantes.md

Support d'un nom de domaine personnalisé

Deuxfleurs peut héberger vos e-mails, même s'ils ne finissent pas en @deuxfleurs.fr ! Voilà comment faire.

  1. Communiquez lui votre nom de domaine pour qu'il l'ajoute dans ou=domains,ou=groups,dc=deuxfleurs,dc=fr
  2. Communiquez lui l'adresse email que vous souhaitez pour qu'il change l'entrée mail dans votre profil utilisateur
  3. Vous devez ensuite rajouter les entrées pour votre nom de domaine en éditant votre zone :
  4. L'entrée MX pour recevoir les emails
@  MX  10 smtp.deuxfleurs.fr.
  1. L'entrée SPF pour autoriser notre IP à délivrer des emails en votre nom :
@  TXT  "v=spf1 include:deuxfleurs.fr -all"
  1. L'entrée DKIM pour autoriser notre postfix+opendkim à délivrer des emails en votre nom :
smtp._domainkey CNAME smtp._domainkey.deuxfleurs.fr.
  1. L'entrée DMARC pour indiquer le comportement à adopter si les contraintes précédentes ne sont pas satisfaites :
_dmarc CNAME _dmarc.deuxfleurs.fr.
  1. C'est tout ! Vous devrez probablement attendre 24/48h que les changements se propagent.

Comprendre le fonctionnement des e-mails

Serveurs

  • SMTP: Postfix

  • IMAP: Dovecot (fixé sur une machine avec un backup)

Enregistrements DNS

nom type valeur signification
@ MX 12 email-in.deuxfleurs.fr Serveur que chercheront à joindre les gens qui veulent envoyer un courrier à une addresse @deuxfleurs.fr
`out MX 12 orion[-v6].deuxfleurs.fr Addresses IP pouvant envoyer des messages pour SPF (voir ci-dessous)
default._domainkey TXT v=DKIM1; h=sha256; k=rsa; p=<clef publique> Enregistrement DKIM (voir ci-dessous)
smtp._domainkey TXT v=DKIM1; h=sha256; k=rsa; p=<clef publique> Enregistrement DKIM (voir ci-dessous)
@ TXT `"v=spf1 mx:out.deuxfleurs.fr ip4: [...] -all" Enregistrement SPF (voir ci-dessous)
_dmarc TXT "v=DMARC1; [...] Enregistrement DMARC (voir ci-dessous)
email-in A défini par D53 Addresse IPv4 pour parler au serveur Postfix (pour l'enregistrement MX)
smtp A défini par D53 Addresse IPv4 pour parler au serveur Postfix (pour les utilisateurs Deuxfleurs)
imap A défini par D53 Addresse IPv4 pour parler au serveur Dovecot (pour les utilisateurs Deuxfleurs)
201.80.66.82.in-addr.arpa. PTR orion.site.deuxfleurs.fr. Reverse DNS indiquant le nom de domainecorrespondant à l'IP du serveur Postfix

DKIM

Le mécanisme DKIM permet au serveur d'ajouter une signature sur les messages qui sortent de Deuxfleurs, pour que les destinataires puissent en attester la validité. Il s'agit d'une signature RSA basée sur une paire de clefs privée/publique. La clef publique est donée dans l'enregistrement DNS DKIM, et la clef privée est connue uniquement du serveur Postfix. La signature de chaque message est ajoutée dans un en-tête spécifique.

Référence : https://www.cloudflare.com/learning/dns/dns-records/dns-dkim-record/

Exemple d'enregistrements DNS :

default._domainkey.deuxfleurs.fr. 10800	IN TXT	"v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtdZp4qrgZR+6R7HeAkuLGJ/3L/6Ungvf5zwrMq6T8Tu931j2G4lYuPtsxyn9fZkT4y7DlX0waktLDB" "OCwf7X78nLEWjAFWiJTeWGRGhRdYRUFpscs9NUN0P+46jKlabibG3XTKd1DeAmywTu6o1oO03yiolrgKD1zgyDRFeUTfSwZIdPrdbcBSA1arda4WFtcBIrSygM9b4jtlqfQwGDrsMLbCBfVHDn4Wfm" "DWyNg0gDAkuLrYClNETk6aqIyj9fC8srKri0Qp3cRagCn+fjBvuxP35qWWJH7Rnnh/tuEDr1ufuNYO2KgJZ7JdMidUotxXE8cfU+OrEWQf4mIYeJ4wIDAQAB"

smtp._domainkey.deuxfleurs.fr. 1800 IN	TXT	"v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtdZp4qrgZR+6R7HeAkuLGJ/3L/6Ungvf5zwrMq6T8Tu931j2G4lYuPtsxyn9fZkT4y7DlX0waktLDB" "OCwf7X78nLEWjAFWiJTeWGRGhRdYRUFpscs9NUN0P+46jKlabibG3XTKd1DeAmywTu6o1oO03yiolrgKD1zgyDRFeUTfSwZIdPrdbcBSA1arda4WFtcBIrSygM9b4jtlqfQwGDrsMLbCBfVHDn4Wfm" "DWyNg0gDAkuLrYClNETk6aqIyj9fC8srKri0Qp3cRagCn+fjBvuxP35qWWJH7Rnnh/tuEDr1ufuNYO2KgJZ7JdMidUotxXE8cfU+OrEWQf4mIYeJ4wIDAQAB"

default._domainkey.adnab.me. 3600 IN	TXT	"v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHd2zQXgGAoFX2CFaRqvWw1oBGhbUIRB5QXPxE9nvWwe/og5LjZBcnKoInPWsKYEz/f5kmpTDq4RZT3PMmjm+u5IuvyQ2LJcdIKSW6t8KWa7yztk2D87f3Lono6WJwvY8RHdGPqKS5RXfEdQFriXiSCAO5ZSQrNXQ5yiQ9T1ptGwIDAQAB; t=s"

Structure :

  • Le nom de domaine est composé d'un selecteur (souvent default, on a ici aussi smtp) qui permet de distinguer différentes clefs pour signer les messages. Il est formé de la manière suivante: <selecteur>._domainkey.<domaine>
  • La valeur est composé de plusieurs champs entre guillemets séparés par des ;, le champ v peut contenir la version de DKIM utilisée (ici v=DKIM1)
  • Le champ p contient la clef publique
  • Les autres champs sont optionels

Application à la vérification d'une signature (exemple) :

Prenons la signature suivante :

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=deuxfleurs.fr; s=smtp;
	t=1679050854; bh=AkDk3Tm0bnC7b6dvTjRXJbThLE6h/IStsBGIYGa+q7c=;
	h=Date:To:From:Subject:From;
	b=Qll5ASi9DmD2rw9LK1vJOahE77Pd/HNDbmrkrOCt4S8Nu42WtJXXOtiwo9J3KGPzR
	 zA2Cw5oCUB0HW5ere8RkINsUj9X/nxOovxFaJw4LSrgEYxQh7unaGBs6Ecw6k2Aqc/
	 oMhNE2OVCSlLkJVUQbgzwBUcZuwndlki6yYoJXkSPMuZ4tFbhgjSaxneRgUvPocYw3
	 Vqc/yMEAbofrlaEf6nSNQZL+LSE4IEBeudsv3JodMn12OYAijhO0rrHHsinK9UkM3M
	 PEEISyatG6RzE6veh4VVv3PTyJMYouQI7fKNooLuDmlGsdSTV9HRo4UvQeOQT1SL/7
	 KvgJtR0Hqz3mQ==

Cette signature contient les champs suivants :

  • v (obligatoire) indique la version, doit toujours être à 1
  • a (obligatoire) indique l'algorithme de signature, généralement rsa-sha256
  • d (obligatoire) indique le domaine pour lequel la signature est produite
  • s (obligatoire) indique le sélecteur de la clef DKIM utilisée (ici smtp pour utiliser la clef smtp._domainkey.deuxfleurs.fr)
  • h (obligatoire) indique la liste des en-têtes signés
  • bh (obligatoire) donne le hash du contenu du message
  • b (obligatoire) donne la signature à proprement parler, qui signe les en-têtes h et le hash du contenu bh
  • t (recomandé) donne le timestamp de la signature, i.e. sa date et son heure
  • c est un paramètre additionnel de la méthode de calcul de la signature

Chez Deuxfleurs: L'en-tête de signature est rajouté par notre serveur Postfix. La clef privée est stockée dans Consul, et est injéctée dans le conteneur Postfix au lancement. Les enregistrements DNS sont installés manuellement.

SPF

L'enregistrement SPF sert à aider le serveur de destination à déterminer si le message reçu est légitime ou non, en vérifiant des contraintes sur l'addresse IP par laquelle il a été reçu. Normalement, c'est l'addresse IP du serveur SMTP de Deuxfleurs, donc on sait qu'on doit rejeter tous les messages venant d'autres addresses.

Références : https://fr.wikipedia.org/wiki/Sender_Policy_Framework

Exemple d'enregistrements DNS :

deuxfleurs.fr.		300	IN	TXT	"v=spf1 mx:out.deuxfleurs.fr ip4:82.66.80.201 -all"
adnab.me.		3600	IN	TXT	"v=spf1 mx mx:adnab.me include:mx.ovh.com -all"
ietf.org.		1794	IN	TXT	"v=spf1 ip4:50.223.129.192/26 ip6:2001:559:c4c7::/48 a:ietf.org mx:mail.ietf.org ip4:192.95.54.32/27 ip6:2607:5300:60:9ccf::/64 ip4:158.69.166.0/27 ip6:2607:5300:203:1b26::/64 ip4:4.31.198.32/27 ip6:2001:1900:3001:11::/64 include:_spf.google.com ~all"

Structure :

L'enregistrement commence par v=spf1, puis contient un ensemble de directives formées de la manière suivante:

  • Un préfixe pouvant être + (résultat favorable), ? (résultat neutre/aucune règle), ~ (entre le neutre et l'échec, utile pour déboguer), - (échec/défavorable). Le préfixe peut être omis, ce qui est interprété comme le préfixe +.
  • Une paire type/valeur, avec les types suivants:
    • mx : utiliser un enregistrement DNS de type MX. L'enregistrement MX donne un ou plusieurs noms d'hôtes, qui sont eux-même des noms DNS. Ces noms sont ensuite résolus en A ou AAAA pour trouver les addresses correspondantes. Des CNAME peuvent être présents, ce qui donnerait au plus long la chaîne de résolution suivante : MX -> CNAME -> ... -> CNAME -> A/AAAA.
    • ip4 : contient directement une plage d'addresses IPv4
    • ip6 : contient directement une plage d'addresses IPv6
    • a : contient un nom d'hôte à résoudre en A ou AAAA (pouvant utiliser des CNAME)
    • include : contient un nom de domaine ayant une autre règle SPF à inclure
    • ptr : désuet
  • Ou bien le mot all, qui correspond à tous les expéditeurs dont l'addresse ne correspond pas aux autres règles

Par exemple, dans les exemples ci-dessous, voici comment interpréter les différentes règles:

  • mx:out.deuxfleurs.fr : accepter le message si l'IP de l'expéditeur est trouvable en suivant les enregistrements MX associés à out.deuxfleurs.fr.
  • ip4:82.66.80.201 : accepter le message si l'IP de l'expéditeur est 82.66.80.201
  • include:mx.ovh.com : accepter le message si il serait accepté par la règle du domaine mx.ovh.com (consultable en faisant dig TXT mx.ovh.com)
  • a:ietf.org : accepter le message si il vient de l'addresse IP de ietf.org (consultable en faisant dig A ietf.org)
  • -all : rejeter strictement tous les messages venant d'une autre addresse IP

Chez Deuxfleurs: L'enregistrement SPF, installé manuellement, contient mx:out.deuxfleurs.fr, ce qui signifie que les addresses IP sont celles présentes dans l'enregistrement MX pour out.deuxfleurs.fr. Actuellement, les valeurs sont orion.site.deuxfleurs.fr et orion-v6.site.deuxfleurs.fr. Le premier contient l'IPv4 (mise manuellement) et une IPv6 (mise automatiquement par D53, c'est celle de la machine contenant Tricot). Le second contient toutes les IPv6 possibles pour Postfix (celui-ci se ballade de machine en machine).

DMARC

DMARC est un mécanisme qui permet de mieux contrôler la réaction des serveurs de destination en fonction des tests DKIM et SPF. Par exemple, on peut préciser que tous les messages sont authentifiés par DKIM et SPF, et si un de ces tests échoue, le message doit nécessairement être rejeté. On peut aussi demander à recevoir des rapports en cas d'échec.

Référence : https://fr.wikipedia.org/wiki/DMARC

Exemple d'enregistrements DNS :

_dmarc.deuxfleurs.fr.	300	IN	TXT	"v=DMARC1; p=reject; sp=reject; adkim=s; fo=1; aspf=s; ruf=mailto:prod-sysadmin@deuxfleurs.fr; rua=mailto:prod-sysadmin@deuxfleurs.fr; rf=afrf; pct=100; ri=86400"
_dmarc.adnab.me.	3600	IN	TXT	"v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:postmaster@adnab.me!10m; ruf=mailto:postmaster@adnab.me!10m; rf=afrf; pct=100; ri=86400"

L'enregistrement peut contenir les champs suivants:

  • v=DMARC1 indique la version de DMARC utilisée
  • p : procédure en cas d'échec avec le domaine principal (none/quarantaine/reject)
  • sp : comme p mais s'applique aux sous-domaines
  • adkim : indique si on doit appliquer la règle DKIM de manière stricte (s, le nom de domaine doit correspondre exactement) ou relaxée (r, des variations sur le nom de domaine sont permises)
  • aspf : indique si on doit appliquer la règle SPF de manière stricte (s) ou relaxée (r)
  • ruf : addresse mail à laquelle envoyer un rapport d'échec détaillé à chaque échec de validation
  • fo : condition pour l'envoi d'un rapport d'échec détaillé (1 = si soit DKIM soit SPF a échoué)
  • rua : addresse mail à laquelle envoyer un rapport d'échec aggrégé périodiquement
  • ri : intervalle en secondes entre l'envoi des rapports aggrégés (86400 = 24h)
  • rf : format des rapports (afrf est la seule valeur officiellement supportée)
  • pct : proportion de messages à rejeter en cas d'échec

Reverse DNS

Exemple d'enregistrements reverse DNS :

201.80.66.82.in-addr.arpa. 86179 IN	PTR	orion.site.deuxfleurs.fr.
206.118.187.37.in-addr.arpa. 86400 IN	PTR	shiki.adnab.me.

L'enregistrement reverse DNS peut être utilisé par le serveur de destination pour connaître le nom d'hôte correspondant à l'addresse IP du serveur qui a envoyé le mail. Cet enregistrement doit idéalement correspondre à un nom de domaine qui lui-même résoud à nouveau vers la même addresse IP.