Mailserver 9 von 10: Mailqueue überwachen mit mailqueue.phs

Jahrelang habe ich mich davor gedrückt, doch endlich ist es geschafft - die Einrichtung eines eigenen Mailservers. In einer kleinen Artikelserie möchte ich einmal meine Erfahrungen und Konfigurationsschritte festhalten. Diese Serie basiert auf zahllosen Tutorials, Best Practices, Gesprächen mit Mailserver-Betreibern, aus endlosem Dokumentationen lesen und dem Wissen der Bücher "Postfix" von Kyle D. Dent und "Postfix - Einrichtung, Betrieb und Wartung" von Ralf Hildebrandt und Patrick Ben Koetter. Vielleicht werden sie ja nützlich für andere Leute sein, die das gleiche erreichen wollen.

Doch eines vorab: Die Einrichtung und der Betrieb eines Mailservers ist eine komplexe Sache. Klar, die Software lässt sich schnell installieren, doch fertig ist man danach noch lange nicht, wenn man ernsthaft damit arbeiten möchte.

Der Fahrplan der Artikelserie:

  1. Einleitung
  2. Mailempfang und Mailversand mit Dovecot und Postfix
  3. Virenprüfung mit ClamAV
  4. Mailsignatur mit OpenDKIM
  5. Spamprüfung mit SpamAssassin
  6. Mailabruf mit Dovecot
  7. Mailboxen konfigurieren mit mailconf.phs
  8. Mails synchronisieren mit mailsync.phs
  9. Mailqueue überwachen mit mailqueue.phs
  10. SpamAssassin anlernen mit maillearn.phs

Jeder, der ernsthaftes Interesse daran hat, einen Mailserver zu betreiben, sollte sich darauf gefasst machen, dass dadurch auch wiederkehrender Verwaltungsaufwand entsteht. Einer der ersten Punkte, denen ich mich dabei zugewandt habe, ist das Monitoren von deferred Nachrichten.

Deferred Nachrichten sind E-Mails, die aus irgendeinem Grund nicht zugestellt werden konnten und deshalb im Mailserver festhängen. Das kann z.B. passieren, wenn eine Mail von extern zwar empfangen wurde, aber nun nicht abgeliefert werden kann. Eine andere Möglichkeit ist, dass eine Mail verschickt werden sollte, der Zielserver jedoch nicht erreichbar ist. Um solche E-Mails muss man sich kümmern und zusehen, dass die Deferred-Queue nicht unnötig anwächst.

Zum Betrachten der Mailqueue bietet Postfix das Tool "postqueue", mit dem man sich einen Status über die einzelnen aktuell verarbeiteten Nachrichten ausgeben lassen kann:

1
sudo postqueue -p

Jedoch wollen wir uns ja nicht regelmäßig auf den Servern einloggen und den Status aktiv prüfen. Stattdessen wollen wir lieber informiert werden, wenn etwas vorgefallen ist: Genau aus diesem Grund habe ich mir das Script "mailqueue.phs" geschrieben.

Die Installation ist wie immer recht einfach: Wir benötigen PHP - mit CURL-Unterstützung - und Mercurial, um das entsprechende Script zu laden:

1
2
sudo apt-get update
sudo apt-get install php5-cli php5-curl mercurial

Anschließend können die benötigten Repositories abgerufen werden:

1
2
3
sudo hg clone https://hg.nhg.name/mailqueue/
sudo hg clone https://hg.nhg.name/pushinfo/
sudo hg clone https://hg.nhg.name/unchroot/

Bei dem Benachrichtigungsweg habe ich mich wieder für Pushinfo und den tollen Service von PushOver.net entschieden. Sobald ihr Pushinfo installiert und konfiguriert habt, sagt uns die README von mailqueue.phs, was wir weiter zu tun haben:

1
2
3
4
5
6
7
8
README:

1.) Copy all mailqueue.* files to a location that can not be accessed remotely.
2.) Install https://hg.nhg.name/pushinfo/
3.) Install https://hg.nhg.name/unchroot/
4.) Configure mailqueue.conf.phs and make sure that all paths are accessible.
5.) Configure CRON to call mailqueue.phs regularly:
    */5 * * * * root php /path/to/mailqueue.phs >/dev/null 2>&1

Die Konfiguration in der Datei "mailqueue.conf.phs" ist sehr übersichtlich. Wir müssen definieren, in welchem Ordner die deferred Nachrichten von Postfix liegen, wo die Nachrichten für Pushinfo abgelegt werden müssen, wo mailqueue.phs seinen Status ablegen kann, wo die Lockdatei hingeschrieben wird, um mehrfache Ausführungen zu verhindern und als welcher Nutzer der Status und die Pushinfo-Nachrichten geschrieben werden sollen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

  # defines where the deferred mails of postfix are located
  # do not forget the trailing slash
  define("POSTFIX_DEFERRED", "/var/spool/postfix/deferred/");

  # defines where the push notifications are located
  define("PUSHINFO_PATH", "/srv/pushinfo/messages/mailqueue.phs");

  # defines where the script stores its status
  define("STATUS_PATH", "/srv/mailqueue/status/status");

  # define timeout for PHP execution (as int)
  # alternatively defines a lock file (as string)
  define("TIMEOUT", "/srv/mailqueue/status/lock");

  # defines the user the script shall run as
  define("PROCESS_USER", "mailqueue");

  # defines the group the script shall run as
  define("PROCESS_GROUP", "mailqueue");

  # defines the push message content
  define("PUSHINFO_MESSAGE",      " deferred messages found: ");
  define("PUSHINFO_MESSAGE_NEW",  " new, ");
  define("PUSHINFO_MESSAGE_OLD",  " old, ");
  define("PUSHINFO_MESSAGE_GONE", " gone");

?>

Wenn man alles eingerichtet hat, erhält man bei einem potentiellen Problemfall wunderschöne Push Notifications direkt auf sein Handy und kann angemessen auf alles reagieren. 🙂

mailqueue.phs Push Notification via Pushinfo und PushOver.net

mailqueue.phs Push Notification via Pushinfo und PushOver.net

Da wir gerade beim Thema Pflege sind: Ihr solltet zusehen, dass ihr euch um die Reputation eures Mailservers kümmert. Ein paar Schritte dahin hatten wir bereits unternommen. Zwei weitere würde ich euch noch empfehlen:

  1. Registriert euren Server auf DNSWL.org. Dabei handelt es sich um einen Whitelisting-Dienst, was bedeutet, dass andere Mailserver euch potentiell mehr vertrauen, wenn euer Mailserver in deren Liste aufgeführt wird. Die Eintragung ist kostenlos.
  2. Prüft regelmäßig, ob euer Server auf eine Blacklist geraten ist. Das kann - sollte es nicht behoben werden - dazu führen, dass euer Server keine E-Mails an andere Empfänger zustellen darf. Auf DNSBL.info könnt ihr z.B. prüfen lassen, ob euer Server in einer von (derzeit) 67 Blacklists aufgeführt ist.

Haltet euren Mailserver sauber, dann werdet ihr lange Freude an ihm haben. 🙂

Monitorende Grüße, Kenny

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.