In meinem heutigen Blog möchte ich dokumentieren und beschreiben, wie man via Postfix ein SMTP-Relay-Server für das Homelab einrichtet. Ein SMTP-Relay-Server ist im Prinzip eine Art Weiterleitung. Damit habe ich im Homelab, sagen wir in einem sonst gesicherten und abgeschirmten Bereich, eine Sammelstation für ausgehende E-Mails. Alle anderen Services im Homelab die beispielsweise Statusmeldungen und Reports per E-Mail versenden sollen, müssen dann nicht mehr aufs Internet zugreifen um zum E-Mail-Provider zu gelangen, sondern verwenden den internen Postfix-Server um E-Mails zu versenden. Und vorallem muss ich als Administrator zukünftig auch keine Benutzernamen und Passwörter mehr wissen.
Als Ausgangssituation für unsere Postfix-Installation nehme ich eine Virtuelle Maschine oder ein LXC-Container mit Alpine Linux. Alpine ist in der Version 3.20 installiert, besitzt eine funktionierende Internetverbindung und wir sind als root-User eingeloggt. Ansonsten ist das OS unangetastet.
Als E-Mail-Provider verwenden wir wir in unserem Beispiel ein GMail-Konto.
Updates und Paketinstallation
Wie bei jeder neuen VM, sollte zuerst das Betriebssystem auf den neusten Stand gebracht werden. Anschließend installieren wir das Paket postfix
.
apk update && apk upgrade
apk add postfix
Als kleine Randnotiz: Ich verwende den Terminal-Texteditor vi zum bearbeiten von Konfigurationsdateien. Wenn du keine Erfahrung mit vi hast, kannst du hier noch nano für leichteres Bearbeiten nachinstallieren: apk add nano
E-Mail-Provider Zugangsdaten für Postfix vorbereiten
Da wir in unserem Beispiel ein GMail-Konto verwenden möchten, benötigen wir zuerst ein spezielles App-Passwort, da Google die unsichere Anmeldung mit Benutzername:Passwort nicht mehr zulässt und überlicherweise eine gesonderte Authentifizerung erfordert. App-Passwörter können erstellt werden, sobald für das GMail-Konto eine 2FA-Methode hinzugefügt wurde.
Wir haben nun unser App-Passwort und es kann weitergehen. Im Verzeichnis /etc/postfix/
legen wir einen neuen Ordner sasl an.
mkdir /etc/postfix/sasl
Und hier erstellen wir eine neue Datei sasl_passwd mit folgendem Inhalt:
[smtp.gmail.com]:587 benutzername@gmail.com:apppassword
Nun verwenden wir das Programm postmap um diese Passwort-Datei in eine sogenannte Lightning Memory-Mapped Database (LMDB) umzuwandeln:
postmap lmdb:/etc/postfix/sasl/sasl_password
Hinweis: Während meiner Recherchen im Internet bin ich überall auf ein anderes Mapping-Verfahren gestoßen, das aber in der aktuellen Version von Postfix aufgrund von Lizenzproblemen wohl nicht mehr so ohne weiteres verwendbar ist. Daher haben wir bei postmap den Parameter lmdb
verwendet.
Jetzt haben wir zwei Dateien in dem Verzeichnis: sasl_passwd und sasl_passwd.lmdb. Beide Dateien werden wir nun ausschließlich nur noch für root zugänglich machen:
chmod 0600 /etc/postfix/sasl/*
Damit hätten wir unsere Zugangsdaten für GMail in Postfix hinterlegt und gesichert.
Postfix-Konfiguration
Nun werden wir Postfix selbst konfigurieren, damit es weiß was wir überhaupt wollen. Im ersten Schritt wechseln wir ins Verzeichnis /etc/postfix
und führen newaliases aus.
cd /etc/postfix
newaliases
Anschließend bearbeiten wir die Datei main.cf und fügen folgende Zeilen ein bzw ändern diese ab:
myhostname = mein-postfix-server.sub.domain
myorigin = $myhostname
relayhost = [smtp.gmail.com]:587
mynetworks = 192.168.1.0/24
# Enable SASL authentication
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = lmdb:/etc/postfix/sasl/sasl_passwd
smtp_tls_security_level = may
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
# Log file
maillog_file = /var/log/postfix.log
Achtung: Die Zeile „mynetworks“ gibt an, welche Clients in deinem Netzwerk den Postfix verwenden dürfen. Hier musst du dein gewünschtes Netzwerk angeben. Wenn du mehrere Netzwerke hast, kannst diese mit einem Komma getrennt hier auflisten. Mehr Informationen dazu findest du hier.
Postfix-Service aktivieren und starten
rc-update add postfix
rc-service postfix start
Mit diesen zwei Befehlen fügen wir Postfix zu OpenRC hinzu und sorgen dafür das es beim Systemstart mit ausgeführt wird. Außerdem starten wir Postfix auch gleich manuell einmal.
Testmail versenden
Wir können nun mit sendmail die Funktion unseres Postfix-Servers testen. Die Bedienung von sendmail ist etwas gewöhnungsbedürftig: Das Programm aktzeptiert Eingaben solange bis man STRG-D drückt, um die Mail zu versenden.
sendmail empfaenger@domain.de<ENTER>
To: empfaenger@domain.de<ENTER>
Subject: Deine Betreffzeile hier<ENTER>
Dein E-Mail Text hier. Du kannst hier auch mehrzeilig schreiben.<ENTER>
Der Druck der Enter-Taste fügt nur eine weitere Zeile ein und versendet die E-Mail nicht sofort.
Anschließend mit STRG+D die E-Mail versenden. In der Log-Datei /var/log/postfix.log
kann ich nun nachlesen, ob die E-Mail erfolgreich versand wurde und wenn das so ist, dann dürfte einige Sekunden später die E-Mail im Postfach der Empfänger-Adresse angekommen sein.
Postfix in der Praxis einsetzen
Ein Beispiel für Postfix ist die Status-Notification von Proxmox. In den Datacenter-Einstellungen gehe ich auf „Notifications“ und füge eine neue SMTP-Notification hinzu. Als Server verwende ich hierzu die FQDN oder die IP-Adresse des Postfix-Servers. Das Häkchen „Authenticate“ nehmen wir heraus, das brauchen wir hier nicht mehr. Wir verwenden Netzwerkintern keine Encryption und daher den SMTP-Port 25. Anschließend noch die Absender-Adresse eingeben und die Empfänger aus der Liste wählen und das ganze bestätigen. Nun kann ich in der Notification-Übersicht meinen neuen Eintrag noch auf Funktion testen.
Und das wars. Damit haben wir einen funktionierenden SMTP-Relay-Server im Heimnetz konfiguriert. Zwei große Vorteile sind, das wir
1) bei Passwortwechsel im E-Mail-Provider nur die sasl_passwd
-Datei neu konfigurieren müssen
2) bei E-Mail-Provider-Wechsel nur die sasl_passwd
-Datei und main.cf
-Datei rekonfigurieren müssen.
Alle anderen Services in unserem Homelab, die E-Mails versenden, müssen nicht mehr umkonfiguriert werden. Das ist doch was, oder?