forked from Deuxfleurs/guide.deuxfleurs.fr
168 lines
9.7 KiB
Markdown
168 lines
9.7 KiB
Markdown
---
|
|
title: Emails
|
|
description: Emails
|
|
weight: 10
|
|
draft: false
|
|
date: 2023-03-16
|
|
extra:
|
|
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`
|
|
1. Communiquez lui l'adresse email que vous souhaitez pour qu'il change l'entrée `mail` dans votre profil utilisateur
|
|
1. Vous devez ensuite rajouter les entrées pour votre nom de domaine en éditant votre zone :
|
|
1. L'entrée MX pour recevoir les emails
|
|
|
|
```bind
|
|
@ MX 10 email-in.deuxfleurs.fr.
|
|
```
|
|
|
|
1. L'entrée SPF pour autoriser notre IP à délivrer des emails en votre nom :
|
|
|
|
```bind
|
|
@ TXT "v=spf1 mx:out.deuxfleurs.fr -all"
|
|
```
|
|
|
|
1. L'entrée DKIM pour autoriser notre postfix+opendkim à délivrer des emails en votre nom :
|
|
|
|
```
|
|
smtp._domainkey TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtdZp4qrgZR+6R7HeAkuLGJ/3L/6Ungvf5zwrMq6T8Tu931j2G4lYuPtsxyn9fZkT4y7DlX0waktLDBOCwf7X78nLEWjAFWiJTeWGRGhRdYRUFpscs9NUN0P+46jKlabibG3XTKd1DeAmywTu6o1oO03yiolrgKD1zgyDRFeUTfSwZIdPrdbcBSA1arda4WFtcBIrSygM9b4jtlqfQwGDrsMLbCBfVHDn4WfmDWyNg0gDAkuLrYClNETk6aqIyj9fC8srKri0Qp3cRagCn+fjBvuxP35qWWJH7Rnnh/tuEDr1ufuNYO2KgJZ7JdMidUotxXE8cfU+OrEWQf4mIYeJ4wIDAQAB"
|
|
```
|
|
|
|
1. L'entrée DMARC pour indiquer le comportement à adopter si les contraintes précédentes ne sont pas satisfaites :
|
|
|
|
```
|
|
_dmarc TXT "v=DMARC1; p=reject; sp=reject; adkim=s; fo=1; aspf=s; ruf=mailto:prod-sysadmin@deuxfleurs.fr; rf=afrf; pct=100; ri=86400"
|
|
```
|
|
|
|
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` |
|
|
| `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:<addresse ip> [...] -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) |
|
|
|
|
### L'enregistrement 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 de valeurs :**
|
|
|
|
```
|
|
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
|
|
|
|
### L'enregistrement 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 de valeurs :**
|
|
|
|
```
|
|
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
|
|
|
|
|
|
### L'enregistrement DMARC
|
|
|
|
|
|
Exemple de valeurs :
|
|
|
|
```
|
|
_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"
|
|
```
|