Wie wir beim Einsatz von Postfix vermeiden, dass E‑Mails in den nicht überwachten Mailboxen von Systembenutzern versauern.
Anforderungen
Es gibt Software, die ist auf fast jedem Linux-Server installiert. Irgendein Cron-Daemon dürfte dazu zählen. Und da die Ausgabe von Cronjobs per E‑Mail verschickt wird, zieht das automatisch einen MTA nach sich.
Auf unseren eigenen Systemen verwenden wir dafür häufig Nullmailer, da alle E‑Mails vom System eh an die selbe Adresse unseres Ticketsystems geschickt werden sollen. Aber auf unseren Managed Servern sind die Anforderungen etwas komplexer:
- Auf manchen Servern sollen einzelne Cronjobs ihre Ausgabe an eine (externe) Adresse der Kundin schicken (via MAILTO=mail@example.com im Cronjob).
- Auf manchen Servern sollen alle Cronjobs eines Systemaccounts ihre Ausgabe an die Kundin schicken. Idealerweise kann die Kundin die Adresse, an die dies geschehen soll, selbst festlegen, sogar ohne root-Rechte.
- Nichts soll lokal (z.B. nach /var/mail) zugestellt werden, da niemand diese Postfächer liest.
Lösung: Postfix
Zu diesem Zweck installieren wir auf allen System den MTA unserer Wahl: Postfix. Natürlich nutzen wir nur einen Bruchteil dessen Funktionalität. Die ersten beiden Anforderungen werden dank Unterstützung von .forward-Dateien von Postfix erfüllt. Die dritte erfordert jedoch einen kleinen Kniff in der /etc/postfix/main.cf:
forward_path = $home/.forward${recipient_delimiter}${extension}, $home/.forward, /etc/forward
Damit wird nicht nur in ~/.forward nach einer externen Adresse für einen Systemaccount gesucht, sondern auch in /etc/forward. Hier können wir nun die Adresse unseres Ticketsystems eintragen und so sicher gehen, dass keinerlei E‑Mails lokal zugestellt werden (und dadurch effektiv verloren gehen), ohne dabei aber den Accounts die Möglichkeit zu nehmen, ihre eigenen Weiterleitungsadressen festzulegen!
Ausblick
Inzwischen werden Cronjobs vielerorts nach und nach durch systemd Timer Units ersetzt. Hier sind fehlgeschlagene Ausführungen über den Status der dazugehörigen Service Unit ersichtlich. Da wir den Status aller systemd Units überwachen bekommen wir so auch fehlgeschlagene Ausführungen von Timer Units mit. Damit könnten perspektivisch der Cron Daemon und damit auch der MTA auf vielen Systemen überflüssig werden.