Traitement et visualisation des rapports dmarc (Debian 11)

De Le Wiki du Forum-Debian.fr
Révision datée du 30 octobre 2022 à 07:00 par Lol (discussion | contributions) (Page créée avec « ==Introduction== Traitement et visualisation de vos rapports dmarc. 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'or... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Introduction

Traitement et visualisation de vos rapports dmarc.

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 gateau 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 (Buster 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

apt install libdbd-mysql-perl (Si vous avez choisi PostgreSQL)

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

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
Enter password: 
# mysql -u root -p dmarc < mkdmarc
Enter password: 

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';


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

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/