Praxis-Lab: Postfix mit TLS absichern

Eine der grundlegenden Maßnahmen für die Transportsicherheit ist die Bereitstellung eines Zertifikats für den Mailserver, damit dieser über TLS kommunizieren kann. In diesem Praxis-Lab erstellst du für Testzwecke der Einfachheit halber ein Self-signed Certificate (in der Praxis benötigst du für den Mailserver natürlich ein echtes, von einer offiziellen CA signiertes Zertifikat). Dieses Zertifikat stellen wir Postfix bereit und konfigurieren den Mailserver dafür, das Zertifikat bereitzustellen.

Nach Abschluss dieses Praxis-Labs weißt du:

  • Wie du ein Test-Zertifikat für den Mailserver erstellst
  • Wie du den Mailserver konfigurierst, um das Zertifikat bereitzustellen und via TLS zu kommunizieren
  • Wie du die Zertifikatsausgabe prüfen kannst
  • Wie du die Ports 465/tcp und 587/tcp aktivieren kannst, um mit implizitem TLS und STARTTLS zu arbeiten

Voraussetzungen

Wir arbeiten wieder mit dem Mailserver Postfix auf dem Debian-Multiserver in unserem CyberSec-Lab. Wir gehen davon aus, dass du die Grundkonfiguration des Mailservers, wie im Kursmodul B0 vorgestellt, erstellt hast und der Server aktiv läuft. Prüfe dies durch Eingabe von systemctl status postfix.

📌 Wichtig: Alle Arbeiten auf der Kommandozeile im Terminal finden im Kontext von root statt. Der erste Befehl nach dem Öffnen des Terminals lautet also: su -, gefolgt von der Eingabe des Root-Passwortes.

Das Zertifikat erstellen

Wie schon gesagt, gehen wir hier vereinfacht vor und erstellen mit Hilfe von openssl ein Self-Signed Certificate. Dazu benötigen wir zunächst ein Unterverzeichnis in der Postfix-Konfiguration, um die Zertifikate dort abzulegen. Dies erreichst du durch Eingabe des folgenden Befehls in der Kommandozeile:

mkdir -p /etc/postfix/tls

Der nächste Schritt ist die Erstellung des Zertifikats. Der passende Befehl hierzu lautet folgendermaßen:

openssl req -x509 -newkey rsa:2048 -nodes \
-keyout /etc/postfix/tls/mail.key \
-out /etc/postfix/tls/mail.crt \
-days 365 \
-subj "/CN=mail.cybersec-lab.local"

Damit der Private Key mail.key akzeptiert wird, müssen wir die Rechte entsprechend setzen. Das erreichst du durch den folgenden Befehl:

chmod 600 /etc/postfix/tls/mail.key

Postfix konfigurieren

Nun müssen wir Postfix sagen, dass er ein Zertifikat hat und wo es liegt. Öffne /etc/postfix/main.cf mit dem folgenden Befehl:

nano /etc/postfix/main.cf

Trage die folgenden beiden Zeilen ans Ende der bisherigen Konfiguration ein:

myhostname = mail.cybersec-lab.local
mydomain = cybersec-lab.local
myorigin = $mydomain
mydestination = cybersec-lab.local, localhost, localhost.localdomain
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 192.168.68.0/22, 127.0.0.0/8
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
relayhost =
home_mailbox = Maildir/

#TLS-Zertifikat
smtpd_tls_cert_file = /etc/postfix/tls/mail.crt
smtpd_tls_key_file = /etc/postfix/tls/mail.key

Speichere und beende den Editor mit STRG+S und STRG+X. Nun müssen wir noch die andere Konfigurationsdatei von Postfix namens master.cf anpassen. Öffne sie wieder mit nano:

nano /etc/postfix/master.cf

Diese Datei enthält grundlegende Servereinstellungen. Die meisten Zeilen sind einkommentiert und damit nicht aktiv. Zwei davon aktivieren wir jetzt, wie in der folgenden Abbildung gezeigt. Achte darauf, dass du die Zeile, die mit submissions beginnt – nicht mit submission in der Einzahl – aktivieren musst:

Für die Submissions – das ist der Mailversand vom MUA, also dem Mailclient – aktivieren wir hier TLS als Wrapper, also als Schutz für die Klartext-Kommunikation. Dadurch wird Port 465/tcp von Postfix gebunden und implizites TLS auf diesem Port aktiviert. Speichere auch diese Änderung und verlasse den Editor.

Nun wird es Zeit, Postfix neu zu starten, damit die neue Konfiguration eingelesen wird:

systemctl restart postfix

Serverseitig sind wir nun fertig. Lass uns schauen, wie sich unsere Konfigurationsänderungen auswirken.

Die Zertifikatsausgabe testen

Zunächst prüfen wir mit dem folgenden Befehl, ob der Port 465/tcp auf dem lokalen System aktiv ist:

sudo ss -tulpen | grep 465

Die Ausgabe stellt sich folgendermaßen dar:

Jetzt kommt der spannende Test: Wie sieht die Ausgabe aus, wenn wir uns mit einem TLS-fähigen Client verbinden? Dazu nutzen wir openssl mit dem Parameter s_client folgendermaßen:

openssl s_client -connect localhost:465

Im Ergebnis erhalten wir eine detaillierte Ausgabe der Antwort des Servers inklusive seines Zertifikats:

Wie du siehst, wird das Zertifikat zuerst ausgegeben, bevor der Server sich mit 220 mail.cybersec-lab.local ESMTP Postfix vorstellt und der Client sein Anliegen vortragen kann. Sein erster Befehl lautet ehlo client.local, das bedeutet folgendes:

  • ehlo – aktiviert ESMTP, ein helo würde Standard-STMP aktivieren
  • client.local – ist der Name des Clients, er ist grundsätzlich frei wählbar

Die Antwort des Servers ist vom Typ 250, er listet die unterstützten ESMTP-Befehle auf:

Es fällt auf, dass STARTTLS nicht in der Liste enthalten ist. Das liegt zum einen daran, dass auf Port 465/tcp keine Option für STARTTLS vorhanden ist – hier wird obligatorisch über TLS kommuniziert. Zum anderen müssen wir die Postfix-Konfiguration noch etwas anpassen. Ergänze die folgende Zeile in /etc/postfix/main.cf:

smtpd_tls_security_level = may

Dadurch wird für Port 25/tcp STARTTLS aktiviert. Dies kannst du erneut mit telnet prüfen, achte aber darauf, dass Postfix zuvor mit systemctl restart postfix neu gestartet werden muss:

Wie du in der Abbildung unten erkennen kannst, ist Port 587/tcp für die Submission mit STARTTLS jedoch noch nicht erreichbar. Dazu müssen wir erneut in die Datei /etc/postfix/master.cf gehen und dort dieses Mal die Zeile aktivieren, die mit submission (nicht: submissions) beginnt. Zudem aktivieren wir -o smtpd_tls_security_level=encrypt, um TLS zu erzwingen.

Der Client hat damit zwar die Möglichkeit, sich über den Mail-Submission-Port 587/tcp zu verbinden und hätte dort grundsätzlich die Wahl zwischen Klartext und STARTTLS, aber durch diese Konfiguration wird keine Verbindung ohne STARTTLS akzeptiert – dies entspricht Best Practice.

Nachdem du die Änderungen gespeichert, den Editor verlassen und Postfix neu gestartet hast, kannst du die Verbindung auf Port 587 testen:

Wie du siehst, schlägt der Versuch fehl, nach der Verbindungsaufnahme und dem ehlo sofort eine Mail zustellen zu wollen. Der Server fordert uns auf, zunächst mit STARTTLS eine gesicherte Verbindung aufzubauen.

Damit hast du nun gelernt, wie du TLS für Postfix konfigurieren kannst und weißt, wie du die Funktionalität mit Bordmitteln einfach prüfen kannst. In der Realität sind natürlich andere Mailserver (MTAs) und externe Mailclients (MUAs) involviert, die eine entsprechende Konfiguration erfordern, um die Verbindung via TLS bedienen zu können.

Nach oben scrollen