Wie ich meinen Homeserver Emails senden lasse

Ausgangspunkt ist mein Homeserver, eine DELL Optiplex 3060 Micro Workstation, auf der Ubuntu Server 22.04 läuft und die allerlei Dienste zur Verfügung stellt. Zur besseren Überwachung möchte ich, dass ich in bestimmten Fällen eine Email gesendet bekomme. Zum Beispiel wenn relevante Systemupdates anstehen.

Dazu habe ich mich weitestgehend an diesen Guide gehalten. Das System braucht für das über das eigene System hinausgehende Versenden vom Emails einen Mail Transfer Agent, davon gibt es viele, Postfix ist ein weit verbreiteter und wird hier verwendet.

sudo apt install mailutils

Damit wird Postfix mit einigen Utilities installiert. Es folgt ein Installationsdialog. Als „General type of configuration“ habe ich „Satellite System“ ausgewählt.

Im nächsten Schritt brauche ich ein Emailkonto, über das die Emails versendet werden. Ich betreibe einen eigenen Webserver, dort habe ich mir also ein einfaches Konto eingerichtet. Der SMTP Server läuft unter Port 587.

Nun braucht Postfix die Zugangsdaten zu dem Konto. Der Dateiname ist mein frei wählbar:

sudo nano /etc/postfix/sasl_passwd_root

Der Inhalt der Datei sollte so aussehen:

[mein.mailserver.de]:587 username@mailserver.de:passwort

Danach:

sudo postmap /etc/postfix/sasl_passwd_root

Jetzt müssen die Kontodaten noch abgesichert werden:

sudo chown root. /etc/postfix/sasl_passwd_root
sudo chmod 600 /etc/postfix/sasl_passwd_root
sudo chown root. /etc/postfix/sasl_passwd_root.db
sudo chmod 600 /etc/postfix/sasl_passwd_root.db

In der Datei /etc/aliases können Aliase erzeugt werden, so dass zum Beispiel Mails für den User marcel an root weitergeleitet werden.

sudo nano /etc/aliases

postmaster:    root
marcel:    root

sudo newaliases

In der Datei /etc/postfix/virtual wird definiert, an welches externe Ziel die Emails für root gesendet werden sollen.

sudo nano /etc/postfix/virtual

root dein@mailpostfach.de

sudo postman /etc/postfix/virtual

Hier weiche ich jetzt von dem Guide ab. Denn moderne Emailserver prüfen auch, ob das FROM: im Emailheader mit der Adresse der genutzten Emailkontos übereinstimmt. Das dürfte in den meisten Fällen in diesem Szenario nicht der Fall sondern etwas wie root@localhost sein. Der Emailserver wird die Mail mit dieser oder einer ähnlichen Meldung ablehnen:

sudo less /var/log/mail.log

Dec 21 17:24:21 ubuntu-base postfix/smtp[1730902]: 0A7A91241E72: to=<email@domain>, orig_to=<root>, relay=mailserver.tld[public-ip]:587, delay=0.46, delays=0.04/0.06/0.31/0.06, dsn=5.7.1, status=bounced (host mailserver.tld[public-ip] said: 553 5.7.1 <root@localhost>: Sender address rejected: not owned by user emailkonto (in reply to RCPT TO command))

Die Lösung. Wir brauchen die Datei /etc/postfix/generic, in der der lokale Nutzername zur verwendeten öffentlichen Emailadresse gemapt wird. Die Emailadresse entspricht dem Emailkonto, dass weiter oben angelegt wurde.

sudo nano /etc/postfix/generic

root@localhost username@mailserver.de
@localhost username@mailserver.de

sudo postmap /etc/postfix/generic

Nach diesen Vorarbeiten muss die Konfiguration zusammengetragen werden. Dazu wird die Datei /etc/postfix/main.cf bearbeitet. Etwaig fehlende Parameter können einfach nachgetragen werden.

sudo nano /etc/postfix/main.cf

relayhost = [mein.mailserver.de]:587
smtp_tls_security_level = may
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd_root

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
virtual_alias_maps = hash:/etc/postfix/virtual

smtp_generic_maps = hash:/etc/postfix/generic

Da Postfix auf dem Homeserver keine Emails empfangen soll werden die Optionen des folgenden Parameters entfernt:

mydestination =

Mein Homeserver hat intern leider kein ipv6, deshalb habe ich folgende Option setzen müssen:

inet_protocols = ipv4

Als Abschluss muss der Postfix-Dienst neugestartet werden.

sudo systemctl restart postfix

Eine Test-Email lässt sich folgendermaßen kreieren.

echo "dies ist eine testnachricht" | mail -s "test" meine@adresse.de

Photo by Gabriel Heinzer on Unsplash