[Howto] SASL mit Postfix via MySQL und libsasl-auxprop [Update]

| 5 Kommentare | Keine TrackBacks

tux.jpgUm Postfix als SMTP-Server für viele Nutzer anzubieten, muss er auf eine Nutzerdatenbank zurück greifen. Dieser Artikel zeigt am Beispiel der Groupware Zarafa, wie Postfix via libsasl mit einer MySQL-Nutzerdatenbank verknüpft wird.

Mit Hilfe von SASL können Nutzer sich gegen Postfix authentifizieren und E-Mails einliefern, damit dieser die weiter zustellt. Dies ist zum Beispiel interessant, wenn der Postfix als zentraler MTA für eine Firma oder größere Institution genutzt werden soll.

Die Schwierigkeit besteht darin, eine vorhandene Nutzerdatenbank einzubinden, hier die MySQL-DB der Groupware Zarafa. Häufig wird dabei auf PAM zurückgegriffen: Postfix authentifiziert gegen PAM, via PAM kann eine Vielzahl verschiedenster Plugins angebunden werden, um z.B. auch auf Datenbanken zurück zu greifen. Ein anderer Weg ist, die Bibliothek libsasl des Cyrus-Projekts zu nutzen, da dies ebenfalls auf verschiedene Plugins zurückgreifen kann.

Dafür muss im ersten Schritt Postfix in der main.cf für die Authentifizierung gegen SASL fit gemacht werden:

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_path = smtpd
smtpd_sender_restrictions = permit_sasl_authenticated, ...

saslauthd wird nicht direkt aufgerufen, es wird nur die libsasl-Bibliothek genutzt. Daher kann /etc/sysconfig/saslauthd auf den Standardwerten bleiben. Der Dienst selbst braucht nicht gestartet werden!

Es fehlt aber noch die eigentliche Konfiguration, in der unter Anderem auch die Syntax der MySQL-Abfrage definiert wird. Diese Konfiguration wird in der smtpd.conf definiert, die standardmäßig unter /usr/lib/sasl2/ erwartet wird. Erst wenn sie dort *nicht* vorliegt, wird sie unter /etc/sasl2/smtpd.conf erwartet. Warum dort nicht zuerst gesucht wird, entzieht sich meinem Verständnis. Es bietet sich also an, einen symbolischen Link auf die Datei unter /etc/ zu erstellen...
So oder so muss der Inhalt wie folgt aussehen:

pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: PLAIN LOGIN
allow_plaintext: true
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: zarafa
sql_passwd: ******
sql_database: zarafa
sql_select: select value from objectproperty where objectid=(select objectid from objectproperty where value='%s' limit 1) and propname='loginname'

Dabei müssen die natürlich die Sternchen für das Passwort gegen das tatsächliche Passwort ersetzt werden. Sind alle Komponenten neu gestartet worden, können E-Mails von Nutzern eingeliefert werden, die sich via libsasl gegen die MySQL-Datenbank von Zarafa authentifizieren.

Alle Artikel zum Thema CentOS stehen auch als eigene Kategorie mit eigenem Feed zur Verfügung. Falls Ihr tiefergehende Fragen zu Support und Services für Zarafa habt, oder euch Supportangebote für CentOS interessieren, seid ihr bei uns ebenfalls richtig.

Update:
Ursprünglich hatte ich in diesem Artikel auf saslauthd direkt aufgesetzt, dann aber fälschlicherweise nicht gegen die DB, sondern gegen den IMAP-Server von Zarafa (via rimap) authentifiziert. Danke an Uli in den Kommentaren für den Hinweis. Mehr Infos zu saslauthd, libsasl und den unterschiedlichen Einsatzszenarien finden sich im SASL-Readme von Postfix.

Keine TrackBacks

TrackBack URL: http://blog.credativ.com/mt-tb.cgi/166

5 Kommentare

Hi,

ich fürchte, da hat sich ein kleiner Fehler eingeschlichten. Du beschreibst hier zwar eine Authentifizierung, jedoch ist diese zunächst gegen den IMAP-Server (option rimap). Um die MySQL-Geschichte zu nutzen, müsste man bei PAM bleiben, da saslauthd sonst gegen den IMAP-Server authentifiziert. Beides ist als sicher zu betrachten, nur nützt die MySQL-Konfiguration im Falle der Einstellung rimap nicht viel. Liege ich da schief oder ist hier einfach nur ein Fehler unterlaufen?

Viele Grüße,
Uli

Hallo Uli,

danke für die Antwort. Ich verstehe aber nicht, wie du darauf kommst, dass dies im Endeffekt nicht gegen MySQL authentifiziert, obwohl doch sogar die SQL-Abfragen im Quelltext drin stehen. Klar, ich gehe den Weg über rimap, aber im Endeffekt werden die Ergebnisse aus der MySQL-DB geholt - und es funktioniert definitv, es läuft bei mir im produktiven Einsatz :-)

Hallo Roland,
natürlich laufen im Endeffekt MySQL-Querys gegen die Datenbank, aber rimap macht eine authentifizierung
gegen einen IMAP-Server, d.h. meldet sich ja dort an und entscheidet nach erfolgreicher Authentifizierung am IMAP-Server, dass der Client zugelassen wird. Dieser IMAP-Server authentifiziert natürlich gegen MySQL, jedoch nicht mit Hilfe der obigen Konfiguration, sondern mit Hilfe interner Mechanismen von Zarafa. Die obige Konfiguration der MySQL-Queries ist nur nötig, wenn man PAM nutzt. bei Nutzung von rimap benötigt man diese nicht :)

Viele Grüße,
Uli

Ok, ich werde es die Tage noch mal versuchen, auch wenn ich es gerade noch nicht so ganz glaube... ich wüsste z.B. bei der oberen Version nicht, woher sasl weiß, dass es den lokalen Server ansprechen soll, wenn es nicht den SQL-Server nimmt.

Aber wenn ich was dabei raus finde, ändere ich auch den Artikel :)

Hej Uli,

ich habe es jetzt noch mal korrigiert: ich gehe nicht über saslauthd, sondern "nur" über libsasl und deren auxprops. Die obige Anleitung habe ich entsprechend korrigiert, danke noch mal für den Hinweis =)

Kommentar hinterlassen