Homeserver 27: Mailversand über Postfix einrichten

Entscheidungen, die zum Zeitpunkt ihres Entstehens wie eine gute Idee aussehen, können sich im Nachhinein als echt blöde Idee entpuppen! So geschehen mit SSMTP. Erinnert ihr euch? Damit mein Server Mails verschicken kann, um mich über diverse Ereignisse zu informieren, musste ja ein SMTP-Dienst installiert werden. Dies habe ich ja in Teil 9 gemacht. Stellt sich raus, SSMTP mag schnell und einfach zu installieren sein, hat aber mitunter gravierende Nachteile.

Ich habe mit dem Kommando „mail“ etwas experimentiert, wie man von der Kommandozeile eine Mail verschicken kann, damit ich es später vielleicht gezielt in Scripts einbauen kann. Und bei dieser Gelegenheit bin ich über eine Unzulänglichkeit des Tools gestoßen, es benötigt dringend eine bestehende Internetverbindung. Ist die Verbindung kurz weg, oder antwortet der Mailserver vom Mailanbieter nicht rechtzeitig, quittiert das Programm „mail“ einfach den Dienst mit einem Fehlercode. Die zu sendende Mail hingegen entfleucht für immer im Datennirvana. Das ist, mit Verlaub, eine echt blöde Idee! Was, wenn mein Server mich über einen RAID-Ausfall informieren will, aber der Mailprovider für 5 Minuten mal nicht erreichbar ist? Genau, ich würde von dem Fehler niemals erfahren! Denn SSMTP hat keine Warteschlange, es drückt die Mail sofort zum SMTP-Server des Mailanbieters, und ist der nicht vorhanden, spielt er beleidigte Leberwurst und wirft die Mail weg!

Das kann ich unter gar keinen Umständen so lassen! Es braucht ja nur mal für ein paar Minuten der Router weg sein, weil er neu startet, die Internetverbindung ist getrennt, der Mailanbieter ist nicht erreichbar, und eine wirklich wichtige Systemmeldung bleibt ungesehen. Daher muss SSMTP weg, und doch Postfix installiert werden. Postfix hat, habe ich schon ausprobiert, eine Warteschlange. Kann eine Mail nicht versendet werden, probiert Postfix es immer wieder in gewissen Abständen. Ich kann die Warteschlange auch anzeigen und den Versand per Befehl gleich auslösen, wenn ich weiß, dass die Internetverbindung wieder in Ordnung ist.

SSMTP deinstallieren

Zunächst mal muss SSMTP vom System runter.

sudo apt-get purge ssmtp

Dies deinstalliert SSMTP und seine Komponenten, löscht aber auch seine Konfigurationsdateien. Möchte man, warum auch immer, die Konfigurationsdateien aber behalten, kann man statt purge auch remove nutzen.

Anschließend sind noch ein paar Pakete übrig, die noch entfernt werden müssen. Diese wurden von SSMTP installiert, werden nicht mehr benötigt aber wurden beim Deinstallieren nicht automatisch entfernt. Dies muss noch manuell nachgeholt werden.

sudo apt-get autoremove

Nun ist SSMTP vom Server runter und Postfix kann installiert werden.

Postfix installieren

Meine Installationsanleitung für Postfix habe ich vom Wiki Ubuntuusers.de. Falls ihr also genauere Infos sucht, könntet ihr dort zu Lesen anfangen.

Zunächst muss Postfix und ein weiteres Paket installiert werden:

sudo apt-get install postfix bsd-mailx

Das Paket bsd-mailx wurde von SSMTP installiert, aber weil wir SSMTP ja deinstalliert haben, hat sich dieses Paket auch von dannen gemacht. Es ist aber notwendig, weil viele Programme und Dienste über dieses Paket mit dem Befehl „mail“ die Mails verschicken. Fehlt dieses Paket, keine Mails vom System, ist gleich ziemlich blöd. 🙂

Laut der Anleitung aus dem UbuntuUsers-Wiki soll man auch libsasl2-modules installieren, brauchen wir aber nicht. Ich bin mir nicht mehr sicher, weil das echt schnell ging, ob dieses Paket von Postfix gleich mitinstalliert wurde, oder ob es schon auf dem System war. Wie auch immer, bei mir war es bereits da.

Konfiguration von Postfix

Nachdem der Befehl zur Installation von Postfix ausgeführt wird, erscheint ein Dialogfeld, in dem man einige kleine Konfigurationsfragen beantworten muss.

Die erste Frage ist, als was Postfix konfiguriert werden soll. Wird das mal ein voller Mailserver, oder nur zum Senden, oder vielleicht nur intern? Ich möchte keinen vollständigen Mailserver betreiben, Postfix soll Mails entgegennehmen und an einen SMTP-Server eines Mailproviders weiterleiten. Also wähle ich hier „Satellite System“ aus.

Als nächstes wird nach einem „Mail Name“ gefragt. Hier ist der Rechnername, in meinem Fall „server01“ bereits vorgegeben. Das akzeptiere ich so.

SMTP Relay Host? Hier kommt der SMTP-Server eines Mailproviders hinein. Da ich eine GMX-Adresse nutze, kommt hier „mail.gmx.net“ rein.

Ich bin mir gar nicht mehr so sicher, was für Fragen da noch kamen, aber die kann man alle mit Enter beantworten. Sollte man einen Fehler gemacht haben, oder aus irgendwelchen Gründen die Konfiguration noch einmal machen wollen, gibt man folgenden Befehl ein:

sudo dpkg-reconfigure postfix

Aber Achtung, hier kommen mehr Fragen. Alle Fragen, die ich hier nicht behandelt habe, könnt ihr so lassen, wie sie vorgegeben sind.

Mailversand einrichten

Damit Postfix jetzt aber Mails versenden kann, muss die Konfiguration noch angepasst werden. Ich werde hier meine Mailadresse für GMX konfigurieren, weil mein Server darüber seine Mails verschicken soll. Weitere Beispiele findet ihr auch im UbuntuUsers Wiki Artikel zu Postfix.

Ich editiere also die Konfigurationsdatei von Postfix:

sudo nano /etc/postfix/main.cf

Folgende Zeilen füge ich am Ende ein:

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_tls_security_level = encrypt

Diese Zeilen bestimmen, dass der SMTP-Server bei GMX eine Authentifizierung benötigt, welcher Absender verwendet werden soll, wo Benutzername und Passwort stehen und dass die Verbindung über SSL bzw. TLS verschlüsselt werden soll.

Nun müssen noch zwei Dateien angelegt werden, die, in der die Zugangsdaten stehen und die, in der die Absenderadressen eingetragen werden.

Zunächst erstellen wir mal die Datei für die Zugangsdaten zum SMTP-Server:

sudo touch /etc/postfix/sasl_password

Warum ich die Datei so erstelle? Nun, im Postfix-Artikel bei UbuntuUsers steht, dass es sonst zu Problemen kommen könnte, daher mache ich das lieber so. Aber nun muss die Datei noch editiert werden.

sudo nano /etc/postfix/sasl_password

Hier kommt jetzt in einer Zeile der SMTP-Server, der Benutzername und das Passwort rein. Bei GMX müsste das also so aussehen:

mail.gmx.net mail_adresse@gmx.de:passwort

Natürlich tragt ihr dort die eigentlichen Werte ein. Und nun speichert ihr die Datei.

GMX akzeptiert nur Absender, mit denen man sich auch anmeldet. Das heißt, alle Nutzer dieses Servers schicken ihre Mails über die gleiche Adresse. Macht ja nix, hier wohnt ja nur root und ich auf dem Server. 🙂

sudo nano /etc/postfix/sender_canonical

Und hier kommen folgende Zeilen rein:

www-data meine_adresse@gmx.de
root meine_adresse@gmx.de
kamil meine_adresse@gmx.de

Nun kann root, der Web-Server und ich Mails verschicken. Aber zuerst sind noch zwei befehle nötig, um aus den eben erstellten Dateien für Postfix lesbare Datenbanken zu machen:

sudo postmap hash:/etc/postfix/sasl_password 
sudo postmap /etc/postfix/sender_canonical

Nun noch den Postfix neu starten:

sudo service postfix restart

Fertig! Ab jetzt kann man Mails verschicken.

Test der Konfiguration

Lasst uns mal eine Testmail verschicken, wenn die ankommt, ist alles in bester Ordnung:

echo Hallo! dies ist ein Test! | mail -s Testmail meine_adresse@gmx.de

Meine Testmail ist angekommen, also funktioniert meine Installation.

Warteschlange

In der Regel braucht ihr euch um die Warteschlange nicht zu kümmern. Sollte mal die Internetverbindung tot sein und einige Mails in der Warteschlange liegen, so versucht Postfix diese von Zeit zu Zeit erneut zu senden. In welchen Intervallen und wo man evtl. das konfigurieren kann, das habe ich leider noch nicht herausgefunden. Was ich aber weiß, weil ausprobiert, wenn die Verbindung zum Internet getrennt ist, und ihr sendet eine Mail mit dem „mail“-Kommando, so gibt es keine Fehlermeldung wie bei SSMTP, sondern die Mail landet in der Warteschlange. Ist die Verbindung zum Internet wieder da, so wird nach einer Weile die Mail verschickt.

Sollte dies aus irgendwelchen Gründen nicht passieren, könnt ihr das auch per Hand tun. Die Warteschlange zeigt ihr so an:

sudo postqueue -p

Sind hier nun also Mails drin, die Verbindung zum Internet funktioniert aber, dann könnt ihr das Senden der Mails anstoßen:

sudo postqueue -f

Das verschickt alle Mails, die gerade in der Warteschlange sind.

Fazit

Als ich SSMTP installiert hatte, wusste ich davon nichts. Und demnächst will ich auch noch eine USV, eine unterbrechungsfreie Stromversorgung, einsetzen. Wenn diese also Mails über ihren Status senden will, während der Strom für den Router gerade weg ist, würde ich die ja nicht sehen. Ist der Strom wieder da, bekomme ich Infos darüber, ob die USV angesprungen ist, ob alles geklappt hat oder ob es zu Problemen gekommen ist. Hätte ich vorher gewusst, dass SSMTP keine Warteschlange hat, ich hätte wahrscheinlich sofort Postfix installiert. Aber naja, das haben wir ja jetzt korrigiert. 🙂