Wer einen eigenen Mailserver betreibt, kennt das Problem: Alles scheint zu funktionieren — bis plötzlich keine Mails mehr ankommen. Festplatte voll, Zertifikat abgelaufen, Spamfilter falsch konfiguriert — die Ursachen sind vielfältig und oft nicht sofort sichtbar. Genau dafür habe ich eine Überwachungslösung entwickelt: Sie prüft automatisch alle 60 Sekunden ob der Mailserver gesund ist und schlägt Alarm, bevor etwas ausfällt. 246 Prüfpunkte, 19 fertige Dashboards, komplett Open Source — und in 5 Minuten installiert.

Voraussetzung ist neben einem laufenden Mailcow-Server ein Zabbix-Monitoring-Server — ein weit verbreitetes Open-Source-Tool zur Serverüberwachung. Der Zabbix Agent wird auf dem Mailserver installiert und meldet die gesammelten Daten an den Zabbix Server, der sie speichert, auswertet und bei Problemen benachrichtigt.

Was steckt drin?

Ein einziger Python-Collector läuft alle 60 Sekunden, sammelt 246 Metriken aus 22 Modulen und schreibt sie in eine JSON-Datei. Der Zabbix Agent liest nur noch — kein Docker-Zugriff, kein sudo, keine Sicherheitslücke.

Das wird überwacht:

  • Postfix: Queue-Größe, Connections, Deferred/Bounced, Log-Analyse (SASL-Fehler, Relay-Denied, TLS-Probleme)
  • Postscreen: Pass/Reject/DNSBL/Pregreet — automatisch erkannt, zeigt 0 wenn nicht aktiv
  • Dovecot: Verbindungen, Login-Fehler, IMAP-Disconnects, Quota-Warnungen
  • Rspamd: Spam vs. Ham, Greylist, Reject-Rate — und neu: Bayes-Training-Status. Zeigt dir ob dein Spamfilter überhaupt trainiert wird (untrained/low/unbalanced/good/excellent)
  • ClamAV: Signatur-Alter, DB-Größe, Version
  • Watchdog: Health-Status für alle 15 Mailcow-Services
  • Docker: CPU, RAM, Restarts pro Container via Low-Level-Discovery
  • TLS/Zertifikate: HTTPS, IMAPS, Submission — Tage bis Ablauf
  • DNS & Security: SPF, DKIM, DMARC plus Security Audit Score (0-7) mit DANE/TLSA, MTA-STS, TLS-RPT und BIMI
  • Mailboxen & Domains: Quota-Nutzung pro Mailbox und Domain (LLD)
  • Backup: Alter, Größe, Anzahl, fehlende Backups
  • Weitere Module: Quarantine, Queue, Sync Jobs, SOGo/Memcached, Updates

Anomalie-Erkennung statt fester Schwellwerte

Klassisches Problem: Ein fester Trigger „Alarm bei >100 Mails“ alarmiert am Montagmorgen grundlos, übersieht aber einen Spam-Angriff am Sonntag.

Die Lösung: Baseline-Trigger mit trendavg(). Das Monitoring lernt automatisch was normal ist und alarmiert erst bei Abweichungen — z.B. 5× mehr Received als üblich oder unter 20% des Wochendurchschnitts (→ DNS-Problem?). Braucht eine Woche Anlernzeit, funktioniert danach ohne manuelle Pflege.

Metrik Spike-Alarm Drop-Alarm
Received >5× Wochenschnitt <20% Wochenschnitt
Rejected >10× Wochenschnitt
Bounced >5× Wochenschnitt
Deferred >5× Wochenschnitt

Security Audit Score

Neben den klassischen DNS-Checks (SPF, DKIM, DMARC) prüft das Monitoring auch die erweiterten Mail-Security-Standards. Pro bestandenem Check gibt es einen Punkt — maximal 7:

Check DNS-Record
SPF TXT auf Domain
DKIM TXT auf dkim._domainkey.domain
DMARC TXT auf _dmarc.domain
DANE/TLSA TLSA auf _25._tcp.hostname
MTA-STS TXT auf _mta-sts.domain
TLS-RPT TXT auf _smtp._tls.domain
BIMI TXT auf default._bimi.domain

Trigger warnt automatisch bei einem Score unter 3.

Bayes-Training im Blick

Viele Mailcow-Nutzer wissen nicht, ob ihr Rspamd-Bayes-Filter überhaupt trainiert wird. Das Monitoring zeigt dir auf einen Blick:

  • Ham/Spam gelernt: Wieviele Nachrichten hat der Filter als Ham bzw. Spam gelernt?
  • Ratio: Ist das Training ausgewogen? (Ideal: 40-60% Ham)
  • Status: untrainedlowunbalancedgoodexcellent

Rspamd empfiehlt mindestens 200 Ham + 200 Spam für zuverlässige Erkennung — ein Trigger warnt automatisch wenn das nicht erreicht ist.

19 Dashboard-Pages

Jedes Modul hat eine eigene Dashboard-Page mit vorkonfigurierten Graphen — vom Mail-Volumen über Bayes-Training bis zu Postscreen-Blocks. Template importieren, Host zuweisen, fertig.

Architektur

systemd Timer (60s) → mailcow-collector.py (ROOT)
                         ↓
                    JSON-Dateien (world-readable)
                         ↓
                    Zabbix Agent 2 → mailcow-reader.sh → JSON lesen

Sauber getrennt: Der Collector braucht Root für Docker/MySQL. Der Zabbix Agent liest nur JSON — kein UnsafeUserParameters, kein AllowRoot. MySQL-Passwörter werden über Environment-Variablen übergeben statt auf der Kommandozeile.

Installation in 5 Minuten

sudo ./install.sh
# Template in Zabbix importieren, Host zuweisen
systemctl start mailcow-monitor.service
systemctl restart zabbix-agent2

Zahlen auf einen Blick

UserParameters 246
Template Items 303 + 21 LLD-Prototypen
Trigger 71 (inkl. 5 Baseline-Anomalie)
LLD Discovery Rules 4 (Domains, Mailboxen, Sync Jobs, Docker)
Dashboard-Pages 19
Collector 1 Python-Script, 1831 Zeilen
Zabbix-Version 7.0

Das Projekt ist Open Source (GPLv3) und auf GitHub verfügbar:

https://github.com/linuser/Mailcow-Zabbix-Monitoring

 

Created with Open Source and ❤ — Alexander Fox | PlaNet Fox

0 CommentsClose Comments

Leave a comment

AncoraThemes © Copyright 2026. All Rights Reserved.