ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, Serveurs, Comment avoir DNS Records DMARC enabled - DKIM SPF ?

Bonne configuration des enregistrements DMARC : DNS Record found, DMARC Record found et DMARC Quarantine/Reject policy enabled

Author : O.Romain.Jaillet-ramey

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 :


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".

  1. Vous assignez les adresses IP de tout ces serveurs (A, AAAA) "server-mail" et "smtp" ;
  2. Puis, vous assignez le champ SPF au domaine de chacunes des adresses IP (celles des serveurs "server-mail-1.domain.tld") ;
  3. puis vous créez la signature DKIM du domaine ;
  4. puis vous choissisez votre politique DMARC.
  5. 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'appelle mail.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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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.
Retirer les numéros de lignes

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;------------------------------
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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.
Retirer les numéros de lignes

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.
Retirer les numéros de lignes

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).

alias de domaine subdomain-proxy-1.zw3b.net au domaine principal zw3b.net

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"
Retirer les numéros de lignes

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"
Retirer les numéros de lignes

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
Retirer les numéros de lignes
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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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"
Retirer les numéros de lignes

Ê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
Retirer les numéros de lignes

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;"
Retirer les numéros de lignes

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;"
Retirer les numéros de lignes

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.
Retirer les numéros de lignes

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.
Retirer les numéros de lignes

 

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
Status Ok DMARC Record Published DMARC Record found
Status Ok DMARC Policy Not Enabled DMARC Quarantine/Reject policy enabled
Status Ok 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
Status Ok DMARC Record Published DMARC Record found
Status Ok DMARC Policy Not Enabled DMARC Quarantine/Reject policy enabled
Status Ok DNS Record Published DNS Record found

mx:mail-dbaeur03lp2170.outbound.protection.outlook.com. ? Network Tools: DNS,IP,Email

Test Result
Status Problem DNS Record Published DNS Record not found Information More Info
Status Warning DMARC Policy Not Enabled DMARC Quarantine/Reject policy not enabled Information More Info
Status Ok DMARC Record Published DMARC Record found

mx:smtp-g01.email-control.orange-business.com. ? Network Tools: DNS,IP,Email

Test Result
Status Problem DMARC Record Published No DMARC Record found Information More Info
Status Problem DNS Record Published DNS Record not found Information More Info
Status Warning DMARC Policy Not Enabled DMARC Quarantine/Reject policy not enabled Information More Info

mx:mail-ed1-f69.google.com. ? Network Tools: DNS,IP,Email

Test Result
Status Problem DNS Record Published DNS Record not found Information More Info
Status Ok DMARC Record Published DMARC Record found
Status Ok 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é :)