Informations :
Dates
- Publish : : Wednesday 14 june 2023
- Modification : Wednesday 07 february 2024
- 1088 views
Share :
DMARC (Domain-based Message Authentication, Reporting and Conformance) empêche le spoofing et l'hameçonnage.
DMARC est toujours utilisé avec les deux méthodes ou contrôles d'authentification suivants :
- Le protocole SPF (Sender Policy Framework) permet au propriétaire du domaine d'autoriser des adresses IP à envoyer des e-mails pour le domaine. Les serveurs de réception peuvent vérifier que les messages provenant d'un domaine spécifique sont envoyés depuis des serveurs autorisés par le propriétaire du domaine.
- DKIM (Domain Keys Identified Mail) ajoute une signature numérique à chaque message envoyé. Les serveurs de réception utilisent cette signature pour vérifier que les messages sont authentiques et qu'ils n'ont pas été falsifiés ni modifiés pendant l'envoi.
J'ai remarqué que plusieurs serveurs mails (principal) ont bien activés leurs signatures DKIM, configurés leur politique DMARC et les adresses IPs de leurs SPF, mais très peu ont configurés leurs enregistrements DNS DMARC pour qu'ils soient valide et que leur politique DMARC soit activée.
NdM : 20231127
C'est simple, l'outil de vérification est celui-ci "MX Lookup" sur → https://mxtoolbox.com/ ; Il faut écrire son nom de domaine et avoir "DMARC Record found", "DMARC Quarantine/Reject policy enabled", et "DNS Record found".
Donc, je vous écris un tuto.
Techniquement, en 2 mots, en analysant vos configurations "serveurs mail" :Par exemple si vous avez 2 serveurs mails, imaginons "server-mail-1.domain.tld" et "server-mail-2.domain.tld" et 10 passerelles relais "smtp-1.paris.domain.tld", "smtp-2.paris.domain.tld", "smtp-1.toulouse.domain.tld", "smtp-2.toulouse.domain.tld".
- Vous assignez les adresses IP de tout ces serveurs (A, AAAA) "server-mail" et "smtp" ;
- Puis, vous assignez le champ SPF au domaine de chacunes des adresses IP (celles des serveurs "server-mail-1.domain.tld") ;
- puis vous créez la signature DKIM du domaine ;
- puis vous choissisez votre politique DMARC.
- Et après vous assignez vos DNS RRset MX au domaine, les SMTPs ("smtp-1.paris.domain.tld") - Et vous serez green ;-)
Çà risque d'être un peu long pour certains.
En plus, je vais vous expliquer comment-faire pour configurer un serveur (subdomain-proxy-1.zw3b.net
etc.) d'envoie d'emails (relais avec votre/vos serveur·s mails) par exemple avec une adresse mails user@subdomain-proxy-1.zw3b.net
valide DMARC.
Pour cela vous devez avoir un serveur d'envoie d'e-mails actif et configurable.
J'utilise comme serveur mail la suite "Zimbra Collaboration 8.8 – Open Source Edition ", où j'ai configuré plusieurs noms de domaine et des adresses mails pour mes utilisateurs/clients. J'ai une dixaine de noms de domaines dessus.
Le serveur s'appellemail.zw3b.net
où j'ai associé une adresse IPv4 et une adresse IPv6.
Ma configuration est la suivante :
Exemple :
Script avec 3 lignes
001root@w3a:~ $ host mail.zw3b.net
002mail.zw3b.net has address 158.69.126.137
003mail.zw3b.net has IPv6 address 2607:5300:60:9389:17:4:0:1
J'ai configuré les sous-domaines IMAP et POP en "alias" du serveur principal ; pour une plus grande facilité des configurations d'adresses de comptes emails dans les logiciels mails (thunderbird, office365, fairmail etc.).
Exemple :
Script avec 9 lignes
001root@w3a:~ $ host imap.zw3b.net
002imap.zw3b.net is an alias for mail.zw3b.net.
003mail.zw3b.net has address 158.69.126.137
004mail.zw3b.net has IPv6 address 2607:5300:60:9389:17:4:0:1
005 006root@w3a:~ $ host pop.zw3b.net
007pop.zw3b.net is an alias for mail.zw3b.net.
008mail.zw3b.net has address 158.69.126.137
009mail.zw3b.net has IPv6 address 2607:5300:60:9389:17:4:0:1
Par exemple vim /etc/bind/masters/zw3b.net.hosts
:
Script avec 9 lignes
001;------------------------------
002; MX
003;------------------------------
004mail 3600 IN A 158.69.126.137
005mail 3600 IN AAAA 2607:5300:0060:9389:0017:0004:0000:0001
006 007imap 3600 IN CNAME mail.zw3b.net.
008pop 3600 IN CNAME mail.zw3b.net.
009;smtp 3600 IN CNAME mail.zw3b.net.
J'aurais pû créer un alias sur l'adresse SMTP comme d'habitude mais pour une bonne raison (c'est que l'on ne peut pas assigner de champ MX sur un CNAME ou sur un RRset qui a un CNAME) je ne procède pas comme cela.
Donc je créais un champ A
et AAAA
pour le champ d'enregisterement DNS "smtp.zw3b.net" en plus - que (vous verrez plustard), que je me servirai pour ajouter des MX à mes sous-domaines, pour la politique DMARC soit active/valide (p=quarantine
, sp=reject
).
Par exemple vim /etc/bind/masters/zw3b.net.hosts
:
Script avec 6 lignes
001smtp 3600 IN A 158.69.126.137
002smtp 3600 IN AAAA 2607:5300:0060:9389:0017:0004:0000:0001
003 004;------------------------------
005; MX
006;------------------------------
Résultat :
Script avec 3 lignes
001root@w3a:~ $ host smtp.zw3b.net
002smtp.zw3b.net has address 158.69.126.137
003smtp.zw3b.net has IPv6 address 2607:5300:60:9389:17:4:0:1
Vous devez configurer sur le domaine entier (pour que les utilisateurs mails puissent recevoir des emails dans leurs boîte mails (myaddess@domain.tld
) "un champ MX", le nom du serveur MTA avec la priorité.
Par exemple vim /etc/bind/masters/zw3b.net.hosts
:
Script avec 5 lignes
001;------------------------------
002; MX
003;------------------------------
004 005@ 3600 IN MX 10 smtp.zw3b.net.
Cela donne :
Script avec 4 lignes
001root@w3a:~ $ host zw3b.net
002zw3b.net has address 158.69.126.137
003zw3b.net has IPv6 address 2607:5300:60:9389:15:1:0:1
004zw3b.net mail is handled by 10 smtp.zw3b.net.
J'aurais pû (comme d'habitude), configurer le nom du serveur mail mail.zw3b.net
tout simplement mais je déclare smtp.zw3b.net
pour une bonne raison.
Donc à ce moment, j'ai une configuration valide pour recevoir des mails - Bien entendu il faut ajouter/configurer ses champs DMARC, configurer les adresses IP d'envoie SPF, et créer sa signature DKIM (par exemple depuis un serveur MTA Zimbra ) pour être en bonne conformité, et que vos messages envoyés soient signés numériquement liés à votre nom de domaine (contre l'usurpation de votre nom/adresse emails).
Par exemple pour mon nom de domaine "principal" ? MX Lookup : zw3b.net
A partir de ce moment là, pour envoyer depuis un container, par exemple un serveur web, il nous faut configurer ce serveur comme autorisés SPF à envoyer des mails signés DKIM DMARC.
Il faut premièrement ajouter un alias de sous domaine au domaine principal sur votre serveur d'envoie.
Par exemple, via l'admin Zimbra, ajouter un alias de domaine "subdomain-proxy-1.zw3b.net" au domaine principal "zw3b.net" - Cela, nous permet de pouvoir créer une signature DKIM numérique pour ce serveur (cet alias).
Il faut ensuite ajouter les champs DMARC à votre alias de domaine comme vous savez le faire pour un domaine "principal/entier".
Configurer ses SPF (Sender Policy Framework)
Les SPF sont des adresses IP (de votre/vos serveurs d'envoie d'e-mails, les IP de mail.zw3b.net).
Dans un premier temps il faut configurer ses SPF (Sender Policy Framework) pour le serveur subdomain-proxy-1
:
Par exemple vim /etc/bind/masters/zw3b.net.hosts
:
Script avec 7 lignes
001;------------------------------
002; SPF
003;------------------------------
004@ 10800 IN SPF "v=spf1 ip4:158.69.126.137/32 ip6:2607:5300:60:9389:17:4:0:1/124 ~all"
005@ 10800 IN TXT "v=spf1 ip4:158.69.126.137/32 ip6:2607:5300:60:9389:17:4:0:1/124 ~all"
006subdomain-proxy-1 10800 IN SPF "v=spf1 ip4:158.69.126.137/32 ip6:2607:5300:60:9389:17:4:0:1/124 ~all"
007subdomain-proxy-1 10800 IN TXT "v=spf1 ip4:158.69.126.137/32 ip6:2607:5300:60:9389:17:4:0:1/124 ~all"
Je vous ai ajouté les champs SPF/TXT du domaine principal en plus de celui du sous domaine (pour une meilleure compréhension).
Résultat visible avec la commande linux dig
:
Script avec 5 lignes
001root@w3a:~ $ dig SPF subdomain-proxy-1.zw3b.net @dns.ipv10.net +short
002"v=spf1 ip4:158.69.126.137/32 ip6:2607:5300:60:9389:17:4:0:1/124 ~all"
003 004root@w3a:~ $ dig TXT subdomain-proxy-1.zw3b.net +short
005"v=spf1 ip4:158.69.126.137/32 ip6:2607:5300:60:9389:17:4:0:1/124 ~all"
Comme vous le voyez, en plus du champ SPF, j'ai ajouté un champ TXT par précaution/obligation.
Configurer sa signature DKIM (DomainKeys Identified Mail) pour le serveur (en question)
Dans un deuxième temps il faut créer/configurer sa signature DKIM (DomainKeys Identified Mail) pour notre sous domaine d'envoie d'e-mails.
Zimbra : Ajout de données DKIM à un domaine d'envoie sans configuration DKIM existante :
Par exemple, depuis un serveur mail Zimbra, avec l'utilisateur "zimbra", on associe des signatures DKIM de cette manière - mais ce n'est pas le sujet de cette page.
Script avec 1 ligne
001zimbra@mail:~ $ /opt/zimbra/libexec/zmdkimkeyutil -a -d subdomain-proxy-1.zw3b.net
Zimbra : Mise à jour des données DKIM pour un domaine d'envoie
Script avec 1 ligne
001zimbra@mail:~ $ /opt/zimbra/libexec/zmdkimkeyutil -u -d subdomain-proxy-1.zw3b.net
Lorsque les clés DKIM sont mises à jour, le serveur DNS devra être rechargé avec le nouvel enregistrement TXT (ou utilisez nsupdate
- Configuration serveur DNS BIND9 Masters et Slaves ).
Il est conseillé de laisser l'enregistrement TXT précédent dans le DNS pendant un certain temps pour permettre la vérification des e-mails qui ont été signés avec la clé précédente pour continuer à réussir.
Zimbra : Suppression des données DKIM pour un domaine d'envoie :
Script avec 1 ligne
001zimbra@mail:~ $ /opt/zimbra/libexec/zmdkimkeyutil -r -d subdomain-proxy-1.zw3b.net
Cette commande supprime les données DKIM de LDAP. Les nouveaux e-mails ne seront plus signés pour le domaine.
L'enregistrement DNS TXT doit rester pendant un certain temps pour permettre la vérification des e-mails signés avec cette clé.
Zimbra : Récupération des données DKIM stockées pour un domaine d'envoie :
Script avec 1 ligne
001zimbra@mail:~ $ /opt/zimbra/libexec/zmdkimkeyutil -q -d subdomain-proxy-1.zw3b.net
La requête ZimbraDkimKeyUtil de type "query" retourne quelque chose comme cela :
Script avec 14 lignes
001DKIM Domain:
002subdomain-proxy-1.zw3b.net
003 004DKIM Selector:
00548AXX-XXXXXXX-XX5F6
006 007DKIM Private Key:
008-----BEGIN RSA PRIVATE KEY-----
009MIcX6LH4O.............SzG5qAHZCXY=
010-----END RSA PRIVATE KEY-----
011 012DKIM Public signature:
01348AXX-XXXXXXX-XX5F6._domainkey IN TXT ( "v=DKIM1; k=rsa; "
014"p=MIIBIjANBgkqhkiG9.....dmcGtwwIDAQAB" ) ; ----- DKIM key 48AXX-XXXXXXX-XX5F6 for subdomain-proxy-1.zw3b.net
Il faut récupérer la valeur "DKIM Public signature" et ajouter un enregistrement DKIM à votre DNS. Il faut changer "SELECTOR._domainkey
" par "SELECTOR._domainkey.NAME_OF_SERVER
".
Ajouter un enregistrement DNS TXT pour la signature DKIM du domaine d'envoie :
Il faut bien entendu ajouter le résultat de la signature DKIM (du sous domaine d'envoie) dans un enregistrement DNS TXT version DKIM.
Par exemple vim /etc/bind/masters/zw3b.net.hosts
:
Script avec 5 lignes
001;------------------------------
002; DKIM
003;------------------------------
00495BXX-XXXXXXX-XX5F6._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIIBIjANB.....d2J2DB3IDAQAB" ) ; ----- DKIM key 95BXX-XXXXXXX-XX5F6 for zw3b.net
00548AXX-XXXXXXX-XX5F6._domainkey.subdomain-proxy-1 IN TXT ( "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9.....dmcGtwwIDAQAB" ) ; ----- DKIM key 48AXX-XXXXXXX-XX5F6 for subdomain-proxy-1.zw3b.net
Je vous ai ajouté le champ DKIM du domaine principal en plus de celui du sous domaine (pour une meilleure compréhension).
Résultat visible avec la commande linux dig
:
Script avec 2 lignes
001root@w3a:~ $ dig TXT 48AXX-XXXXXXX-XX5F6._domainkey.subdomain-proxy-1.zw3b.net @dns.ipv10.net +short
00248AF5CXX-XXXXXXX-XX5F6._domainkey.subdomain-proxy-1.domain.tld. 3600 IN TXT "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9.....dmcGtwwIDAQAB"
Être valide DMARC sur le serveur d'envoie qui est un sous domaine du domaine principal.
Ajouter le champ DNS TXT version DMARC (Domain Messages Authentifiés and Reports de bonne Conformtité) au serveur authoritaire DNS :
Par exemple vim /etc/bind/masters/zw3b.net.hosts
:
Script avec 5 lignes
001;------------------------------
002; DMARC
003;-----------------------------
004_dmarc 10800 IN TXT "v=DMARC1; p=quarantine; sp=reject; pct=10; aspf=s; adkim=s; rua=mailto:dmarc-no-reply@zw3b.net;" ; ici politique de demande de quarantaine pour les adresses addr@domain.tld et demande de reject pour adresses en sous domaine addr@subdomain.domain.tld
005_dmarc.subdomain-proxy-1 10800 IN TXT "v=DMARC1; p=reject; sp=reject; pct=10; aspf=s; adkim=s; rua=mailto:dmarc-no-reply@zw3b.net; " ; ici politique de demande de reject pour les adresses addr@subdomain-proxy-1.domain.tld et demande de reject pour adresses du sous domaine du sous domaine addr@subdomain.subdomain-proxy-1.domain.tld
Je vous ai mis ma politique DMARC du domaine principal en plus de celui du sous domaine (pour une meilleure compréhension).
Script avec 2 lignes
001root@w3a:~ $ dig TXT _dmarc.subdomain-proxy-1.zw3b.net @dns.ipv10.net +short
002"v=DMARC1; p=reject; sp=reject; pct=10; aspf=s; adkim=s; rua=mailto:dmarc-no-reply@zw3b.net;"
Ici, j'ai une politique de "reject" sur le subdomain (p=reject
: "p" comme principal par rapport au nom du domain key) et ses sous domaines (sp=reject
) (des sous-sous-domaine possible, probable) avec 10% d'analyse de mes mails envoyées en politique strict sur les champs à vérifier ? SPF et DKIM.
Je précise que si on est sûr de soi (de notre serveur de mail et qu'on n'a pas 10 serveurs de mail à configurer ; qui a dix serveurs de mails : personne) on pourait configurer "100%" de demande de vérification (donc de TOUS nos mails) aux serveurs receveurs puisqu'on a configuré "la signature DKIM" et que donc, techniquement aucune personne, aucun compte "mail" légitime ne devrait ne pas avoir de signature DKIM ; donc on ne risque rien. Tous nos mails sont signés "automatiquement" donc les serveurs Mails receveurs peuvent vérifier notre bonne conformité ; ce qui logiquement et techniquement permettrait de "mettre la confiance" les serveurs réceptionneurs de nos mails.
Pour une explication supplémentaire, pour le domaine principal a_email@domain.tld
, si vous avez remarqué, j'ai une politique de mise en quarantaine sur le champ "p
" et de "reject" demande de suppression des mails en sous-domaine (champ "sp
") "non déclarés/non configurés" - Nous, nous avons configuré "un sous domaine" subdomain-proxy-1.zw3b.net
pour pouvoir envoyer des mails conforment DMARC depuis une adresse www-data@subdomain-proxy-1.zw3b.net
.
Script avec 2 lignes
001root@w3a:~ $ dig TXT _dmarc.zw3b.net @dns.ipv10.net +short
002"v=DMARC1; p=quarantine; sp=reject; pct=10; aspf=s; adkim=s; rua=mailto:dmarc-no-reply@zw3b.net;"
Cela permet, de demander aux serveurs destinataire/receveur de mails (gmail, hotmail, outlook etc..) de stocker le mail dans le dossiers SPAMs de l'utilisateur destinataire - si le mail expéditeur n'est pas encore connu (un nouveau, ou récent utilisateur mail de votre serveur d'envoi et qui pluss est ne serait pas signé, il irait dans le dossiers SPAMs, ou si on change de signature DKIM (c'est pour çà qu'on conseille de garder un certain temps l'ancienne signatuer DKIM et d'ajouter la nouvelle), pour un mail de type user (at) domain (dot) tld ; par contre pour un mail provenant de user (at) sous (dot) domain (dot) tld , s'il n'est pas signé il serait rejeté (le mail disparaitraît, l'utilisateur ne recevrait jamais ce mail).
Et, comme je vous le disais juste au dessus, pour le champ "sp
" en "reject" signifie de demander aux serveurs destinataire de mails (gmail, hotmail, outlook etc..) de supprimer automatiquement un mail "possiblement usurper" de tous les sous-domaines du domaine - Chose normale/logique/par default.
Bien configurer ses enregistrements DNS : DMARC Records found, DMARC Quarantine/Reject policy enabled
Maintenant, pour avoir une configuration DMARC optimale et bien valide vous devez associer un enregistrement DNS MX sur vos (sous) domaines d'envoie. Comme nous l'avons fait tout à l'heure pour le domaine principal d'envoie d'e-mails.
Là est l'important.
Par exemple vim /etc/bind/masters/zw3b.net.hosts
:
Script avec 6 lignes
001;------------------------------
002; MX
003;------------------------------
004 005@ 3600 IN MX 10 smtp.zw3b.net.
006subdomain-proxy-1 3600 IN MX 10 smtp.zw3b.net.
Pour que vous compreniez, et puissiez analyser si votre serveur mail et vos records DMARC sont bien configurer vous pouvez utiliser l'outil DNS MX / DMARC sur MXToolBox .
Résultat :
Script avec 4 lignes
001root@w3a:~ $ host subdomain-proxy-1.zw3b.net
002subdomain-proxy-1.zw3b.net has address 158.69.126.137
003subdomain-proxy-1.zw3b.net has IPv6 address 2607:5300:60:9389:15:1:0:1
004subdomain-proxy-1.zw3b.net mail is handled by 10 smtp.zw3b.net.
Vous aurez alors, une bonne configuration de vos enregistrements DNS MX sur votre domaine et vos sous-domaines d'envoie d'e-mails avec des DMARC enregistrements activés/trouvés/résolvés et avec des enregistrements de politique DMARC de "Mise en Quarantaine" (dossier spam) ou de "Reject" (suppression du mail) activés que les serveurs de réception d'e-mails peuvent/doivent utiliser pour accepter ou non un mail envoyé depuis vos serveurs.
Bonne configuration.
Romain
Retour de l'outil DNS MX / DMARC sur MXToolBox
mx:zw3b.net ? Network Tools: DNS,IP,Email
Pref | Hostname | IP Address | TTL | |
---|---|---|---|---|
10 | smtp.zw3b.net |
158.69.126.137 OVH SAS (AS16276) |
60 min | Blacklist Check SMTP Test |
10 | smtp.zw3b.net | 2607:5300:60:9389:17:4:0:1 | 60 min | Blacklist Check |
Test | Result | |
---|---|---|
DMARC Record Published | DMARC Record found | |
DMARC Policy Not Enabled | DMARC Quarantine/Reject policy enabled | |
DNS Record Published | DNS Record found |
mx:w1a.zw3b.net ? Network Tools: DNS,IP,Email
Pref | Hostname | IP Address | TTL | |
---|---|---|---|---|
10 | smtp.zw3b.net |
158.69.126.137 OVH SAS (AS16276) |
60 min | Blacklist Check SMTP Test |
10 | smtp.zw3b.net | 2607:5300:60:9389:17:4:0:1 | 60 min | Blacklist Check |
Test | Result | |
---|---|---|
DMARC Record Published | DMARC Record found | |
DMARC Policy Not Enabled | DMARC Quarantine/Reject policy enabled | |
DNS Record Published | DNS Record found |
mx:mail-dbaeur03lp2170.outbound.protection.outlook.com. ? Network Tools: DNS,IP,Email
Test | Result | ||
---|---|---|---|
DNS Record Published | DNS Record not found | More Info | |
DMARC Policy Not Enabled | DMARC Quarantine/Reject policy not enabled | More Info | |
DMARC Record Published | DMARC Record found |
mx:smtp-g01.email-control.orange-business.com. ? Network Tools: DNS,IP,Email
Test | Result | ||
---|---|---|---|
DMARC Record Published | No DMARC Record found | More Info | |
DNS Record Published | DNS Record not found | More Info | |
DMARC Policy Not Enabled | DMARC Quarantine/Reject policy not enabled | More Info |
mx:mail-ed1-f69.google.com. ? Network Tools: DNS,IP,Email
Test | Result | ||
---|---|---|---|
DNS Record Published | DNS Record not found | More Info | |
DMARC Record Published | DMARC Record found | ||
DMARC Policy Not Enabled | DMARC Quarantine/Reject policy enabled |
Note de Moi-même :
N'oubliez d'ajouter l'adresse IP locale du serveur "subdomain-proxy-1.zw3b.net" à vos "MTA autorisés" à envoyer des e-mails grâce à votre serveur MX (exemple: mail.zw3b.net).
Configuration de Zimbra ? "zmprov gcf zimbraMtaMyNetworks
"
Configurer le postfix du serveur "subdomain-proxy-1.zw3b.net" en "système satelite" avec comme "relayhost = IP_LOCAL_OF_MAIL_SERVER".
Et le tour est joué :)