In diesem Artikel halte ich fest, wie ich Postfix unter RHEL 7 für SMTP-Authentifizierung an einem relayhost über STARTTLS mit den Authentifizierungsmethoden PLAIN und LOGIN konfiguriert habe. Da ich kein Postfix-Experte bin, mag dies weder der einzige noch der beste Weg sein, doch habe ich das Ziel erreicht. Verbesserungsvorschläge nehme ich gerne in den Kommentaren entgegen.
Ihr findet hier vor allem keine Schritt-für-Schritt-Anleitung und kein ausführliches Tutorial. Seid also nicht enttäuscht, wenn ihr auch die am Ende des Artikels verlinkten Quellen zu Rate ziehen müsst.
Der Artikel gliedert sich in die folgenden Abschnitte:
- Test der Benutzerzugangsdaten über STARTTLS
- Installation fehlender Pakete und Konfiguration von Postfix
Test der Benutzerzugangsdaten über STARTTLS
Für die SMTP-Authentifizierung am relayhost werden Benutzername und Passwort benötigt. Bevor ich Postfix (ver)konfiguriere, überprüfe ich, ob der SMTP-Server diese Zugangsdaten akzeptiert. Da die Zugangsdaten über STARTTLS übertragen werden, prüfe ich, ob der SMTP-Server dies überhaupt unterstützt. Im folgenden Listing wird der TCP-Port 25 verwendet. In Abhängigkeit zur konkreten Umgebung kann auch ein anderer Port wie z.B. 587 in Frage kommen.
# telnet relayhost.example.com 25
Trying 192.168.0.1...
Connected to relayhost.example.com.
Escape character is '^]'.
220 ESMTP Messaging Multiplexor bla bla
EHLO localhost
250-relayhost.example.com
[...]
250-AUTH PLAIN LOGIN
250-AUTH=LOGIN PLAIN
250 STARTTLS
Mit der Zeile „250 STARTTLS“ ist die Voraussetzungen erfüllt, dass wir Klartext-Benutzernamen und -Passwort durch STARTTLS geschützt an den Server übermitteln können. Welche Authentifizierungsverfahren innerhalb von STARTTLS unterstützt werden, kann mit folgenden Kommandos überprüft werden:
# openssl s_client -connect relayhost.example.com:25 -starttls smtp [-crlf]
CONNECTED(00000003)
[...]
250 CHUNKING
EHLO Max
250-relayhost.example.com Hello [IP-Adresse]
[...]
250-AUTH NTLM LOGIN
[...]
Die Option -crlf
ist nur anzugeben, wenn es sich bei dem Zielsystem um Microsoft Exchange handelt. An der Ausgabe ist zu erkennen, dass dieser relayhost die Authentifizierungsverfahren NTLM und LOGIN unterstützt.
Benutzername und Kennwort müssen dabei Base64-kodiert an den SMTP-Server übertragen werden. Der Base64-kodierte String kann mit folgendem Befehl erstellt werden. Dabei ist im folgenden Beispiel „Max“ der Benutzername und „pusemuckel“ das Passwort.
Kodierung für AUTH PLAIN
Hierbei werden Benutzername und Passwort in einem String kodiert.
$ echo -ne '\x00Max\x00pusemuckel' | base64
AE1heABwdXNlbXVja2Vs
Kodierung für AUTH LOGIN
Für AUTH LOGIN müssen Benutzername und Passwort jeweils einzeln kodiert werden.
$ echo -ne 'Max' | base64
TWF4
$ echo -ne 'pusemuckel' | base64
cHVzZW11Y2tlbA==
Test beider Verfahren über STARTTLS
Eine STARTTLS-Verbindung zum relayhost wird mit folgendem Befehl hergestellt (Ausgabe gekürzt):
# openssl s_client -connect relayhost.example.com:25 -starttls smtp
CONNECTED(00000003)
[...]
250 STARTTLS
AUTH PLAIN AE1heABwdXNlbXVja2Vs
235 2.7.0 PLAIN authentication successful.
Die letzte Zeile ist die Bestätigung, dass eine Authentifizierung mit dem bekannten Benutzernamen und dem dazugehörigen Passwort über STARTTLS und AUTH PLAIN möglich ist.
Für AUTH LOGIN sieht der Test wie folgt aus. Die zusätzliche Option -crlf
ist dann zu verwenden, wenn es sich bei dem Zielsystem z.B. um ein Microsoft System handelt, da diese traditioniell andere Zeilenumbrüche verwenden.
# openssl s_client -connect relayhost.example.com:25 -starttls smtp
CONNECTED(00000003)
[...]
250 CHUNKING
EHLO Max
250-relayhost.example.com Hello [IP-Adresse]
AUTH LOGIN
334 VXNlcm5hbWU6
TWF4
334 UGFzc3dvcmQ6
cHVzZW11Y2tlbA==
235 2.7.0 Authentication successful
Auch hier bestätigt die letzte Zeile die Gültigkeit unserer Benutzeranmeldeinformationen.
Installation fehlender Pakete und Konfiguration von Postfix
Da die Installation meines Hosts auf einer RHEL-Minimalinstallation basiert, werden zuerst zwei benötigte Pakete nachinstalliert:# yum install cyrus-sasl cyrus-sasl-plain
Datei mit Anmeldeinformationen erstellen
Es ist die Datei /etc/postfix/sasl_passwd mit folgendem Inhalt zu erstellen:
# cat /etc/postfix/sasl_passwd
smtp.example.com Max:pusemuckel
Zu Beginn der Zeile wird der FQDN des SMTP-Servers eingetragen, gefolgt von Benutzername:Passwort im Klartext. Damit nun nicht jeder diese Datei lesen kann, wird der Zugriff mit den folgenden Kommandos auf den Benutzer ‚root‘ eingeschränkt und anschließend eine Postfix-DB-Datei erstellt:
# chown root:root /etc/postfix/sasl_passwd && chmod 600 /etc/postfix/sasl_passwd
# postmap hash:/etc/postfix/sasl_passwd
# ls -l /etc/postfix/sasl_passwd*
-rw-------. 1 root root 52 26. Jul 08:57 /etc/postfix/sasl_passwd
-rw-------. 1 root root 12288 26. Jul 08:59 /etc/postfix/sasl_passwd.db
Konfiguration der /etc/postfix/main.cf
Für die Konfiguration habe ich mich an [2] orientiert. Um STARTTLS und die SMTP-Authentifizierung zu aktivieren, habe ich folgende Zeilen an meine /etc/postfix/main.cf angefügt:
# tail -n 10 /etc/postfix/main.cf
# SASL SUPPORT FOR SERVERS
#
# The following options set parameters needed by Postfix to enable
# Cyrus-SASL support for authentication of mail servers.
#
smtp_use_tls = yes # Aktiviert TLS für Postfix
smtp_sasl_auth_enable = yes # Aktiviert SMTP AUTH für Postfix
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd # Gibt an wo Postfix die Zugangsdaten findet
smtp_sasl_security_options = # Durch setzen der leeren Option wird die PLAIN- und anonyme Authentifizierung aktiviert
Für AUTH LOGIN ist zusätzlich noch die folgende Zeile einzufügen:
smtp_sasl_mechanism_filter = login
Abschließend ist die Postfix-Konfiguration neu zu laden:
# systemctl reload postfix.service
Test des Mailversands
Um den Mailversand zu testen, habe ich vom lokalen System aus eine kurze E-Mail versendet:
# mailx -s "Testmail mit SMTP-AUTH und STARTTLS" foo@example.com << EOT > EOT
Null message body; hope that's ok
Quellen und weiterführende Links
- 16. SMTP Authentication for Mail servers {en}