Traitement et visualisation des rapports dmarc (Debian 11)

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Traitement et visualisation de vos rapports dmarc. Tuto fonctionnel et tester à partir de Debian 11 (Nom de code "bullseye")

Introduction

DMARC est un protocole ouvert d'authentification du courrier électronique qui assure la protection du canal de courrier électronique au niveau du domaine. L'authentification DMARC détecte et empêche les techniques d'usurpation de courrier électronique. Le spoofing est un type d'attaque via laquelle l'adresse du champ De d'un e-mail est falsifiée. Un message de spoofing semble provenir de l'organisation ou du domaine usurpé.

DMARC s'appuie sur deux normes existances SPF ET DKIM.

Cerise sur le gâteau DMARC permet de recevoir régulièrement des rapports de la part des serveurs de messagerie qui reçoivent des messages de votre ou vos domaines et/ou organisations. Mais ces rapports ne sont pas faciles à traiter ou visualiser (Fichier XML Compressé envoyé en pièce jointe)

Si vous avez donc précisé une adresse mail dans votre enregistrement DMARC vous allez recevoir quotidiennement des emails de rapport. Ces rapports s'ils ne sont pas traités sont difficiles à lire...

En voici un exemple...

<?xml version="1.0" encoding="UTF-8" ?>
<feedback>
  <report_metadata>
    <org_name>google.com</org_name>
    <email>noreply-dmarc-support@google.com</email>
    <extra_contact_info>https://support.google.com/a/answer/2466580</extra_contact_info>
    <report_id>5273193057315324027</report_id>
    <date_range>
      <begin>1666742400</begin>
      <end>1666828799</end>
    </date_range>
  </report_metadata>
  <policy_published>
    <domain>forum-debian.fr</domain>
    <adkim>r</adkim>
    <aspf>s</aspf>
    <p>reject</p>
    <sp>reject</sp>
    <pct>75</pct>
  </policy_published>
  <record>
    <row>
      <source_ip>2a01:4f9:2a:29f::2</source_ip>
      <count>1</count>
      <policy_evaluated>
        <disposition>none</disposition>
        <dkim>pass</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <header_from>forum-debian.fr</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>forum-debian.fr</domain>
        <result>pass</result>
        <selector>default</selector>
      </dkim>
      <spf>
        <domain>forum-debian.fr</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
  <record>
    <row>
      <source_ip>95.216.2.96</source_ip>
      <count>1</count>
      <policy_evaluated>
        <disposition>none</disposition>
        <dkim>pass</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <header_from>forum-debian.fr</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>forum-debian.fr</domain>
        <result>pass</result>
        <selector>default</selector>
      </dkim>
      <spf>
        <domain>forum-debian.fr</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
</feedback>

Prérequis

Une debian à jour (Bullseye ou Bookworm)

# apt update && apt upgrade -y


Un serveur Web (Apache/Nginx/Lighttpd), PHP et Mysql (Posgres fait aussi l'affaire mais ce ne sera pas traité ici)

Installation

Dmarc Parser

Le "Parser" est chargé de traiter les rapports et d'injecter les informations obtenues dans une base de donnée. J'ai choisi de traiter directement le répertoire d'une boite IMAP (Dovecot). Deux fois par jour le script vérifie s'il n'y a pas de nouveaux rapports, et les traitent si nécessaire.

Prérequis


# apt update


# apt install git


# apt install libfile-mimeinfo-perl libmail-imapclient-perl libmime-tools-perl libxml-simple-perl libio-socket-inet6-perl libio-socket-ip-perl libperlio-gzip-perl libmail-mbox-messageparser-perl unzip


# apt install libdbd-mysql-perl


ou si vous avez choisi PostgreSQL

# apt install libdbd-mysql-perl


Le script PERL a besoin des modules suivants pour fonctionner:

# cpan install Mail::IMAPClient


# cpan install Mail::Mbox::MessageParser


# cpan install XML::Simple module


# cpan install PerlIO::gzip module


S'il en manque vous obtiendrez ce genre d'erreur:

# ./dmarcts-report-parser.pl

Can't locate Mail/IMAPClient.pm in @INC (you may need to install the Mail::IMAPClient module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at ./dmarcts-report-parser.pl line 63.
BEGIN failed--compilation aborted at ./dmarcts-report-parser.pl line 63.}}

Clonage du dépôt


# cd /usr/local/bin


# git clone https://github.com/techsneeze/dmarcts-report-parser.git


Création de la base de données Tout sera fait en 2 lignes de commandes (Création base et importation tables)


# wget https://www.taugh.com/rddmarc/mkdmarc


Fichier:Mkdmarc.txt

Vous prendrez grand soin de modifier les deux dernières lignes du fichier que vous venez de téléchargé (A minima modifiez le mot de passe...)


# nano mkdmarc

...
GRANT all on dmarc.* to dmarc identified by 'xxx';
GRANT all on dmarc.* to dmarc@localhost identified by 'xxx';

Vous créez ensuite la base et importez les tables:


# mysqladmin -u root -p create dmarc


# mysql -u root -p dmarc < mkdmarc


Vous allez ensuite préparer le fichier de configuration:


# cp dmarcts-report-parser/dmarcts-report-parser.conf.sample dmarcts-report-parser/dmarcts-report-parser.conf


Je vais mettre en évidence les variables primordiales)


# nano dmarcts-report-parser/dmarcts-report-parser.conf

...
$dbname = 'dmarc';
$dbuser = 'dmarc';
$dbpass = 'xxx';
$dbhost = 'localhost'; # Set the hostname if we can't connect to the local socket.
$dbport = '3306';
...
$imapserver       = 'imap.domaine.tld';
$imapuser         = 'user@domaine.tld';
$imappass         = 'yyy';
$imapport         = '143';
...
$imapreadfolder   = 'INBOX.Dmarc';
...
$imapmovefolder = 'INBOX.Dmarc.Processed';
...
$imapmovefoldererr = 'INBOX.Dmarc.notProcessed';


Bien entendu les noms des boites mails doivent exister. Ici j'ai utilisé le dossier Dmarc (Que j'ai créé dans la boite de réception) et les sous-dossiers Processed et notProcessed Mon dossier Dmarc reçoit (grâce à un filtre Sieve créé dans Dovecot) tous les fichiers de rapports DMARC.

Le script devrait se lancer sans erreur. Il vous donne par défaut les paramètres possibles à passer


# cd /usr/local/bin/dmarcts-report-parser


# ./dmarcts-report-parser.pl


 Usage: 
	./dmarcts-report-parser.pl [OPTIONS] [PATH] 

 This script needs a configuration file called <dmarcts-report-parser.conf> in 
 the current working directory, which defines a database server with credentials 
 and (if used) an IMAP server with credentials. 

 Additionaly, one of the following source options must be provided: 
		-i : Read reports from messages on IMAP server as defined in the 
			 config file. 
		-m : Read reports from mbox file(s) provided in PATH. 
		-e : Read reports from MIME email file(s) provided in PATH. 
		-x : Read reports from xml file(s) provided in PATH. 
		-z : Read reports from zip file(s) provided in PATH. 

 The following optional options are allowed: 
		-d : Print debug info. 
		-r : Replace existing reports rather than skipping them. 
  --delete : Delete processed message files (the XML is stored in the 
			 database for later reference). 
	--info : Print out number of XML files or emails processed. 

dmarcts-report-parser.pl: Please provide a source option (-i, -x, -m, -e or -z).


Vous pouvez maintenant le lancer pour tester (-i pour vérifier la boite IMPA et -d pour avoir un debug => intéressant en cas de premier lancement ou d'erreur)


# cd /usr/local/bin/dmarcts-report-parser ./dmarcts-report-parser.pl -i -d


Dmarc Viewer

Vient maintenant le partie la plus amusante (et le plus facile)

Clonez le dépôt dans un dossier accessible par votre serveur Web


# cd /var/www/html


# git clone https://github.com/techsneeze/dmarcts-report-viewer.git


Vous pouvez bien entendu changer le nom du dossier pour avoir quelque chose de plus sympa

# mv dmarcts-report-viewer/ dmarc


# chown -R www-data:www-data /var/www/html/dmarc/


On passe à la configuration (Pas grand chose à faire à part compléter les identifiants de connexion à la base dmarc


# cd dmarc


# cp dmarcts-report-viewer-config.php.sample dmarcts-report-viewer-config.php


# nano dmarcts-report-viewer-config.php

<?php

// ####################################################################
// ### configuration ##################################################
// ####################################################################

// Supported types: mysql, pgsql. If unset, defaults to mysql
//$dbtype="mysql";
$dbhost="localhost";
$dbname="dmarc";
$dbuser="dmarc";
$dbpass="xxx";
$dbport="3306";

?>

Et ensuite ouvrez tout simplement le "viewer" dans votre navigateur

https://domaine.tld/dmarc/dmarcts-report-viewer.php

Vous pouvez modifier la configuration avec un fichier php (Qu'il faut évidemment penser à protéger avec un mot de passe par exemple):

https://domaine.tld/dmarc/dmarcts-report-viewer-options.php

Références

Merci à Techsneeze pour le code et les explications.

https://www.techsneeze.com/dmarc-report/ https://github.com/techsneeze/dmarcts-report-viewer

https://github.com/techsneeze/dmarcts-report-parser https://www.techsneeze.com/how-parse-dmarc-reports-imap/

Lol (discussion) 30 octobre 2022 à 08:08 (CET)lol