Alle Jahre wieder will mein kleiner Raspberry nicht mehr und ich muss ihn neu aufsetzen. Unter anderem benötige ich für ein kleines Monitoring-Skript die Möglichkeit, aus einem Bash-Skript heraus Mails zu versenden. Da ich meine Webseite bei all-inkl.de hoste, habe ich dort natürlich auch Zugriff auf einen Mailserver, den ich zum Versenden dieser Mails nutzen möchte. Den all-inkl Server benutze ich dann als Relay, d.h. der Raspberry sendet die Mails nicht direkt an den Empfänger, sondern benutzt den Mailserver von all-inkl zum Versenden. Ich bin kein Experte in Sachen smtp (Simple Mail Transport Protokoll), also dem Protokoll mit dem der Raspberry mit dem Mailserver kommuniziere, also bin ich auf die Quellen im Netz angewiesen, die aber jedesmal einige Fragen offen lassen, die ich hiermit endlich mal dokumentiere.
1.Installation der benötigten Software
Ich benutze Postfix als MTA (Mail Transfer Agent) und das Linux-Programm /usr/bin/mail.
Ein MTA ist ein Dienst, der die auf dem lokalen Rechner erstellten Mails an den eigentlichen Mailserver weiterleitet und sich dabei dem smtp bedient. /usr/bin/mail ist das Programm, mit dem die Mails auf der Kommandozeile erstellt und an den Mailserver weitergeleitet wird.
Beides kann mit folgendem Aufruf installiert werden:
sudo apt install mailutils
2. Konfiguration
Nach der Installation startet sofort die ersten Konfigurationschritte von Postfix mit folgendem Bildschirm:
Mit einem Tab erreicht man den Ok-Button, mit Return gelangt man zum nächsten Bildschirm:
Hier streiten sich die Geister, ob man „Internet Site” oder „Internet mit Smarthost” einträgt. Ich habe bisher nur mit dem Eintrag „Internet Site” Erfolg gehabt.
Der nächste Bildschirm ist dann der letzte in dieser Reihe. Hier ändere ich am vorgegebenen Eintrag nichts. In meinem Fall ist das „ubuntu”, weil das der Name meines Raspberries ist.
Nach Bestätigung startet eine Installationsroutine, die noch weiter Programme und Bibliotheken installiert und sowie einige weitere Konfigurationen vornimmt.
Für die spätere Authentifizierung am Mailserver wird noch ein weiteres Modul benötigt, das ggf. noch nicht installiert ist, daher sollte der folgende Befehl ausgeführt werden. Bei meinem Ubuntu 23.04 kam dann aber die Meldung, dass schon alles in der neuesten Version vorhanden installiert war.
sudo apt install libsasl2-modules
Die übrigen Einstellungen werden in der Datei /etc/postfix/main.cf vorgenommen. Es empfiehlt sich, vor dem Editieren ein Backup der Datei anzulegen, falls man wieder von vorne anfangen muss.
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.back
sudo nano /etc/postfix/main.cf
Ich füge den unteren Codeblock in die Zeile „relayhost =” ein, natürlich mit den für meinen Mailserver angepassten Werten.
relayhost = mailserver.com:25
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
3. Letzte Schritte
Nun muss Postfix der Mailserver und zusammen mit Mailbenutzer bekannt gemacht werden. Dazu muss eine Datei asl_passwd erstellt werden.
sudo nano /etc/postfix/sasl_passwd
Als Inhalt wird dann folgendes eingefügt:
mailserver.com:25 user:passwd
Anschließend wird diese Datei in ein spezielles Format konvertiert und die beiden Dateien mit chmod 660 geschützt.
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
Zuletzt müssen die lokalen Benutzer des Raspberries auf den Mailaccount gemappt werden. Da ich nur einen externen Mailaccount nutze, ist das recht einfach. Ich habe keinen Ahnung, wie die Konfiguration aussehen muss, wenn ich für verschiedene Benutzer auf dem Raspberry auch verschiedene Accounts auf dem Mailserver nutzen möchte.
sudo nano /etc/postfix/sender_canonical
Ich hier trage hier neben meinen lokalen Benutzer auch root ein, für den Fall, dass root aus irgendeinem Admin-Skript heraus eine Mail verschicken möchte.
lokaleruser user@mailserver.com
root user@mailserver.com
Wie schon bei den Zugangspasswort müssen noch folgende Befehle ausgeführt werden:
sudo postmap /etc/postfix/sender_canonical
sudo chmod 0600 /etc/postfix/sender_canonical /etc/postfix/sender_canonical.db
Nach einem Neustart des Postfix-Dienst, sollte das versenden von Mails über die Kommandozeile funktionieren.
sudo systemctl restart postfix
4. Ein erster Test
Vor dem Absenden der ersten Mail noch ein Tipp, um zu sehen, was Postfix so anstellt um die Mail weiterzuleiten, einfach in einem extra Terminalfenster folgenden Befehl eingeben. Eigentlich sollten keine Fehler auftreten, aber wenn doch, kann man diese live im Log verfolgen.
tail -f /var/log/mail.log
Der erste Test erfolgt dann einfach mit dem Befehl:
mail -s "Dies ist eine Testmail" empfänger@example.com
Nach einem Return wird nach dem „cc” gefragt, die Abfrage auch einfach mit Return bestätigen. Dann eventuell noch einen kleinen Text eingeben und mit Ctrl‑D abschicken. Ich habe mal in alter Zeit auch auf der Kommandozeile Mails lesen, schreiben und verschicken müssen, da war das Programm aber so eingestellt, das ein „Punkt” am Anfang der Zeile das verschicken auslöse. Das läßt sich irgendwo so einstellen, aber mir erscheint Ctrl‑D mittlerweile sicherer.
Das war’s, eine Mail kann so von einem lokalen Ubuntu-Rechner per Kommandozeile oder auch per Shellscript über einen externen Mailserver verschickt werden.
Die Übertragung zum Server scheint auch sicher zu sein, denn wenn ich in der main.cf die Zeile „smtp_tls_loglevel = 1” einfüge, erscheint im Logfile die Meldung „Trusted TLS connection established”. Dies gilt zumindest für meinen all-inkl.de Mailserver.
Diese Vorgehensweise habe ich mir aus verschiedenen Anleitungen zusammenbastelt, falls ich hier oder da noch eine Verbesserung einbauen könnte, bin ich für jeden Hinweise dankbar.
Da Postfix im lokalen Netzwerk läuft, kann eine Kommunikation vom Mailserver nicht direkt mit Postfix angestoßen werden, daher kann Postfix nicht zum Empfangen von Mails verwendet werden, was aber für meinen Anwendungsfall nicht notwendig ist. Eine Lösung für die auch das empfangen von Mails vom Mailserver ermöglicht kann mit fetchmail realisiert werden.
Schreibe einen Kommentar