Postfix/Authentifizierug
SASL-Authentifizierung als Server
Fehlerhafte Anleitung Diese Anleitung ist fehlerhaft. Wenn du weißt, wie du sie ausbessern kannst, nimm dir bitte die Zeit und bessere sie aus.
Anmerkung In den neuen Versionen von Postfix wurde die Konfiguration grundlegend verändert! Das sorgt dafür, dass die Vorgehensweise sich auch grundlegend verändert hat!
Um einen SMTP-Dienst auch außerhalb des sicheren LANs anbieten zu können, sollte man eine Authentifizierung durch die Clients einfordern, damit man kein offenes Relay für Spammer o.ä. anbietet. Dafür wird das Simple Authentication and Security Layer (SASL)-Framework verwendet, welches z. B. über das Cyrus-Sasl-Projekt realisiert wird.
Achtung Bei dieser Installation werden Benutzerpasswörter im Klartext übertragen. Man sollte also zusehen, für die Verbindung SSL-/TLS-Kryptografie zu verwenden.
Hierfür müssen folgende Pakete installiert werden [1]:
- sasl2-bin
- libsasl2-2
- libsasl2-modules
Cyrus SASL bietet mehrere Arten, Authentifizierungsdienste bereitzustellen.
- Da man z. B. mit auxprop nicht gegen die normalen Shadow-Passwörter des Linuxsystems authentifizieren kann, wird hier die Einrichtung mit saslauthd beschrieben.
- Zunächst muss die Konfigurationsdatei /etc/default/saslauthd angepasst [3] und folgendes eingetragen werden:
START=yes MECHANISMS="shadow"
Dann muss eine neue Datei /etc/postfix/sasl/smtpd.conf erstellt werden:
pwcheck_method: saslauthd mech_list: PLAIN LOGIN saslauthd_path: /var/run/saslauthd/mux
Und die /etc/postfix/main.cf muss natürlich auch noch angepasst werden:
smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_invalid_hostname, reject_unauth_pipelining, reject_non_fqdn_hostname # Postfix >= 2.3, ab Edgy smtpd_sasl_path = smtpd broken_sasl_auth_clients = yes
Die letzte Zeile ist notwendig, weil sonst ein paar ältere Versionen von Microsoft-Software nicht korrekt funktioniert. Sollte es später beim Anmelden Probleme geben, sollte man die Kommentare # Postfix >= 2.3 entfernen.
Gruppenberechtigungen für sasl setzen
Standardmäßig läuft der sasl Dienst mit eigenen Rechten, auf die postfix keinen Zugriff hat. Daher ist es nötig, den user "postfix" der Gruppe "sasl" hinzuzufügen:
# adduser postfix sasl
Sicherheitseinstellungen anpassen
Jetzt könnte eigentlich alles funktionieren, wenn es nicht noch ein Problem gäbe, nämlich die Sicherheitseinstellungen von Postfix. Postfix sperrt nämlich den smtpd standardmäßig in eine chroot-Umgebung, wo er den Sasl-Socket nicht finden kann. Es gibt mehrere Möglichkeiten, dieses Problem zu umgehen.
Methode 1: chroot abschalten
Das geht am einfachsten und ist wahrscheinlich auch am praktischsten, wenn noch andere Dienste (wie z. B. ein IMAP-Server) den saslauthd nutzen wollen. Dazu muss einfach nur in der Datei /etc/postfix/master.cf in der smtpd-Zeile ein n in die chroot-Spalte eingetragen werden:
# service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
Methode 2: Socket in den chroot legen
Da Postfix seinen Prozess nach /var/spool/postfix chrooted, sucht dieser dann den Saslauthd-Socket in /var/spool/postfix/var/run/saslauthd/. Man muss also dem saslauthd befehlen, den Socket dort zu eröffnen, indem man in der oben erwähnten Datei /etc/default/saslauthd den Eintrag ändert:
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Aktivieren
Abschließend müssen Saslauthd und Postfix noch neu gestartet werden [2]:
sudo /etc/init.d/saslauthd restart sudo /etc/init.d/postfix restart
Testen
Man kann testen, ob alles klappt, indem man mit dem Telnet-Client direkt mit dem Server kommuniziert. Dafür muss man aber erstmal einen String aus den Zugangsdaten zur späteren Verwendung nach base64 konvertieren. Im folgenden Beispiel lautet der Benutzername "test" und das Passwort "testtest" und der String muss genau so (mit doppeltem Namen und \0 als Trennzeichen) eingegeben werden:
$ perl -MMIME::Base64 -e 'print encode_base64("test\0test\0testtest");' dGVzdAB0ZXN0AHRlc3R0ZXN0 $ telnet dapper-lamp 25 Trying 192.168.4.55... Connected to dapper-lamp.otze. Escape character is '^]'. 220 dapper-lamp.otze ESMTP Postfix (Ubuntu) ehlo test 250-dapper-lamp.otze 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250 8BITMIME auth plain dGVzdAB0ZXN0AHRlc3R0ZXN0 235 Authentication successful quit 221 Bye Connection closed by foreign host.
Sender-abhängige Authentifizierung
Mit fortschreitender Verbreitung von spam-bekämpfenden Techniken wie Sender Policy Framework, mit denen verhindert werden soll, dass Emails von anderen Servern versendet werden, als für ihre Domain zuständig sind (Absenderfälschung), kann es leider passieren, dass das normale Versenden über einen Smarthost nicht mehr zuverlässig funktioniert. In diesem Fall muss Postfix die Mails je nach Absender über unterschiedliche SMTP-Server mit individuellen Authentifizierungsdaten verschicken.
Der Nachteil gegenüber der Verwendung eines einzelnen Smarthosts ist, dass die Benutzernamen und Passwörter aller Benutzer auf dem Server hinterlegt werden müssen.
Hinweis Diese Konfigurationsmöglichkeit existiert erst ab Postfix 2.3. Benutzer von Ubuntu 6.06 LTS Dapper Drake müssen sich daher aus dem Backports-Repository aktuellere Pakete besorgen.
Als erstes muss die Datei /etc/postfix/main.cf folgendermaßen ergänzt werden:
smtp_sender_dependent_authentication = yes smtp_sasl_auth_enable = yes smtp_sasl_security_options = noplaintext noanonymous smtp_connection_cache_on_demand = no smtp_sasl_password_maps = hash:/etc/postfix/sasl_password sender_dependent_relayhost_maps = hash:/etc/postfix/sender_dependent sender_canonical_maps = hash:/etc/postfix/sender_canonical
Dann müssen die drei dort referenzierten Postfix-Maps erstellt werden. Ein Beispiel mit drei Benutzern:* /etc/postfix/sender_canonical (LokalerName RealeAbsenderAdresse):
erna erna@provider.de otto otto@otto.de paul paul@paul.com* /etc/postfix/sender_dependent (Absenderadresse SMTP-Server):
erna@provider.de mail.provider.de otto@otto.de smtp.provider.com paul@paul.com smtp.provider.com* /etc/postfix/sasl_password (Absenderadresse Loginname:Passwort):
erna@provider.de erna@provider.de:ernaspassword otto@otto.de otto:ottospassword paul@paul.com paul:paulspassword
Nun müssen diese Maps noch in das Postfix-Datenbankformat konvertiert werden:
sudo postmap /etc/postfix/sender_canonical sudo postmap /etc/postfix/sender_dependent sudo postmap /etc/postfix/sasl_password
Und natürlich muss Postfix seine Konfiguration neu einlesen:
sudo /etc/init.d/postfix restart