schnuecks.dev
Alle Projekte

mailreports

Stabil

Selbstgehostet · Open Source · DMARC & TLS-RPT

Wissen, wer in deinem Namen sendet.

mailreports liest die täglichen DMARC- und TLS-Berichte aus deinem Postfach und erklärt sie im Klartext statt in XML und Fehlercodes: eigener Server, beauftragte Dienste, Weiterleitungen und Absender, die dort nichts zu suchen haben.

Kostenlos unter AGPL-3.0 · Keine Cloud, keine Telemetrie · amd64 und arm64

Übersicht von mailreports mit der DMARC-Bestehensquote zweier Domains und den Auffälligkeiten

Von Rohdaten zu klaren Antworten.

Die rua=-Adresse des DMARC-Eintrags und den TLS-RPT-Eintrag auf ein Postfach zeigen lassen. mailreports ruft alles ab, was dort ankommt, speichert es und erklärt es.

Im Klartext erklärt

Jeder Berichtseintrag als Satz: welcher Absender, wie viele E-Mails, signiert oder nicht und wie der Empfänger verfahren ist.

Einordnung der Absender

Eigener Server, beauftragte Dienste über den DKIM-Selektor, Weiterleitungen und Unbekannte, mit Reverse-DNS, Land und Netz. Bekannte Absender mit einem Klick auf ihrer Seite eintragen.

TLS-Berichte

Ob andere Server die eigenen verschlüsselt erreicht haben, für MTA-STS und DANE, mit dem Grund jedes Fehlschlags.

Direkt aus dem Postfach

IMAP über TLS, Berichte als XML, JSON, gzip oder zip. E-Mails werden verschoben oder markiert, nie gelöscht, oder im Lesemodus gar nicht verändert.

Benachrichtigungen

Pushover, ntfy, Webhook oder E-Mail, wenn etwas fehlschlägt, höchstens einmal täglich pro Fund, dazu optional eine Wochenübersicht.

Übersicht und Verlauf

Bestehensquote, Verlauf pro Tag und veröffentlichte Richtlinie je Domain, auch als JSON- und Prometheus-Kennzahlen.

DNS-Prüfung

DMARC, SPF mit Lookup-Grenze, DKIM-Schlüssel, MX mit DANE, MTA-STS, TLS-RPT und BIMI, täglich geprüft, mit einer Meldung, wenn sich ein Eintrag ändert oder ein neues Problem auftaucht.

Absenderseiten und Suche

Der Verlauf jeder sendenden IP und eine Suche über Adressen, Hostnamen, Berichterstatter, Bericht-IDs und DKIM-Selektoren.

Export und Aufbewahrung

Originalberichte herunterladen, Einträge als CSV exportieren und alte Daten nach einer festen Zahl von Tagen automatisch löschen.

Jeder Eintrag, erklärt.

„Diese 118 E-Mails stammen vom Newsletter-Dienst: korrekt mit example.org signiert.“ Oder: Ein unbekannter Absender hat im Namen der Domain gesendet und wurde abgewiesen. Unter jeder Erklärung: die DKIM-Signaturen, die SPF-Prüfung und beide Absenderadressen.

Ein DMARC-Bericht, Eintrag für Eintrag erklärt

Wissen, wann verschärft werden kann.

Sobald die Berichte zeigen, dass alle bekannten Absender bestehen, schlägt mailreports die nächst strengere Richtlinie samt Eintrag vor. Wenn nicht, steht dort, was zuerst zu beheben ist.

Domainseite mit veröffentlichter Richtlinie, einer Empfehlung für p=reject und dem Verlauf pro Tag

Meldungen dort, wo du hinschaust.

Pushover, ntfy, Webhook oder E-Mail direkt in der App einrichten und mit einer Testnachricht prüfen. Tokens und Passwörter werden verschlüsselt gespeichert.

Einstellungsseite mit den Benachrichtigungskanälen, dem Mailserver und der Wochenübersicht

Sichere Anmeldung, eingebaut

  • Zwei-Faktor und PasskeysKonten mit den Rollen Administration und Lesezugriff, Codes aus einer Authenticator-App, Wiederherstellungscodes, Passkeys und Sicherheitsschlüssel.
  • Single Sign-onAnmeldung über einen OpenID-Connect-Anbieter wie Authelia, parallel zur normalen Anmeldung, oder die Anmeldung übernimmt der Reverse-Proxy.
  • Von Haus aus abgesichertNicht vertrauenswürdige Berichte sicher gelesen, strenge Content Security Policy, CSRF-Schutz, Anmeldeprotokoll und ein schreibgeschützter Container ohne Root.

Ein Container, eine SQLite-Datei.

Postfach in .env und den eigenen Mailserver in sources.toml eintragen, dann starten. Die Seite fragt nach dem Einrichtungscode aus dem Log und legt das erste Konto an.

# Dateien holen und starten
mkdir mailreports && cd mailreports
url=https://raw.githubusercontent.com/schnuecks/mailreports/main
curl -O $url/compose.yaml
curl -o .env $url/.env.example
curl -o sources.toml $url/sources.example.toml
mkdir data secrets && sudo chown 10001 data
printf '%s' 'imap-password' > secrets/imap_password.txt
docker compose up -d

Gefällt dir, was ich baue?

Wenn dir eines meiner Projekte Zeit spart, kannst du mir gern einen Kaffee auf Ko-fi ausgeben. Das hält die Drucker am Laufen und bringt die nächste Idee.

Kaffee auf Ko-fi spendieren