Schlagwort-Archive: STARTTLS

Postfix: SMTP-Authentifizierung für Mailserver (relayhosts) über STARTTLS konfigurieren

In diesem Artikel halte ich fest, wie ich Postfix unter RHEL 7 für SMTP-Authentifizierung an einem relayhost über STARTTLS 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:

  1. Test der Benutzerzugangsdaten über STARTTLS
  2. 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.

# 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

Sind obige mit der Ziffer 250 beginnende Zeilen in der Ausgabe enthalten, sind die Voraussetzungen erfüllt, dass wir Klartext-Benutzernamen und -Passwort durch STARTTLS geschützt an den Server übermitteln können. 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 „Max“ der Benutzername und „pusemuckel“ das Passwort.

# echo -ne '\0Max\0pusemuckel' | base64
AE1heABwdXNlbXVja2Vs

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 möglich ist.

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

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. << EOT > EOT
Null message body; hope that's ok

Quellen und weiterführende Links

  1. How to test SMTP Authentication and StartTLS {en}
  2. 16. SMTP Authentication for Mail servers {en}