Table des matières
DMARC
Le principe
"Domain-based Message Authentication, Reporting, and Conformance", défini par le RFC 7489.
En quelque sorte un outil de synthèse entre SPF, DKIM et l'adresse fournie dans le champ «From:» de l'en-tête d'un message. Alors que SPF et DKIM ne s'intéressent qu'au domaine affiché dans l'adresse du champ «RCPT-TO» de l'enveloppe du message, DMARC est en mesure d’analyser les résultats du test SPF, du test DKIM, de vérifier l'alignement des domaines retrouvés dans le champ «Return-Path:», la signature DKIM et le champ «From:».
Il y a ici deux volets à traiter:
- informer les MTA destinataires de messages issus de notre domaine de la conduite à tenir dans le cas de messages considérés comme frauduleux,
- configurer nitre MTA pour qu'il soit en mesure d'appliquer la conduite à tenir lorsqu'il reçoit des messages considérés comme frauduleux de la part de domaines exposant des directives DMARC
Le MTA destinataire du message implémente le filtre DMARC qui va effectuer les contrôles suivants:
L'analyse
Reprenons l'en-tête d'un message propre, transmis par un MTA dont le domaine fournit une information SPF et un chiffrement DKIM:
X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: <untel@nain-t.net> Received: from zimbra-e1-04.priv.proxad.net (LHLO zimbra-e1-04.priv.proxad.net) (172.20.243.152) by zimbra-e1-04.priv.proxad.net with LMTP; Thu, 22 May 2025 18:47:16 +0200 (CEST) Received: from smtp.nain-t.net (mx28-g26.priv.proxad.net [172.20.243.98]) by zimbra-e1-04.priv.proxad.net (Postfix) with ESMTP id 954A47837B8 for <untel@free.fr>; Thu, 22 May 2025 18:47:16 +0200 (CEST) Received-SPF: pass (mx28-g26.free.fr: domain of nain-t.net designates 51.68.121.59 as permitted sender) client-ip=51.68.121.59; envelope-from=untel@nain-t.net; helo=smtp.nain-t.net; Received: from smtp.nain-t.net ([51.68.121.59]) by mx1-g20.free.fr (MXproxy) for untel@free.fr; Thu, 22 May 2025 18:47:16 +0200 (CEST) X-ProXaD-SC: state=HAM score=0 X-ProXaD-Cause: dmFkZTGnFuBuUvZ6qEBSZre++A1wUK3ylK8vjLGBtIhQslyFJZd4DyBafNYVfRZAwgn0l9MbmOS6c5uwFMt1Dq9BRPGtAscCpn/7s+5lfE85OEemqrGRDfrgd3MAZQ/L0wO8cqRu/evQ53yTQZLDdNqERWv/yg1ymPv9x/JgKSm0bwwitwsO2sjHdQneC2cAyayjtJiR8i9HcKMs0P8PyzTyvfYukzUT0xw5+N/cexmvMfrMb7Pvcu+oRpSppmT/JMV5T08w2qKdH5azyvAdFGICvu1xoBfCn9RuFv9uRzR+v3KCwALMT3h9iWhRGPV9Rmg/gyg65riEF+mJoU/5xZN6vJsQNLu+MsagZ7qzOg88kdI7lgTIosgb7mFw7tyxWYSTmfghEkU1oDfR5KU3qEXQEaY2Gy5WkMKhIH9wUPI7sbgoPestjy1FGYM5Vx6zkGy7IgXxdEcVKanXKyKBoG2fZzXSwvAZmptBQt+pEkIxUofyi2o0Yi5HsP6Zc9cvLHrLzbgvLKZwyagOJlQEwBcuz6U+JeeSu2WxooZZAgrVzMBBHuVfS/AbrQ5KTUKhXyZ6lpXHF7iOUUkBn/+Nq/vLg54xY60iIaGiOLd6lC/ZvuDJfnKISBad6IjrRMGI+oGRTLyHzzRmXpX3ozdmrGuQPCgRGIVt5Me6MfvUuB91vym6HQ X-ProXaD-Context: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nain-t.net; s=052025; t=1747932436; bh=wAKMWuDJ20BVhKNhwgzlkaFVNh/AchJTf2EZuTqS4kQ=; h=Date:Reply-To:To:From:Subject:From; b=iMBYZNA5f/nXYPgFkpbQCGWMF4FEbW1DP752d6lPwtaMhnl7QbObfg74ZHzjv1YVa HtjxNYnUdarkx0+NJjxDLIrv6ODS1OjBTDVer/SMSQSLQWlEqM1NjIX+8BbhZMvM5d Lgi+pJH+DBFqUKZ0i0jCy2jx/NZc3jFFw4wqdFsyKIB6CqoySQt0AI+KCkPy7xIPED NqYNPQCO5eTGOVzcI0CnsXeQi0lDFty9b+EEWNN981T1VbrUtrAVdFx55cFU/JAQ47 BQ4a5mxqMsioMga632tU5QlI0EtojvCTMQsrUYsxiZ8TcPFiD/Vg4GkbbQ4UV5s6ru 7Azi+q87YO1Og== Received: from [192.168.60.47] (stratus.nain-t.net [82.65.67.204]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.nain-t.net (Postfix) with ESMTPSA id 1FFD51FC7E for <untel@free.fr>; Thu, 22 May 2025 18:47:16 +0200 (CEST) Message-ID: <93764524-7ec3-4534-9b70-ebde40251bbd@nain-t.net> Date: Thu, 22 May 2025 18:47:15 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Reply-To: prof@nain-t.net Content-Language: fr To: untel <untel@free.fr> From: untel <untel@nain-t.net> Subject: test dkim Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit hop!Dans ce message:
- le domaine de l'enveloppe (Return-Path:) présente une règle SPF qui est respectée,
- c'est le même domaine qui est indiqué dans la signature DKIM,
- c'est encore le même que l'on retrouve dans l'adresse fournie dans le champ From:
Pour DMARC tout est bon, tous les domaines sont identiques.
La décision
L'originalité de DMARC, c'est que le MTA va décider quoi faire de la conclusion de l'analyse en fonction des directives fournies par le gestionnaire du domaine récupéré dans le «Return-Path» si, bien entendu, cette information est fournie. Encore une fois, par l'intermédiaire d'un enregistrement TXT dans la zone du domaine émetteur.
Les directives du domaine émetteur
L'enregistrement DMARC dans la zone DNS est de la forme:
_dmarc.nain-t.net TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@nain-t.net; ruf=mailto:postmaster@nain-t.net; fo=1;"
Balise | Valeurs possibles | Signification |
---|---|---|
v | DMARC1 | Version DMARC |
p | none, quarantine ou reject | Politique à appliquer en cas d'échec |
rua | mailto:utilisateur@domaine.tld | destinataire à qui envoyer des rapports de filtrage |
ruf | mailto:utilisateur@domaine.tld | URI pour le destinataire à qui envoyer les rapports forensiques. Il peut y en avoir plusieurs. |
pct | de 0 à 100 | pourcentage de messages subissant la règle «p» si le test échoue. 100 est la valeur par défaut. |
sp | none, quarantine ou reject | politique à appliquer aux sous-domaines |
aspf | «r», «s» | Mode «relaxed» ou «strict» utilisé pour l'analyse de l'alignement des différentes écritures des domaines retrouvés dans «Return-Path» et «From:». «s» par défaut |
adkim | «r», «s» | Mode «relaxed» ou «strict» utilisé pour l'analyse de l'alignement des différentes écritures des domaines retrouvés dans la signature DKIM et «From:». «r» par défaut |
fo | «0», «1», «d» ou «s» | Options pour les rapports forensiques. « 0 » génère des rapports si tous les mécanismes d’authentification sous-jacents échouent à produire un résultat DMARC positifs, « 1 » génère des rapports si l’un des mécanismes échoue, « d » génère des rapports si la signature DKIM n’a pas été vérifiée, « s » génère des rapports si SPF échoue. Plusieurs valeurs peuvent être combinées en les séparant par «:». Exemple: fo=0:d:s |
rf | «arfr» | désigne le format des rapports forensiques. Actuellement la seule valeur possible et donc valeur par défaut. |
ri | nombre entier de secondes | intervalle entre deux rapports agrégés. 86400 (24 heures) par défaut. |
Voici un exemple de rapport :
<?xml version="1.0"?> <feedback> <report_metadata> <org_name>Yahoo</org_name> <email>dmarchelp@yahooinc.com</email> <report_id>1748136146.312007</report_id> <date_range> <begin>1748044800</begin> <end>1748131199</end> </date_range> </report_metadata> <policy_published> <domain>nain-t.net</domain> <adkim>r</adkim> <aspf>r</aspf> <p>none</p> <pct>100</pct> </policy_published> <record> <row> <source_ip>209.85.128.103</source_ip> <count>1</count> <policy_evaluated> <disposition>none</disposition> <dkim>fail</dkim> <spf>fail</spf> </policy_evaluated> </row> <identifiers> <header_from>nain-t.net</header_from> </identifiers> <auth_results> <spf> <domain>dispor.com.ar</domain> <result>softfail</result> </spf> </auth_results> </record> </feedback>
Super! c'est du XML. Et encore, il est bien présenté.
Un petit outil nommé dmarc-cat
peut nous venir en aide pour afficher plutôt ceci à la place:
Reporting by: Yahoo — dmarchelp@yahooinc.com From 2025-05-24 02:00:00 +0200 CEST to 2025-05-25 01:59:59 +0200 CEST Domain: nain-t.net Policy: p=none; dkim=r; spf=r Reports(1): IP Count From RFrom RDKIM RSPF mail-wm1-f103.google.com. 1 nain-t.net dispor.com.ar softfail
- Le MTA émetteur étant
mail-wm1-f103.google.com
, - le «From:» est de «nain-t.net»,
- le «Mail-From:» (RFrom) indique «dispor.com.ar»,
- il n'y a pas de signature DKIM (RDKIM),
- Le rapport SPF indique un «softfail».
Comme Dans la directive DMARC affichée par «nain-t.net», p=none, donc le message a pu être transmis.
Le milter pour Postfix
apt install opendmarc
L'installation propose de créer une base de données «mysql». Cette base est conseillée pour générer les rapports d'activité. Pour les curieux, le schéma de cette base se trouve dans /usr/share/dbconfig-common/data/opendmarc/install/mysql
.