Mit einem DMARC-Record im DNS kann nicht nur festgelegt werden, wie mit Emails zu verfahren ist, die mit den SPF- und DKIM-Einträgen nicht konform gehen. Im Parameter rua kann auch eine Adresse angegeben werden, an welche die Mailserver aggregierte Berichte senden können, wie hier z. B. die Adresse dmarc@example.org:
_dmarc 3600 IN TXT "v=DMARC1;p=quarantine;rua=mailto:dmarc@example.org"
Die Berichte werden als XML-Dateien im Anhang versandt. Der Paketmanager von Debian bietet gleich drei verschiedene Tools zur Installation an, welche die XML-Dateien parsen können: dmarc-cat, dmarc-srg und dmarcts-report-parser. Mit letzterem kann auch direkt auf das IMAP-Konto zugegriffen werden, in welchem die Berichte landen. Die extrahierten Daten werden dabei in einer Datenbank gespeichert.
Da dmarcts-report-parser im Debian-Repo von Trixie enthalten ist, ist die Installation einfacher als auf der Github-Seite angegeben:
# apt install dmarcts-report-parser
Nach der Installation muss manuell eine MariaDB oder PostgreSQL Datenbank angelegt werden. In der Datei /etc/dmarcts-report-parser.conf werden dann die Zugangsdaten zu dieser Datenbank eingetragen, ebenso die Zugangsdaten zum IMAP-Konto sowie ggf. – entsprechend den erläuternden Kommentaren – weitere Einstellungen. Bei der Angabe von Unterordnern funktionierte in meinem Fall (Dovecot mit Maildir auf dem Server) die Trennung mit einem Slash nicht, stattdessen mit einem Punkt:
$imapmovefolder = 'dmarc.processed';
Nachdem die Konfiguratiosndatei fertiggestellt ist, kann ein erster Prozess angestoßen werden:
# dmarcts-report-parser -i
In der Datenbank sollten dann die Tabellen rptrecord und report mit den geparsten Einträgen gespeichert sein. Wenn alles ordnungsgemäß verlaufen ist, kann in der Datei /etc/default/dmarcts-report-parser der täglich laufende Cronjob bzw. Timer, der bereits bei der Installation von dmarcts-report-parser eingerichet wurde, „scharf geschaltet“ werden:
# This tool/script is run via CRON only if the below IS_CONFIGURED variable is set to "1" IS_CONFIGURED="1"
Um die Daten der Datenbanktabellen besser zu erfassen, können entsprechende Views eingerichtet werden. So z. B. die neuesten Einträge zuoberst, beschränkt auf die Auswertungsdaten der empfangenden Mailserver:
CREATE VIEW view_dmarc AS
SELECT DATE(rep.maxdate) AS rep_date, rep.domain,
IF(rec.ip IS NULL, INET6_NTOA(rec.ip6), INET_NTOA(rec.ip)) AS ip, rep.org,
rec.dkimresult AS dkim, rec.dkim_align, rec.spfresult AS spf, rec.spf_align,
rec.disposition
FROM rptrecord AS rec
INNER JOIN report AS rep
ON rec.serial = rep.serial
ORDER BY rep_date DESC
Mit einem ergänzendem Statement WHERE disposition != "none" ließe sich der View auch auf die problematischen Einträge beschränken, bei denen Emails geblockt oder in die Quarantäne verschoben wurden.