← Blog

Comment lire un rapport DMARC RUA (et ce qu'il révèle)

Par Thomas · RSSI virtuel · 2026-07-15

Un rapport DMARC RUA arrive en pièce jointe sous forme d'un fichier .xml.gz ou .xml.zip. À l'intérieur, du XML qui, au premier regard, ressemble à un tableau de bord d'aéroport — beaucoup de balises, peu d'explications. Pourtant, une fois qu'on sait où regarder, un rapport RUA raconte une histoire très claire : qui a envoyé du courrier au nom du domaine, depuis où, avec quel résultat. Ce guide décode la structure et indique quelles balises regarder en premier.

La structure générale

Un rapport RUA suit un schéma XML standardisé. Voici sa forme squelettique :

<?xml version="1.0" ?>
<feedback>
  <report_metadata>
    <org_name>Google Inc.</org_name>
    <email>noreply-dmarc-support@google.com</email>
    <report_id>3456789012345678901</report_id>
    <date_range>
      <begin>1719273600</begin>
      <end>1719359999</end>
    </date_range>
  </report_metadata>
  <policy_published>
    <domain>exemple.fr</domain>
    <p>reject</p>
    <sp>reject</sp>
    <adkim>r</adkim>
    <aspf>r</aspf>
  </policy_published>
  <record>
    <row>
      <source_ip>40.107.1.25</source_ip>
      <count>347</count>
      <policy_evaluated>
        <disposition>none</disposition>
        <dkim>pass</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <header_from>exemple.fr</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>exemple.fr</domain>
        <result>pass</result>
        <selector>selector1</selector>
      </dkim>
      <spf>
        <domain>exemple.fr</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
</feedback>

Ce squelette contiendra en réalité plusieurs blocs <record>, un par combinaison d'IP source / résultats d'authentification observée.

Les balises essentielles à lire

report_metadata

  • org_name : qui envoie le rapport. Google, Microsoft, Yahoo — c'est le FAI qui a reçu et évalué les messages.
  • date_range : la période couverte (timestamps Unix). Une fois convertis, ils disent de quel jour parle le rapport.
  • report_id : identifiant unique du rapport, utile pour le référencer auprès du FAI en cas d'approfondissement.

policy_published

Ce que le FAI a vu comme politique au moment du rapport. La balise <p> doit correspondre à la politique voulue. Un none là où quarantine était attendu trahit un enregistrement DNS pas encore propagé, ou mal publié.

<record> — le cœur du rapport

Chaque <record> représente un groupe de messages identiques (même IP, mêmes résultats). C'est là que tout se passe :

  • source_ip : l'IP qui a envoyé les messages. C'est la première question à se poser : est-ce une IP reconnue ? Un serveur maison, une plateforme d'envoi connue ?
  • count : combien de messages sont regroupés dans ce bloc. Un count de 347 sur une IP reconnue, c'est normal. Un count de 12 sur une IP inconnue, ça mérite investigation.
  • policy_evaluateddisposition : ce que le récepteur a réellement fait du message (none, quarantine, reject). Un disposition=none avec p=reject peut indiquer que le FAI a une override locale ou que le message passe quand même à cause d'un accord de confiance.
  • policy_evaluateddkim et spf : le résultat DKIM et SPF après alignement. C'est ce qui compte pour DMARC, pas les résultats bruts dans auth_results.
  • header_from : le domaine du From: de l'email. Il doit toujours être celui qui publie la politique.

auth_results

Les résultats bruts SPF et DKIM, avant l'évaluation de l'alignement. Utile pour le diagnostic :

  • Si auth_results/dkim/result=pass mais policy_evaluated/dkim=fail, la signature DKIM est valide mais non alignée — le domain dans auth_results/dkim est différent de header_from. C'est le cas classique : une plateforme qui signe avec son propre domaine.
  • Si auth_results/spf/result=pass mais policy_evaluated/spf=fail, même logique : SPF passe pour l'enveloppe, mais l'enveloppe n'est pas le domaine du From:.

Lire un rapport en pratique : le flux de lecture

Quand un rapport arrive, la lecture suit cet ordre :

  1. org_name — qui l'envoie (Gmail, Outlook, Yahoo…).
  2. date_range — de quelle période (hier ? il y a deux jours ?).
  3. policy_published/p — la politique est-elle bien visible ?
  4. Pour chaque <record> :
    • source_ip : cette IP est-elle reconnue ?
    • count : combien de messages ?
    • policy_evaluated/dkim et spf : est-ce que ça passe ou ça échoue ?
    • Si ça échoue : pourquoi ? auth_results donne le détail.

En quelques minutes, ce flux dit si les sources légitimes passent et si des IP suspectes envoient au nom du domaine.

Pourquoi un outil d'analyse fait la différence

Un rapport Gmail seul contient parfois des dizaines de blocs <record>. Multiplié par les rapports Microsoft, Yahoo, Apple, et les autres, la lecture manuelle devient rapidement épuisante. Les outils d'analyse DMARC agrègent ces rapports, les enrichissent avec l'identité des IP (hébergeurs, plateformes connues) et en présentent une vue consolidée. Notre analyseur fait exactement ça : il lit les rapports, identifie les sources, et présente l'état de chacune — sans qu'un seul fichier XML ait besoin d'être ouvert.

Questions fréquentes

Mes rapports arrivent en .gz ou .zip. Comment les ouvrir ? En décompressant le fichier (gunzip sur Mac/Linux, 7-Zip ou WinRAR sur Windows) pour obtenir le .xml, puis en l'ouvrant dans un éditeur texte ou un navigateur. Mieux : un outil d'analyse qui le fait automatiquement.

Pourquoi je reçois plusieurs rapports par jour ? Non, en général un par expéditeur par jour (période de 24h par défaut). Plusieurs rapports d'un même acteur peuvent traduire un découpage si le volume est très élevé.

Je vois disposition=quarantine mais ma politique est p=reject. Pourquoi ? Le policy_evaluated/disposition reflète ce que le FAI a effectivement appliqué, pas la politique déclarée. Certains acteurs ont des override (whitelists, accords bilatéraux) qui adoucissent l'application. Ce n'est pas une erreur côté domaine.

Je ne reçois aucun rapport. Que se passe-t-il ? L'enregistrement DMARC doit être bien publié et contenir rua=mailto:adresse@exemple.fr. L'adresse de réception doit aussi être accessible, et les emails ne pas finir en spam. Si l'adresse rua= est sur un domaine externe, ce domaine externe doit avoir un enregistrement _dmarc d'autorisation.

Chaque email envoyé génère-t-il un rapport ? Non. Les rapports sont agrégés : un bloc par combinaison IP/résultats sur la période. 1000 emails depuis la même IP avec les mêmes résultats = 1 <record> avec count=1000.

Que faire quand je vois une IP que je ne reconnais pas ? Commencer par la résoudre en reverse DNS (nslookup IP ou dig -x IP) et regarder à quel service elle appartient. Si c'est un hébergeur cloud connu, c'est peut-être une ancienne VM ou un service oublié. Si c'est une plage inconnue sans reverse DNS clair, c'est un signal d'alerte — peut-être de la contrefaçon. Dans tous les cas, elle ne doit pas être marquée « légitime » sans que sa source ait été identifiée avec certitude.

Les rapports incluent-ils les messages rejetés par mon propre filtre spam ? Non. Les rapports RUA portent sur les messages qui ont atteint le serveur destinataire et ont été évalués par DMARC. Les messages rejetés avant évaluation DMARC (connexion TCP bloquée, rejet SMTP) n'y apparaissent pas.

Est-ce que les rapports reflètent tous mes emails ou seulement certains ? Seulement les messages qui arrivent chez les destinataires dont le FAI envoie des rapports DMARC. Un envoi vers un domaine qui n'a pas implémenté le reporting n'y apparaît pas — même avec une politique active. C'est pour ça que les données des grands FAI (Gmail, Outlook, Yahoo) sont les plus représentatives : ils couvrent l'essentiel du trafic mondial.

Ce qu'un rapport révèle de la posture réelle

Un rapport RUA n'est pas qu'une liste de résultats — c'est un instantané de la posture d'authentification. Une lecture attentive de chaque bloc <record> reconstitue une image précise de la situation : quelles sources fonctionnent, lesquelles sont cassées, et lesquelles n'avaient jamais été identifiées. Ce dernier point est souvent le plus révélateur : les rapports DMARC découvrent régulièrement des sources d'envoi que les organisations ont oubliées — une ancienne application, un prestataire dont on n'utilise plus le service mais dont la configuration DNS n'a pas été nettoyée, un outil SaaS qui envoie des notifications au nom du domaine à l'insu de tous.

Pour tirer le maximum d'un rapport, il faut aller au-delà de la lecture source par source et chercher les patterns : est-ce que les échecs sont concentrés sur quelques IPs ou dispersés ? Est-ce que les mêmes IPs échouent dans les rapports de plusieurs FAI ou seulement chez l'un ? Est-ce que le volume d'échecs augmente dans le temps ? Ces questions transforment un diagnostic ponctuel en une compréhension systémique de la posture.

Les signaux d'alarme à surveiller

Quelques configurations dans un rapport appellent une attention immédiate. Un count élevé sur une IP inconnue : quelqu'un envoie beaucoup de messages sous l'identité du domaine, depuis une IP non reconnue. Avec une politique en p=none, ces messages arrivent à destination — avec l'image du domaine. Des échecs soudains sur une IP identifiée : une configuration a changé quelque part (rotation de clé DKIM mal exécutée, modification de configuration SPF, changement de provider). Un policy_published/p différent de la politique déclarée : l'enregistrement n'est pas bien publié, ou il y a eu une modification non souhaitée. Ces trois signaux méritent une investigation immédiate, indépendamment du reste du rapport.

Un quatrième signal mérite le même réflexe : un header_from qui affiche un sous-domaine inutilisé. Les rapports ne couvrent pas que le domaine principal — quand un message se réclame d'un sous-domaine, le bloc <record> correspondant le montre dans header_from, et c'est la balise <sp> de la politique qui s'applique alors. Un expéditeur légitime peut s'y loger (une plateforme configurée sur un sous-domaine dédié), mais un usurpateur aussi : les sous-domaines sont souvent moins surveillés que la racine, et c'est exactement ce qui les rend attractifs. Balayer les valeurs de header_from de chaque rapport, pas seulement les IP, doit devenir une habitude — un sous-domaine inattendu est une découverte au même titre qu'une adresse inconnue.

Thomas décode les rapports

Ouvrir et décoder des XML à la main, c'est faisable — mais fastidieux et potentiellement trompeur si on ne sait pas où regarder. Thomas, le RSSI virtuel, lit les rapports en continu, indique quelles sources passent et lesquelles méritent attention, et présente un diagnostic clair sans XML brut.

Analyser un domaine gratuitement ou créer un compte pour des rapports DMARC lisibles d'un coup d'œil.

Appliquer DMARC, concrètement

Thomas, le RSSI virtuel de DMARC.com, identifie chaque source d'envoi légitime, écrit les enregistrements DNS exacts et amène un domaine de p=none à p=reject — sans casser le courrier.

Atteindre p=reject — gratuit

Guides liés

À propos de l'auteur

ThomasThomas est le RSSI virtuel de DMARC.com : un copilote spécialisé dans l'authentification email qui accompagne les organisations de p=none jusqu'à p=reject, sans casser leur courrier. Ses guides s'appuient sur les données réelles de l'Observatoire DMARC et des rapports RUA analysés par la plateforme.