text/gemini
# Analyse des mails de rapport DMARC
Dans le cadre de la mise en place de DMARC[1] sur un serveur mail donné, les prestataires externes s'appuyant sur la vérification des champs DMARC pour filtrer les emails entrant sont tenus de vous envoyer un email récapitulatif des actions entreprises chaque jour où ils ont reçu des mails du serveur en question à minuit.
J'ai découvert un petit script permettant de vérifier l'état de ces remontées d'information.
=> https://en.wikipedia.org/wiki/DMARC [1] DMARC (HTTPS) [en]
## Installation
Ce script requiert
* offlineimap[1] (dispo en paquet debian ou AUR)
* mpack[2] (idem)
* ce script go[3]
=> http://www.offlineimap.org/ [1] offlineimap (HTTP) [en]
=> http://ftp.andrew.cmu.edu/pub/mpack/ [2] mpack (HTTP) [en]
=> https://github.com/riobard/dmarc [3] ce script go (HTTPS) [en]
## Configuration
Utiliser la configuration suivante pour offlineimap (ça va récupérer tous les mails de la boîte observée, mais on s'occupera de /fine-tuner/ ça plus tard), à enregistrer dans le ficher `$HOME/.offlineimaprc' (préferez un autre fichier si vous utilisez déjà offlineimap et ne voulez pas déranger votre configuration personnelle).
```conf
[Account MonCompte]
localrepository = L ocal_MonCompte
remoterepository = MonCompte
[Repository Local_MonCompte]
type = Maildir
sep = /
localfolders = ~/Mail/MonCompte
[Repository MonCompte]
type = IMAP
remotehost = imap.moncompte.tld
ssl = yes
cert_fingerprint = lalalalalala
remoteport = 993
remoteuser = moi@moncompte.tld
remotepass = lololololo
```
Puis, créer un dossier de travail qu'on va appeler intelligemment `dmarc' :
```shell
$ mkdir -p dmarc/mails
```
S'assurer que le script `main.go' téléchargé juste avant sur github est bien dans le dossier dmarc que l'on vient de créer. Dans le cadre de la surveillance en mode test, il peut être intéressant de connaître plus précisément les IPs ayant généré des erreurs. Pour cela, ajouter les lignes suivantes à la fin du fichier `main.go' :
```diff
--- upstream_main.go 2016-04-04 15:16:25.552078344 +0200
+++ main.go 2016-04-04 15:13:18.452071510 +0200
@@ -98,6 +98,21 @@
const DATEFMT = "2006-01-02 03:04:05"
printfLock.Lock()
defer printfLock.Unlock()
fmt.Printf("%s,%s,%s,%s,%d,%d,%d\n", fb.DateBegin().UTC().Format(DATEFMT), fb.DateEnd().UTC().Format(DATEFMT),
fb.Organization, fb.Domain, dispos_none, dispos_quarantine, dispos_reject)
+
+ for _, rec := range fb.Records {
+ fmt.Printf("filedetails,,,%s,%s,%s,%s,%s\n",
+ rec.SourceIP,
+ rec.HeaderFrom,
+ rec.Disposition,
+ rec.EvalSPF,
+ rec.EvalDKIM)
+ }
}
```
Ajouter à côté le script suivant dans un fichier nommé `dmarc/parse_dmarc.sh' :
```shell
#!/usr/bin/env bash
for file in $(ls -1 mails); do
go run main.go mails/${file} &> /dev/null
if [ "$?" = 1 ]; then
echo "Error in file ${file}"
fi
done
```
## Utilisation
Dans un premier temps on va extraire tous les pièces jointes des mails contenus dans le dossier DMARC de la boîte à surveiller.
```shell
$ cd ~/dmarc/mails
$ munpack ~/Mail/MonCompte/INBOX/DMARC/cur/*
```
Puis, on fait un peu de nettoyage
```shell
$ rm part*
$ rm *.desc
$ unzip *.zip
$ rm *.zip
$ ls -1 | grep gz
toto.xml.gz
tata.xml.gz
$ gzip -d toto.xml.gz tata.xml.gz
$ ...
```
Bref, il faut s'assurer qu'on n'a plus que des fichiers XML dans ce dossier. Ceci fait, yapuka appeler une première fois le script `parse_dmarc.sh' qui va nous afficher tous les fichiers xml pour lesquels on va avoir des problèmes.
```shell
$ ./parse_dmarc.sh
Error with file aol_totottatatiansetnset.xml
Error with file fastmail_ututunasetinetsa.xml
```
Pour chacun des fichiers listé, les ouvrir et tenter de les ré-enregistrer en utf8. Emacs sait faire ça très bien. Attention, certaine fois l'entête même du fichier xml préciser qu'il s'agit d'un encodage autre (`encoding="windows-1252"') Dans ce cas, penser à modifier cet entête pour y faire figurer `utf-8'.
Enfin, lancer le script go
```shell
$ go run main.go mails/* > dmarc.csv
```
Vous avez désormais un super fichier CSV à ouvrir dans le tableur de votre choix.
## Filtrage
Dans le cadre d'une analyse pré-filtrage de DMARC, vous pouvez utiliser les deux commandes ci-dessous pour obtenir la liste des IPs qui échoue la vérification SPF ou DKIM :
```shell
$ grep filedetails dmarc.csv | cut -d, -f4,5,7 | grep fail | sort | uniq > fail_spf.csv
$ grep filedetails dmarc.csv | cut -d, -f4,5,8 | grep fail | sort | uniq > fail_dkim.csv
```
Ces échecs s'explique par le fait que des gens ont paramétrés leur client mail pour utiliser le serveur SMTP de leur FAI pour envoyer des mails depuis une adresse moncompte.tld.
--
📅 lundi 4 avril 2016 à 21:34
📝 Étienne Pflieger with GNU/Emacs 29.4 (Org mode 9.7.11)
=> gemini://alltext.umaneti.net/gemlog/tags/bidouille.gmi 🏷️ Bidouille
=> gemini://alltext.umaneti.net/gemlog/tags/configuration.gmi 🏷️ configuration
=> gemini://alltext.umaneti.net/gemlog/tags/email.gmi 🏷️ email
=> gemini://alltext.umaneti.net/gemlog/tags/offlineimap.gmi 🏷️ offlineimap
=> gemini://alltext.umaneti.net/gemlog/tags/script.gmi 🏷️ script
=> gemini://alltext.umaneti.net/gemlog/tags/tutoriel.gmi 🏷️ tutoriel
=> gemini://alltext.umaneti.net/gemlog 📜 Back to gemlog
=> gemini://alltext.umaneti.net 🏡 Back to home
=> gemini://alltext.umaneti.net/fronde/README.gmi 🚀 Propelled by fronde
This content has been proxied by September (3851b).