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:
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.
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
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.
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 aktivierenclient.local – ist der Name des Clients, er ist grundsätzlich frei wählbarDie 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.