Mailgraph Docker Container
Postfix gehört vermutlich immer noch zu den am weitesten verbreiteten freien SMTP-Servern. Wer einen Emailserver selber hostet und die Menge an ein- und ausgehenden Emails im Blick haben möchte, stößt schnell auf das Tool Mailgraph von David Schweikert. Mailgraph besteht aus einem Perl-Skript, das die Logfiles von Postfix auswertet und eine RRDtool-Datenbank befüllt und einem CGI-Skript, welches die Daten in Form von Grafiken übersichtlich im Browser darstellt.
Neben der Anzahl der gesendeten und empfangenen Emails gibt es auch eine Grafik zu Spam und Viren.
Dank eines Patches von Sebastian van de Meer informiert Mailgraph auch darüber, ob die einliefernden Server SPF, DMARC oder DKIM unterstützen. Hierfür ist natürlich erforderlich, dass diese Mechanismen auf eurer Postfix-Instanz konfiguriert sind.
Docker Container
Um Mailgraph und dazu einen entsprechenden Webserver nicht direkt auf seinem Emailserver installieren zu müssen, kann man es natürlich in einem Docker Container betreiben.
Dazu habe ich ein Dockerfile erstellt, welches alle Abhängigkeiten enthält und sofort eingesetzt werden kann. Als Volumes gibt man den Pfad zum Mail-Logfile sowie einen Ordner zum Speichern der RRD-Dateien an. Alternativ kann man hierzu natürlich auch ein Docker Volume verwenden.
Über das -v
Flag hängt man Host-Pfade oder Volumes in den Container ein: -v [Host-Path]:[Container-Path]
Die Log-Datei wird im Container unter dem Pfad /var/log/mail/mail.log
erwartet, die RRD-Dateien unter /var/www/mailgraph/rrd/
.
Das Image liefert standardmäßig auf Port 80 und Pfad /mailgraph die Mailgraph-Webseite aus.
docker run --rm \
-v /var/log/mail/mail.log:/var/log/mail/mail.log \
-v /var/data/mailgraph/rrd/:/var/www/mailgraph/rrd/ \
davidullrich/mailgraph:latest
Ruft man nun http://localhost:80/mailgraph/ im Browser auf, bekommt man schon die ersten Grafiken angezeigt.
Docker Compose
Nutzt man zur Orchestrierung Docker Compose, sieht eine entsprechende Konfiguration etwa so aus:
version: '3'
services:
mailgraph:
image: davidullrich/mailgraph:latest
hostname: mail.example.com
volumes:
- /var/log/mail/mail.log:/var/log/mail/mail.log
- /var/data/mailgraph/rrd/:/var/www/mailgraph/rrd/
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
Reverse Proxy mit Traefik
Möchte man seine Mailgraph-Webseite nicht öffentlich zugänglich sehen, kann man mittels Reverse Proxy eine Authentifizierung einrichten. Eine einfache Möglichkeit bietet Traefik, ein Reverse Proxy, der sich sehr schön in Docker Compose integrieren lässt. Hat man Traefik auf seinem System eingerichtet, ist die Konfiguration für Mailgraph über Labels sehr einfach.
version: '3'
services:
mailgraph:
image: davidullrich/mailgraph:latest
hostname: mail.example.com
volumes:
- /var/log/mail/mail.log:/var/log/mail/mail.log
- /var/data/mailgraph/rrd/:/var/www/mailgraph/rrd/
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.mailgraph-router.rule=Host(`mail.example.com`) && PathPrefix(`/mailgraph`)"
- "traefik.http.routers.mailgraph-router.entryPoints=websecure"
- "traefik.http.routers.mailgraph-router.service=mailgraph-service"
- "traefik.http.services.mailgraph-service.loadBalancer.server.scheme=http"
- "traefik.http.services.mailgraph-service.loadBalancer.server.port=80"
- "traefik.http.routers.mailgraph-router.middlewares=mailgraph-middleware-auth"
- "traefik.http.middlewares.mailgraph-middleware-auth.basicauth.users=user:[password-hash]"
Dovecot-Erweiterung
Da ich als IMAP-Server Dovecot einsetze, habe ich Mailgraph um die Möglichkeit erweitert, die Anzahl der erfolgreichen und fehlgeschlagenen IMAP-Logins anzuzeigen.
Sourcecode und Docker Image
Den Sourcecode zu dem Docker Image findet ihr auf GitHub, das fertige Image im Docker Hub.