DMARC, c'est Domain-based Message Authentication, Reporting and Conformance.
Ça permet de protéger les autres (ainsi que vous même) contre les spams pouvant venir de vos domaines (mais qui ne proviennent pas de votre réseau) et d'assurer une bonne réputation de vos domaines de courriels.
Ca vous permet aussi de recevoir un feedback pour vos domaines de messagerie.
Techniquement, DMARC = SPF + DKIM + Politique qui dicte ce que les serveurs récepteurs doivent faire des emails non-conformes de vos domaines.
Donc, on ne peut pas définir DMARC sans parler de SPF et DKIM.
Sender Policy Framework (SPF) était à l'origine Sender Permitted From.
SPF est donc une méthode d'authentification des emails destinée à détecter les adresses de courriel sources forgées dans un courriel.
Cependant, SPF ne s'applique qu'à l'enveloppe du message (donc le champ MAIL-FROM ou RETURN-PATH d'un courriel), et non au contenu du message (le champ FROM).
SPF fonctionne en déclarant un enregistrement spécial de type TXT dans le DNS qui liste les serveurs autorisés à envoyer du courriel pour la zone/domaine en question.
Avec SPF, je pourrai par exemple dire que l'IP 184.107.112.64 est autorisée à envoyer les emails du domaine yerbynet.com, et interdire toute autre IP.
Ainsi, si un serveur (qui respecte SPF) reçoit un courriel qui a un champ MAIL-FROM de la forme email@yerbynet.com devra vérifier que le courriel a comme origine 184.107.112.64 avant de l'accepter.
Exemple 1:
"v=spf1 ip4:184.107.112.64 -all"
Exemple 2 :
"v=spf1 redirect=_spf.google.com"
Exemple 3 :
"v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"
Exemple 4 :
"v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"
Les quantificateurs :
En SPF, on n'a pas encore accès au contenu du message, on se sert donc des entêtes et notamment des champs MAIL FROM et RETURN-PATH de l'enveloppe.
Il y a 2 modes d'alignement :
L'authentification SPF passe (ou est valide) lorsque l'IP du serveur du courriel est déclarée dans l'enregistrement SPF.
Exemple de succès d'authentification SPF :
Adresse source = 184.107.112.64 MAIL FROM = yerbynet.com Enregistrement SPF = "v=spf1 +a +mx +ip4:184.107.112.64 ~all"
Exemple d'échec d'authentification SPF :
Adresse source = 184.107.112.6 MAIL FROM = yerbynet.com Enregistrement SPF = "v=spf1 +a +mx +ip4:184.107.112.64 ~all"
Important : Lorsque le nombre de requêtes DNS nécessaires pour valider SPF dépasse 10 (des tonnes de includes et des redirects ...) l'évaluation est abandonnée.
Il s'agit juste de bien configurer l'enregistrement SPF dans le DNS. Ceci n'est pas spécifique à Linux.
Il y a un validateur SPF dans SpamAssassin. Mais les scores proposés par défaut de SA sont très bas.
Vous pourriez envisager de relever ces scores si vous constatez que ça pourrait faire du bien.
Dans Sendmail, on peut ajouter un validateur SPF via un milter, mais c'est natif dans Exim4.
DomainKeys Identified Mail (DKIM) est tout comme SPF, une technique d'authentification des expéditeurs de courriels contribuant à détecter les adresses d'expéditeur forgées.
Avec DKIM, un serveur récepteur de courriel aurait les moyens de valider qu'un courriel reçu provient bien d'un serveur qui a l'autorisation de le transmettre.
Le serveur émetteur du message signe le message ou partie du message avec une clé privée, le récepteur décrypte la signature avec une clé publique publiée dans le DNS.
Il faut donc un enregistrement DNS qui contient cette clé publique.
À noter que la paire de clé peut être générée avec les commandes ssh-keygen ou openssl. Il y a aussi plein de générateurs présents sur Internet.
openssl genrsa -out dkimexemple.com-priv.pem 2048 -outform PEM openssl rsa -in dkimexemple.com-private.pem -out dkimexemple.com-pub.pem -pubout -outform PEM
Avant de continuer, il faut regarder le concept de sélecteur (s).
Pour un domaine, on peut avoir plusieurs serveurs qui sont autorisés à envoyer des emails du domaine, donc plusieurs signataires pour le domaine.
On pourrait même imaginer des partenaires externes qui ont le droit d'envoyer des emails pour notre domaine.
On ne voudrait pas partager une clé privée entre tous les acteurs, il nous faut donc pouvoir déclarer plusieurs enregistrements pour notre DKIM.
Par exemple, un pour notre serveur d'envoi principal, un pour notre partenaire de marketing, un autre pour ...
Le sélecteur permettra donc d'avoir autant de _domainkey qu'on souhaite.
Exemple 1:
default._domainkey.yerbynet.com. 14400 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9Lv8vkC1nkz/vP6qOSAQiiEgvHg/bPKMA7uHiYvgPRuIaUCIqHQ5ExKI1VqWAcif+mETze8e+gaWcFQ6fQfgjqpBR5BZbHDOMiReDkIOYQAak84xIJKfHBX5kiBHm/o5ufk9idKjRhmH6/Um651J8MmgruSm+E0dB3IwhjX6q8S28FkGAPyM8kRelpbPGrg0B" "OAa9UWFSygNqIHQcxpniNOQ0oVflwRBECNmVgiBPlfYqrODRGfHa1YF3b0IxK6c/m5JOGb2G2qBS33VxySVQiKgdCmuELgWNqJDC7HtCMkVJL8wyuq29rKx+I1T6qmWlxfyimoBda1Kzf3QuMCZywIDAQAB;"
Exemple 2:
200608._domainkey.engage.windows.com. 3600 IN TXT "v=DKIM1;
k=rsa;
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGoQCNwAQdJBy23MrShs1EuHqK/dtDC33QrTqgWd9CJmtM3CK2ZiTYugkhcxnkEtGbzg+IJqcDRNkZHyoRezTf6QbinBB2dbyANEuwKI5DVRBFowQOj9zvM3IvxAEboMlb0szUjAoML94HOkKuGuCkdZ1gbVEi3GcVwrIQphal1QIDAQAB"
Explications des paramètres
Avec DKIM, on a accès au corps du courriel (FROM).
Comme pour SPF, il y a 2 modes d'alignement :
Exemple d'alignement qui est valide dans le mode strict et dans le mode relatif :
DKIM-Signature: v=1; a=rsa-sha256; ... d=yerbynet.com; ... From: dmarc@yerbynet.com To: roger.yerbanga@out.com
Exemple d'alignement qui passe le mode relatif mais pas strict :
Exemple d'alignement qui ne passe aucun mode :
DKIM-Signature: v=1; a=rsa-sha256; ...
d=yerbynet.com; ...
From: dmarc@other.com
To: roger.yerbanga@out.com
Return-Path:
<bounce-15_HTML-1504463008-800977-7279955-70@bounce.engage.windows.com>
Received: from mta3.engage.windows.com (mta3.engage.windows.com.
[136.147.186.54])
by mx.google.com with
ESMTPS id z11si12558663qvm.116.2020.09.16.13.53.56
for
<xyz@yerbynet.com>
(version=TLS1_2
cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
Wed, 27 Mar 2019 13:53:57
-0700 (PDT)
Received-SPF: pass (google.com: domain of
bounce-15_html-1504463008-800977-7279955-70@bounce.engage.windows.com
designates 136.147.186.54 as permitted sender)
client-ip=136.147.186.54;
Authentication-Results: mx.google.com;
dkim=pass
header.i=@engage.windows.com header.s=200608 header.b=lcunZVqq;
spf=pass (google.com: domain of
bounce-15_html-1504463008-800977-7279955-70@bounce.engage.windows.com
designates 136.147.186.54 as permitted sender)
smtp.mailfrom=bounce-15_HTML-1504463008-800977-7279955-70@bounce.engage.windows.com;
dmarc=pass (p=REJECT sp=REJECT
dis=NONE) header.from=engage.windows.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=200608;
d=engage.windows.com;
h=From:To:Subject:Date:MIME-Version:Reply-To:List-ID:X-CSA-Complaints:
Message-ID:Content-Type; i=email@engage.windows.com;
bh=EehLaLunvBo17WnrX4bGFrWtLrrgvqSsHeOwNAPIO0I=;
b=lcunZVqqn77wO3ZIhU4LDR3PwUdZKSyifj1r3Eg+A6DkrjFvnpkKSaIW43O2roBfAnWW0FRhwnWe
Kq4vupEcVErHUvfuYvMaG1IgUzZXb7k6uLZ+3b0xQRPWFiMansw/9CShGbs2neH9aEEnaznqB++h
3piwcvUMXq5MQe/XcK0=
Received: by mta3.engage.windows.com id hc9tma2fmd47 for
<xyz@yerbynet.com>; Wed, 27 Mar 2019 20:53:46 +0000
(envelope-from
<bounce-15_HTML-1504463008-800977-7279955-70@bounce.engage.windows.com>)
From: "Microsoft Account Team" <email@engage.windows.com>
Ce message porte une signature DKIM valide.
Sendmail ne supporte pas nativement DKIM, il faut lui adjoindre un milter pour cette fonction.
Il existe Opendkim sous Linux qui s'installe facilement (paquet RPM et DEB).
Toute la config se fait dans /etc/opendkim.conf.
Un logiciel tel que Exim4 n'a pas besoin de Opendkim pour signer les messages sortants.
Un logiciel tel que SpamAssassin a un plugin qui permet de checker DKIM, mais encore une fois, les scores proposés par défaut sont assez bas.
Lors de l'envoi du courriel, on applique les règles de conformité DMARC (signature DKIM, et envoi à partir d'une source autorisée) pour que le courriel soit conforme DMARC.
À la réception du courriel, DMARC est analysé pour s'assurer que le courriel est bien conforme DMARC (vérification de la signature, vérification du serveur d'envoi).
Lorsque le courriel est conforme, il passe, et lorsqu'il n'est pas conforme, on applique ce qui est défini dans l'enregistrement (soit rien, soit mise en quarantaine, soit rejet)
"v=DMARC1; p=none; rua=mailto:d@rua.agari.com;ruf=mailto:d@ruf.agari.com;fo=1:s:d"
_dmarc.engage.windows.com. 3600 IN TXT "v=DMARC1; p=reject; pct=100; rua=mailto:d@rua.agari.com,mailto:sdc-dmarc-rua@microsoft.com;fo=1"
_dmarc.google.com. 300 IN TXT "v=DMARC1; p=reject; rua=mailto:mailauth-reports@google.com"
interdit.net. TXT "v=spf1 -all" ;
SPF
_dmarc.interdit.net. TXT
"v=DMARC1;p=reject;sp=reject;pct=100;aspf=s" ; DMARC
Pour ce cas, aucun email ne devra être accepté pour le domaine interdit.net.
Les mails sortants doivent être signés DKIM et être émis depuis un serveur qui a le droit parce qu'il est déclaré dans un SPF.
Delivered-To: yerbynet@gmail.com
Received: by 2002:a17:906:c053:0:0:0:0 with SMTP id
bm19csp725743ejb;
Wed, 27 Mar 2019
13:53:57 -0700 (PDT)
X-Google-Smtp-Source:
ABdhPJwHJ9ainivb4IrUuD7ekGDAUFvQYhjbbMHvuD84xJgPVhwkCOmjYtyl5uGY9OgqRtTR6m2k
X-Received: by 2002:a37:9b88:: with SMTP id
d130mr25306374qke.66.1600289637342;
Wed, 27 Mar 2019
13:53:57 -0700 (PDT)
Return-Path:
<bounce-15_HTML-1504463008-800977-7279955-70@bounce.engage.windows.com>
Received: from mta3.engage.windows.com (mta3.engage.windows.com.
[136.147.186.54])
by mx.google.com with
ESMTPS id z11si12558663qvm.116.2019.03.27.13.53.56
for
<yerbynet@gmail.com>
(version=TLS1_2
cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
Wed, 27 Mar 2019
13:53:57 -0700 (PDT)
Received-SPF: pass (google.com: domain of
bounce-15_html-1504463008-800977-7279955-70@bounce.engage.windows.com
designates 136.147.186.54 as permitted sender)
client-ip=136.147.186.54;
Authentication-Results: mx.google.com;
dkim=pass header.i=@engage.windows.com
header.s=200608 header.b=lcunZVqq;
spf=pass
(google.com: domain of
bounce-15_html-1504463008-800977-7279955-70@bounce.engage.windows.com
designates 136.147.186.54 as permitted sender)
smtp.mailfrom=bounce-15_HTML-1504463008-800977-7279955-70@bounce.engage.windows.com;
dmarc=pass
(p=REJECT sp=REJECT dis=NONE) header.from=engage.windows.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=200608;
d=engage.windows.com;
h=From:To:Subject:Date:MIME-Version:Reply-To:List-ID:X-CSA-Complaints:
Message-ID:Content-Type; i=email@engage.windows.com;
bh=EehLaLunvBo17WnrX4bGFrWtLrrgvqSsHeOwNAPIO0I=;
b=lcunZVqqn77wO3ZIhU4LDR3PwUdZKSyifj1r3Eg+A6DkrjFvnpkKSaIW43O2roBfAnWW0FRhwnWe
Kq4vupEcVErHUvfuYvMaG1IgUzZXb7k6uLZ+3b0xQRPWFiMansw/9CShGbs2neH9aEEnaznqB++h
3piwcvUMXq5MQe/XcK0=
Received: by mta3.engage.windows.com id hc9tma2fmd47 for
<yerbynet@gmail.com>; Wed, 27 Mar 2019 20:53:46 +0000
(envelope-from
<bounce-15_HTML-1504463008-800977-7279955-70@bounce.engage.windows.com>)
From: "Microsoft Account Team" <email@engage.windows.com>
To: <yerbynet@gmail.com>
Ce courriel envoyé de engage.windows.com vers gmail.com a bien passé les validations SPF, DKIM, et DMARC.
Opendmarc peut être greffé à Sendmail pour faire les validations DMARC.
Le paquet existe aussi bien sous Debian que Redhat.
Pour que la politique DMARC définie par l'enregistrement DMARC du domaine expéditeur soit appliquée, il y a un paramètre qu'il ne faut pas oublier d'activer : RejectFailures.
Par défaut il est à false. Il faut le mettre à true dans /etc/opendmarc.conf.
Un logiciel tel que SpamAssassin (cette fois-ci, non non) ne fait pas de validation DMARC. Il va falloir se contenter de OpenDMARC.
DMARC/DKIM/SPF viennent avec des limites et d'autres problèmes à résoudre.
Notamment, on aura de gros souci avec tout ce qui est redirection, ou même des listes de discussions.
Je ne vais pas trop m'atarder sur le sujet, le lecteur intéressé pourra trouver de la lecture sur Internet et discuter avec Stuart D. Gathman.
Pour résoudre ce problème, on va utiliser SRS.
SRS permet de la réécriture des entêtes de courriel pour rendre conforme à SPF tout courriel qui est transféré.
J'ai fait des tests avec la solution pysrs, on peut dire que les tests étaient concluants.
L'information, n'est-elle pas précieuse ? Partageons la tous ensemble !
© Juillet 2019
Roger YERBANGA
www.yerbynet.com