Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| pratique:informatique:mail:mail_dns [20/09/2024 07:35] – supprimée - modification externe (Unknown date) 127.0.0.1 | pratique:informatique:mail:mail_dns [13/10/2025 19:31] (Version actuelle) – [Spécificités GAFAM] Zatalyz | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== SPF, DKIM, DMARC et autres choses à configurer sur le mail côté DNS ====== | ||
| + | Qu'on délègue une grande partie ou qu'on fasse tout soi-même, il faut paramétrer diverses choses dans le DNS afin que les mails puissent être envoyés, reçus, et passer les filtres antispam. | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Afin d' | ||
| + | </ | ||
| + | |||
| + | ===== Relai et domaine, deux choses différentes ===== | ||
| + | Il y a un concept important à bien comprendre, la différence entre le nom de domaine associé au mail (pour l' | ||
| + | |||
| + | Tout ce qui concerne la vérification de l' | ||
| + | |||
| + | Bien configurer SPF, DKIM, DMARC va nous donner une bonne déliverabilité chez la majorité des acteurs (oui, même les gros). Cela ne suffit pas pour tout, mais ça aide vraiment. Accessoirement cela rend plus difficile à un acteur malveillant de se faire passer pour “nous”, alors pas de raison de s'en priver. | ||
| + | |||
| + | Et puis c'est vraiment faisable quand on gère soi-même toute la chaîne. Ça va bien se passer… tant que je ne perds pas la doc ! | ||
| + | |||
| + | |||
| + | ===== DNS, la base ===== | ||
| + | |||
| + | Concernant les déclarations dans le DNS, il faut obligatoirement déclarer les divers relais mail (champ MX) autorisés à gérer l' | ||
| + | |||
| + | Si on passe par un relai de son fournisseur de domaine (OVH par exemple) c'est généralement déjà rempli par défaut. | ||
| + | |||
| + | Ça va ressembler à ça : | ||
| + | < | ||
| + | IN MX 5 mx2.mail.ovh.net. | ||
| + | IN MX 100 mx3.mail.ovh.net. | ||
| + | IN MX 1 mx1.mail.ovh.net. | ||
| + | </ | ||
| + | |||
| + | * Source pour OVH : https:// | ||
| + | |||
| + | ===== SPF ===== | ||
| + | |||
| + | On peut indique des ip, des noms de domaine... Je trouve le nom de domaine plus versatile et ça suffit. | ||
| + | |||
| + | @ IN TXT 10800 " | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * ''?'' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * Le mieux est de commencer avec '' | ||
| + | |||
| + | |||
| + | Plus de doc chez [[https:// | ||
| + | |||
| + | ==== Examples ==== | ||
| + | < | ||
| + | " | ||
| + | " | ||
| + | example.org. | ||
| + | |||
| + | Attention, c'est des exemples, une seule de ces lignes dans votre zone DNS ou ça va créer des soucis ! | ||
| + | |||
| + | Sur OVH, par défaut : | ||
| + | " | ||
| + | |||
| + | Sur Gandi : | ||
| + | " | ||
| + | |||
| + | Si on utilise le mail sur le domaine principal (exemple.com) et des sous-domaine (moi.exemple.com), | ||
| + | " | ||
| + | |||
| + | ===== DKIM ===== | ||
| + | DKIM est LE point compliqué : cela demande de générer une clé sur le serveur de relai. Donc, DKIM dépend entièrement du bon vouloir du service. | ||
| + | |||
| + | |||
| + | ==== En passant par le relai des autres ==== | ||
| + | Gandi et Infomaniak permettent de gérer DKIM très simplement. Par contre, en 2023, OVH avait toujours du mal avec le concept. | ||
| + | |||
| + | Chez Gandi c' | ||
| + | |||
| + | |||
| + | Chez OVH, je vous laisse survivre à la doc sur le sujet : [[https:// | ||
| + | |||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | ==== Quand on a son propre relai ==== | ||
| + | DKIM m'aura filé des boutons... Espérons que tout est noté proprement. | ||
| + | |||
| + | Je préfère passer par Opendkim plutôt que Rspamd. Ce dernier gère trop de choses, plante, a une configuration bien touffue, bref j'ai eu vraiment des soucis, donc on va séparer un peu ; ce serait abusé de dire qu'on va vers du KISS vu la complexité des bouzins mais... on essaie un peu. | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | Pour la génération de la clé, comme indiqué [[https:// | ||
| + | |||
| + | Il est aussi possible de générer une clé ed25519, mais elle n'est pas prise en compte chez plein de fournisseurs mails et fera donc échouer la vérification DKIM ([[https:// | ||
| + | |||
| + | Oui, c'est ridicule, mais... L' | ||
| + | |||
| + | Au passage, il faudra que je vérifie, de mon côté, que j' | ||
| + | </ | ||
| + | |||
| + | Avant tout : on va mettre toute la configuration dans un dossier. | ||
| + | sudo mkdir -p / | ||
| + | |||
| + | On créera autant de dossier que de domaines. Oui c'est un peu lourd mais ça simplifiera la gestion plus tard. | ||
| + | sudo mkdir / | ||
| + | |||
| + | Et s' | ||
| + | |||
| + | sudo chown -R opendkim: / | ||
| + | |||
| + | On va commencer par générer la clé, en tant qu' | ||
| + | |||
| + | sudo -u opendkim opendkim-genkey -D / | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Générez autant de clés que de domaines autorisés à envoyer des mails en leur nom. | ||
| + | |||
| + | S' | ||
| + | sudo chmod 640 / | ||
| + | sudo chmod 644 / | ||
| + | |||
| + | On va ensuite modifier ''/ | ||
| + | <WRAP center round todo 60%> | ||
| + | Là je vais copier ma version, commentée, ne me souvenant plus de ce que c' | ||
| + | </ | ||
| + | <code bash / | ||
| + | # Active les logs. L' | ||
| + | Syslog | ||
| + | SyslogSuccess | ||
| + | # | ||
| + | |||
| + | # Comment les mails sont signés. Ma politique n'est pas des plus strictes mais dans mon cas ça devrait être adapté. | ||
| + | Canonicalization | ||
| + | Mode sv | ||
| + | SubDomains | ||
| + | OversignHeaders | ||
| + | |||
| + | # La partie à adapter et modifier ! La plus importante ! Mais... On va avoir du multidomaine, | ||
| + | Domain | ||
| + | Selector | ||
| + | # | ||
| + | |||
| + | # Permissions et user ; ne pas bidouiller sans savoir | ||
| + | UserID | ||
| + | UMask 007 | ||
| + | |||
| + | # Cette partie est si on a plusieurs domaines. On va avoir des fichiers à parser pour voir la concordance clé/ | ||
| + | # L' | ||
| + | # Fichier qui indiquera où sont les clés | ||
| + | KeyTable | ||
| + | # Fichier pour dire comment utiliser ces clés | ||
| + | SigningTable | ||
| + | |||
| + | # Hôtes pour qui les mails seront signés. Là, il y a une subtilité ; on va donc les déclarer dans un fichier annexe. | ||
| + | InternalHosts | ||
| + | |||
| + | # Pour qu'on ne signe pas des trucs qui ne viennent pas du bon endroit ? | ||
| + | ExternalIgnoreList | ||
| + | |||
| + | # Socket pour le MTA, Postfix dans notre cas, qui marche avec celui-ci. | ||
| + | Socket | ||
| + | PidFile | ||
| + | |||
| + | # The trust anchor enables DNSSEC. In Debian, the trust anchor file is provided | ||
| + | # by the package dns-root-data. | ||
| + | TrustAnchorFile | ||
| + | |||
| + | # permettre un redémarrage automatique, | ||
| + | AutoRestart | ||
| + | AutoRestartRate | ||
| + | |||
| + | </ | ||
| + | |||
| + | Par défaut Opendkim a sans doute généré ''/ | ||
| + | |||
| + | Chez moi ça ressemble à ça (j'ai gardé les ip locales par défaut aussi...) : | ||
| + | < | ||
| + | 192.168.0.0/ | ||
| + | 10.0.0.0/8 | ||
| + | 172.16.0.0/ | ||
| + | # IP sur le réseau local | ||
| + | 192.168.1.85/ | ||
| + | # IP publique | ||
| + | 109.190.XXX.XXX | ||
| + | |||
| + | </ | ||
| + | |||
| + | === Multidomain === | ||
| + | Si on a déclaré quelques fichiers... il va falloir les remplir. | ||
| + | <code txt / | ||
| + | dkim23._dkim.example.org example.com: | ||
| + | </ | ||
| + | Ajouter autant de ligne que de domaines, potentiellement en adaptant la partie selector (et évidement le nom de domaine). | ||
| + | |||
| + | Puis l' | ||
| + | <code txt / | ||
| + | *@example.org dkim23._dkim.example.org | ||
| + | bob@example2.com dkim23._dkim.example2.com | ||
| + | </ | ||
| + | |||
| + | Enfin, dans ce cas, mieux vaut encore affiner TrustedHosts. Les domaines déclarés ici, puisqu' | ||
| + | |||
| + | <WRAP center round help 60%> | ||
| + | Un petit doute si c'est pertinent... Je sens qu'on va avoir des trucs bizarres avec ça. | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Finitions === | ||
| + | |||
| + | |||
| + | On recharge : | ||
| + | service opendkim restart | ||
| + | |||
| + | Et on configure postfix en ajoutant ceci : | ||
| + | |||
| + | <code bash / | ||
| + | #Antispam et DKIM | ||
| + | milter_default_action = accept | ||
| + | smtpd_milters = inet: | ||
| + | non_smtpd_milters = $smtpd_milters | ||
| + | milter_protocol = 6 | ||
| + | milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen} | ||
| + | internal_mail_filter_classes = bounce | ||
| + | |||
| + | </ | ||
| + | On recharge : | ||
| + | service postfix restart | ||
| + | |||
| + | Ensuite, la zone DNS. Toutes les infos sont avec '' | ||
| + | |||
| + | La clé publique devrait renvoyer quelque chose comme ça : | ||
| + | dkim23._domainkey IN TXT ( " | ||
| + | " | ||
| + | |||
| + | Et l' | ||
| + | dkim23._domainkey IN TXT " | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | On peut déclarer plus de choses dans le DKIM. Et ça serait sans doute mieux. Mais, là, ça me gonfle, alors ça ira jusqu' | ||
| + | </ | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Bien attendre la propagation du DNS avant de s' | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Et on s' | ||
| + | |||
| + | |||
| + | Sources : | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | ===== DMARC ===== | ||
| + | <WRAP center round important 60%> | ||
| + | Attention ! DMARC doit être activé uniquement si DKIM et SPF sont fonctionnels, | ||
| + | </ | ||
| + | |||
| + | Après les options compliquées à comprendre avec SPF et DKIM, DMARC parait facile. Oui mais... pour qu'il marche bien, il faut que les deux autres soient fonctionnels, | ||
| + | |||
| + | Les autres fournisseurs de mail envoient un rapport quotidien de vos échanges avec eux. Cela fait pas mal de bruit et on pourrait être tenté d' | ||
| + | |||
| + | Le champ dmarc va ressembler à ça si on est strict : | ||
| + | |||
| + | _dmarc 10800 IN TXT " | ||
| + | |||
| + | Et ceci si on ne veux pas trop de soucis dans un premier temps : | ||
| + | _dmarc 10800 IN TXT " | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Un exemple simple avec Gandi (modifiez mail@mondomain.com par l' | ||
| + | " | ||
| + | |||
| + | | ||
| + | |||
| + | Voir https:// | ||
| + | |||
| + | ==== Lire les rapports ==== | ||
| + | C'est du xml et un peu obtus, comme ça. | ||
| + | |||
| + | Je teste [[https:// | ||
| + | |||
| + | ===== Champs DNS en plus ===== | ||
| + | C'est plus " | ||
| + | |||
| + | ==== Spécificités GAFAM ==== | ||
| + | Là, on va rentrer surtout chez les acteurs vers qui on envoie. Chercher " | ||
| + | |||
| + | Il faut souvent leur déclarer nos serveurs mails, les relais utilisés suivant les noms de domaines. | ||
| + | |||
| + | === Google === | ||
| + | Google utilise un outil ([[https:// | ||
| + | |||
| + | Nul doute que ce genre de détail aide aussi à la délivrance des mails. | ||
| + | |||
| + | === Microsoft === | ||
| + | https:// | ||
| + | |||
| + | https:// | ||
| + | === Yahoo === | ||
| + | Ils [[https:// | ||
| + | |||
| + | === Mail.ru === | ||
| + | Idem, vos correspondants communiquent-ils avec le géant russe ? Si non, on peut donc s'en passer. Si oui il semblerait que l' | ||
| + | |||
| + | === Orange === | ||
| + | Leur doc/outil est ici : https:// | ||
| + | |||
| + | === La Poste ? === | ||
| + | J'ai un doute. Pas essayé :P | ||
| + | |||
| + | https:// | ||
| + | |||
| + | === Free === | ||
| + | https:// | ||
| + | |||
| + | ==== Les trucs qu'il faut que je creuse ==== | ||
| + | * https:// | ||
| + | * MTA-STS (Mail Transfer Agent Strict Transport Security) : impose un chiffrement pour la transmission entre les serveurs mails. | ||
| + | * TLS-RPT (TLS Reporting) : envoie des rapports s'il y a échec de connexion TLS avec le protocole précédent | ||
| + | * [[https:// | ||
| + | * Mais ça va rapidement avec le fait d' | ||
| + | * Enregistrement CAA ? Pour préciser qui a le droit d' | ||
| + | * Enregistrement Autodiscover : ça faut vraiment que je creuse... permet à Thunderbird de remplir tout seul la partie du relai quand on ajoute un compte. | ||
| + | * DANE (alternative/ | ||
| + | |||
| + | Par ailleurs, faut aussi creuser " | ||
| + | |||
| + | ===== Plus de sources et outils ===== | ||
| + | |||
| + | * [[https:// | ||
| + | * Google : | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | {{tag> | ||
| + | |||
| + | [[https:// | ||
| + | |||