Postfix und LDAP Part 4 - saslauthd und SSL
Contents
saslauthd Installation und Konfiguration
Einleitung
Nach unserem letzten Artikel „Postfix konfigurieren“ widmen wir uns heute der Authentifizierung per saslauthd sowie der Absicherung des Transports per SSL. Der saslauthd Daemon wird eingesetzt, um unseren Benutzern die Anmeldung an unserem Postfix Server zu erlauben. Dies ist notwendig, da ein Mailversand zu externen Adressen ansonsten nicht möglich ist (vgl. offenes Mail-Relay). Wir werden saslauthd so einrichten, dass er unsere Benutzer gegen den openLDAP Server authentifiziert.
Installation
aptitude install sasl2-bin
Konfiguration
Konfiguration saslauthd
Erstellen Sie die Datei /etc/saslauthd.conf mit folgendem Inhalt
ldap_servers: ldap://127.0.0.1 ldap_version: 3 ldap_search_base: dc=testlab,dc=labs ldap_scope: sub ldap_filter: uid=%u ldap_auth_method: bind
Falls Sie sich nicht mit der uid, sondern z.B. mit der Mailadresse authentifizieren wollen können sie im ldap_filter statt uid auch mail einsetzen.
Danach editieren Sie die Datei /etc/default/saslauthd. Folgende Attribute müssen dabei gesetz werden, beachten Sie dabei, dass Postfix in einem sogenannten chroot läuft und daher saslauthd entsprechend umgebogen werden muss um von Postfix angesprochen werden zu können.
MECHANISMS="ldap" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Abschließend muss der Postfix User noch der sasl Gruppe zugeordnet werden:
usermod -a -G sasl postfix
Konfiguration Postfix
Erstellen Sie das Verzeichnis /etc/postfix/sasl und erstellen dort die Datei smtpd.conf mit folgendem Inhalt
pwcheck_method: saslauthd mech_list: plain login
Beachten Sie, dass wir nur die Methoden PLAIN und LOGIN bereitstellen. Grund dafür ist, dass wir das Klartextpasswort brauchen um gegen den LDAP Server zu authentifizieren.
Keine Sorge, da wir später das STARTTLS Kommando einführen wird es nicht möglich sein das Passwort auf dem Weg vom Client zum Server abzufangen.
Erweitern Sie die main.cf um folgende Konfigurationseinstellungen
# TLS smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes # Restrictions smtpd_helo_required = yes strict_rfc821_envelopes = yes disable_vrfy_command = yes smtpd_delay_reject = yessmtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, permit_mynetworks, permit_sasl_authenticated smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unlisted_sender, reject_unlisted_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_invalid_hostname, reject_unauth_destination, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, permit smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, permit
Starten Sie beide Dienste neu
/etc/init.d/postfix restart /etc/init.d/saslauthd restart
Testen der Authentifizierung
Um die Authentifizierung zu testen muss zunächst der Login String nach base64 enkodiert werden. Dies kann über folgendes Kommando erledigt werden (wir verwenden die Login Daten unseres Beispielbenutzers Max Mustermann aus dem Artikel zur Einrichtung des LDAP Servers)
perl -MMIME::Base64 -e 'print encode_base64("user1\0user1\0Test1234!");'
Der Befehl gibt uns im Beispiel als Ergebnis den String „dXNlcjEAdXNlcjEAVGVzdDEyMzQh“ zurück. Diesen verwenden wir zur Authentifizierung. Verbinden Sie sich per netcat mit dem Server und verwenden Sie statt dem helo Befehl am Anfang den erweiterten ehlo Befehl an, achten Sie auf die Ausgabe, welche die Zeile „250-AUTH PLAIN LOGIN“ enthalten sollte, und testen Sie danach die Authentifizierung mit dem Befehl
„AUTH PLAIN dXNlcjEAdXNlcjEAVGVzdDEyMzQh„.
Die Ausgabe sollte der folgenden ähneln, fett geschriebene Zeilen sind dabei von Ihnen einzugeben, kursive Zeilen sind Antworten von Postfix:
nc localhost 25 220 mail.example.com ESMTP Postfix (Debian/GNU rulez!) ehlo localhost 250-mail.example.com 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN auth plain dXNlcjEAdXNlcjEAVGVzdDEyMzQh 235 2.7.0 Authentication successful rset 250 2.0.0 Ok quit 221 2.0.0 Bye
Die Authentifizierung funktioniert, allerdings bleibt der fade Beigeschmack, dass jeder, der auf dem Weg zwischen Client und Server Zugriff auf die Transportschicht hat, das Login mitschneiden und selbst verwenden kann. Sorgen wir also dafür, dass Postfix das STARTTLS Kommando versteht.
Postfix und SSL
Zur Verwendung des STARTTLS Kommandos benötigen Sie SSL Zertifikate. Diese erhalten Sie gegen Gebühr von einer der zahlreichen Zertifizierungsstellen. Alternativ können Sie auch selbst signierte Zertifikate in Postfix einsetzen.Wie sie diese Zertifikate erstellen können Sie im Artikel Am Anfang war das Zertifikat nachlesen.
Beachten Sie, dass bei selbst signierten Zertifikaten jeder Benutzer entweder das Zertifikat der CA oder aber das Zertifikat des Servers importieren müssen, da ansonsten bei jeder Verbindung eine entsprechende Warnung ausgegeben wird.
Erstellen Sie den Ordner ssl im Verzeichnis /etc/postfix und kopieren Sie das Zertifikat und den dazugehörenden Schlüssel dortin. Danach erweitern Sie die /etc/postfix/main.cf um folgenden Inhalt:
smtpd_use_tls = yes smtpd_tls_cert_file = /etc/postfix/ssl/publicKEY.crt smtpd_tls_key_file = /etc/postfix/ssl/privateKEY.key
Starten Sie Postfix neu
/etc/init.d/postfix reload
Testen Sie, ob die Konfiguration erfolgreich war. Verbinden Sie sich abermals per netcat mit dem Mailserver, setzen Sie das ehlo Kommando ab und achten Sie darauf, ob in der Ausgabe des Mailservers die Zeile
250-STARTTLS
erscheint. Gratulation, Postfix bietet nun Verschlüsselung bei der Verbindung an!
Ausblick
Dieser Artikel beschließt das Ende unserer Serie zum Thema Postfix und openLDAP. Weiterführende Tätigkeiten, zum Beispiel die Konfiguration eines IMAP Dienstes oder Webmailing, werden Thema künftiger Artikel sein.