Postfix mit LDAP Backend

djrick

Registered User
Hallo,

Ich bin auf der Suche nach einer Anleitung für ein Postfix Mailsystem mit LDAP Backend.

Stand ist:
Der Mailserver hat Postfix drauf (Debian, über apitude installiert).
Der LDAP Server hat ein Verzeichnis Usern. Die LDAP wird über egroupware verwaltet.

Über die groupware soll man die User verwalten können, sprich via egroupware anlegen / löschen können.

Die User authentifizieren sich über die LDAP auch schon an einem Sambadienst und an einem OpenVPN Dienst.

Der letzte Schritt der noch fehlt ist quasi die Anbindung von Postfix an dieses LDAP Verzeichnis.

Postfix muss beim Mailempfang quasi schauen wenn eine Mail reinkommt: existiert dieser Alias in der LDAP und wenn ja welchem LDAP User ist dieser zugeordnet und dann die Mail für den jeweiligen User in ein Postfach ablegen.

Die User haben auf dem Server KEINEN Shell-Account.
Ich muss ganz ehrlich sagen, dass ich mit Mailservern auf Kriegsfuss stehe und schon viele Howtos mir angesehen hab zum Thema Postfix und LDAP, aber irgendwie hats nie funktioniert.

Was ich bisher zu wissen glaube ist, dass die LDAP Anbindung / Mailauslieferung über die virtual_-Direktiven in der main.cf regeln muss, da die User kein eigenes Homeverzeichnis haben...

Aber trotzdem komm ich auf keinen grünen Zweig :(
 
Hmm da gehts um die MySQL authentifizierung, das Problem bei mir ist, dass egroupware per LDAP sich die User merkt :)

Sonst wäre der link gold-richtig :)
 
Über zusätzliche maps kannst du doch zusätzlich die Egroupware User "empfangsbereit" machen.

Sobald dann eine Mail ankommt wird ein Postfach für den LDAP User angelegt.

Das meinst du doch oder?
 
So ich hab es jetzt "soweit" hinbekommen:

Postfix akzeptiert die Mails, schaut ob die User in der LDAP Dir sind, wenn ja liefert Postfix sie nach /var/mail aus.

Die Mails sind dann in einer Textdatei pro User gespeichert.

Jetzt das letzte: Ich will die Mails natürlich auch abrufen (am besten per IMAP) aber das funktioniert nicht! Ich habe mich an Dovecot probiert...aber das will nicht funktionieren, weil, soweit ich das sehe, dovecot die Mails in einem seperaten Verzeichnis pro User haben will.

Jetzt die Frage: Wie krieg ich das hin, oder wie kann ich meine Mails per IMAP abrufen?

Der wichtige Teil meiner main.cf sieht so aus:
Code:
local_transport = virtual
virtual_mailbox_base = /var/mail/
virtual_mailbox_maps = ldap:ldapvirtual
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_minimum_uid = 1
virtual_mailbox_limit = 0
ldapvirtual_server_host = ldap.host.de
ldapvirtual_server_port = 389
ldapvirtual_bind = yes
ldapvirtual_bind_dn = cn=admin,dc=.........
ldapvirtual_bind_pw = ******
ldapvirtual_search_base = dc=.........
ldapvirtual_query_filter = (mail=%s)
ldapvirtual_result_attribute = mailMessageStore


virtual_maps = ldap:ldapalias
ldapalias_server_host = ldap.host.de
ldapalias_server_port = 389
ldapalias_bind = yes
ldapalias_bind_dn = cn=admin,dc=....
ldapalias_bind_pw = ********
ldapalias_search_base = dc=.....
ldapalias_query_filter = (mail=%s)
ldapalias_result_attribute = uid


virtual_mailbox_maps = ldap:/etc/postfix/ldap-accountsmap.cf

virtual_mailbox_base = /var/mail/
virtual_transport = virtual

local_recipient_maps = $virtual_mailbox_maps

Also meine Fragen sind, zusammen fassend:
Wie krieg ich Postfix dazu meine Mails in mbox Format (oder wie auch immer das heisst) auszuliefern.

ODER

Welcher IMAP Dienst, der LDAP Auth kann, kann die Mail so abrufen, wenn sie alle pro User in einer datei stehen.
 
Ich habe mich an Dovecot probiert...aber das will nicht funktionieren, weil, soweit ich das sehe, dovecot die Mails in einem seperaten Verzeichnis pro User haben will.
Dovecot kann sowohl mit Maildir (eine Datei pro E-Mail), als auch mit mbox (alle Mails eines Benutzers in einer Datei) umgehen.

Jetzt die Frage: Wie krieg ich das hin, oder wie kann ich meine Mails per IMAP abrufen?
Den Dovecot IMAP richtig konfigurieren oder alternativ Postfix (bzw. den genutzten MDA/LDA) die E-Mails im Maildir-Format ausliefern lassen (siehe virtual(8), Abschnitt QMAIL MAILDIR FORMAT).
 
Hallo,

Also die Man-Page zu virtual hab ich natürlich gelesen. Wenn ich das richtig sehe, dann muss man am Ende der mailbox-Deklaration lediglich ein / setzen, so dass Verzeichnisse anstelle von Dateien erstellt werden.
Dem ist aber nicht so, oder ich habs an der falschen Stelle, deswegen hatte ich meine main.cf ja gepostet.

Zur Maillocation: Welches Format ist denn diese Einzelne Datei? mbox?
 
apt-get install courier-authdaemon courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-ssl gamin libgamin0 libglib2.0-0

postconf -e 'home_mailbox = Maildir/'

/etc/init.d/postfix restart

/etc/procmailrc

MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR

:0fw: spamassassin.lock
* < 256000
|/usr/bin/spamc -f

Das Courier Gedöns musste dir mal angucken was du davon brauchst...


Edit: gerade was zu Dovecot und Maildir gefunden: default_mail_env = maildir:/home/vmail/%d/%n

http://bliki.rimuhosting.com/space/knowledgebase/linux/mail/postfixadmin+on+debian+sarge
 
Last edited by a moderator:
Danke für die vielen Hinweise.

Letztlich hat das funktioniert:
Code:
mail_location = mbox:/mail/%u:INBOX=/var/mail/%u

Vielen Dank an alle die geholfen haben :)
 
Hallo,

Ok eine Frage tut sich noch auf.

Ich habe jetzt die User und Gruppen von LDAP am laufen.
Jetzt will mein Chef (warum auch immer) noch, dass alle Mails an User die nicht existieren an ihn weiter geleitet werden. Also wollte ich das ganze mit einem Catchall realisieren, ich habe mir das so gedacht: Postfix müsste bestimmt eine Priorisierung (vielleicht in der Reihenfolge wie die Maps in der main.cf angegeben werdn) besitzen, also: Wenn ich zuerst die LDAP Maps angebe und danach die Catch-All, dann müsste mein System so funktionieren....tuts aber nicht ;)

Hier mal meine main.cf:
Code:
local_transport = virtual
virtual_mailbox_base = /var/mail/
virtual_mailbox_maps = ldap:ldapvirtual
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_minimum_uid = 1
virtual_mailbox_limit = 0
ldapvirtual_server_host = .....
ldapvirtual_server_port = 389
ldapvirtual_bind = yes
ldapvirtual_bind_dn =..........
ldapvirtual_bind_pw = ...........
ldapvirtual_search_base =................
ldapvirtual_query_filter = (mail=%s)
ldapvirtual_result_attribute = mailMessageStore


virtual_maps = ldap:ldapalias
ldapalias_server_host = ............
ldapalias_server_port = 389
ldapalias_bind = yes
ldapalias_bind_dn = .............
ldapalias_bind_pw = ...........
ldapalias_search_base = ............
ldapalias_query_filter = (mail=%s)
ldapalias_result_attribute = uid


virtual_mailbox_maps = ldap:/etc/postfix/ldap-accountsmap.cf
virtual_alias_maps = ldap:ldapalias ldap:/etc/postfix/ldap-groups.cf hash:/etc/postfix/virtual
virtual_mailbox_base = /var/mail/
virtual_transport = virtual

local_recipient_maps = $virtual_mailbox_maps

Wie man hier sieht:
Code:
virtual_alias_maps = ldap:ldapalias ldap:/etc/postfix/ldap-groups.cf hash:/etc/postfix/virtual
Lasse ich zuerst nach aliases und groups im LDAP suchen und danach kommt die "virtual" Datei, in der habe ich wie folgt den Catch-All definiert:
Code:
@domain.de       anderes_postfach@anderer-server.de
Dummerweise leitet der Mailserver bei dieser Konfiguration ALLE Emails (gleich ob sie existieren oder nicht) an dieses Postfach weiter.
 
Moin,

Mein täglicher Blog ;)

Es geht immer noch nicht mit der Catch-All. Mitlerweile hab ich auch versucht das luser_relay zu setzen in der main.cf, aber dann bekommt man trotzdem noch ein "Recipient address rejected: User unknown in local recipient table" wenn man an eine "nicht bekannte" Adresse schreibt.
 
Und noch ein Update:
Ich hab einen User im LDAP abgelegt mit der Email Adresse @domain.de
Selbst das funktioniert nicht....dann werden ALLE Mails an diesen User geschickt, auch die, die in der Datenbank existieren :(
 
Mail Aliase in LDAP verwalten

Hallo djrick,

offensichtlich hast Du fast zur selben Zeit fast dasselbe Setup für eine ähnliche Aufgabenstellung gewählt wie ich. Nur bin ich gerade erst per Google auf diesen Thread gestoßen. Ich hänge nun noch etwas an einer Stelle, die bei Dir scheinbar von Anfang an geklärt war und da würde ich nun gerne ein paar Tipps abgreifen. Falls das hier als Thread Hijacking interpretiert wird, starte ich auch gerne noch mal ein neues Thema oder führe die Konversation per PM weiter.

Ich habe hier debian lenny mit postfix, dovecot und openldap am Start. Dazu brauchte ich dann noch einen Webmailer und ein Werkzeug, mit dem ich die Accounts im LDAP-Server pflegen kann, ohne dort Inkonsistenzen und Fehler zu produzieren, weil ich es so selten mache und mich mit den Attributen und der Syntax noch unsicher fühle. Andernorts pflege ich einen Mac OS X Server. Da gibt es ein Werkzeug namens Arbeitsgruppenmanager. Ein Pendant dazu, jedoch zur Benutzung mit Open Source Software suche ich im Prinzip. Da Egroupware versprach, beide Anforderungen, Webmail und LDAP Administration auf einmal zu erfüllen und per aptitude installierbar war, habe ich dieses Paket dafür ausgewählt.

Wenn ich den Thread richtig verstehe, lag bei Dir von Anfang an fest, welche Schemata in LDAP geladen werden, und wie die Attribute zu belegen sind. Mir ist das an sich ziemlich wurscht, ich wäre froh, wenn mir jemand eine erprobte Lösung vorgibt, mit der ich starten kann. Die meisten Howtos starten mit Einträgen der object class inetOrgPerson und sobald da ein Attribut fehlt kommt der Hinweis, daß es auch ganz einfach ist, ein eigenes Schema zu entwerfen. Schön und gut, aber Mailaliase sind ja jetzt nicht soo außergewöhnlich, daß ich da das Rad neu erfinden muß. Und es gibt ja auch schon eine Klasse alias. Aber wie erzeuge ich damit einen korrekten Eintrag? Das mal als Beispiel.

Ich möchte auf meinem Server später auch für andere Dienste Nutzeraccounts per LDAP pflegen, beispielsweise soll demnächst ein Issue Tracker dazu kommen (welchen habe ich noch nicht entschieden) und proftpd als FTP-Server. Bei FTP könnte dann z.B. ein abweichender Pfad fürs user-directory im einen oder anderen Fall wünschenswert sein. Dupliziert man da dann ein vorhandenes Attribut oder erfindet man es neu? Beides unschön. Darum geht es eigentlich, eine saubere und übersichtliche Lösung an einem Ort. An sich interessieren mich best practises bei der Nutzung von LDAP Schemata.

Also, bis jetzt habe ich zwei Benutzer im LDAP, die ich mit Egroupware angelegt habe. Nachdem ich mich jeweils einmal eingeloggt hatte, waren auch die Maildirs erzeugt. Beide Nutzer können nun senden und empfangen. Dovecot ist selber für den Zugriff auf LDAP konfiguriert, Postfix verifiziert beim versenden die Berechtigung indirekt per Dovecot SASL.
Einen virtual Map Eintrag zur direkten Verbindung von Postfix mit LDAP habe ich noch nicht angelegt, denke aber, daß ich das in Grundzügen verstanden habe. Die Frage dort ist dann natürlich wieder, wie der Eintrag für den query_filter und das result_attribute aussehen sollte. Ich werde mir jetzt vorerst mit einer separaten hash-basierten Tabelle für die Aliase in Postfix weiter helfen, aber da beginnt dann aus meiner Sicht schon wieder der Wildwuchs.

Ich habe mich neben Egroupware auch anderweitig etwas umgesehen, beispielsweise bei LDAP Account Manager. Bei dem läuft schon das Feature zur Verwaltung von Aliasen unter kostenpflichtiger Profiversion. Kolab und Univention sind derart komplexe Lösungen, daß es mir zu aufwändig erscheint, mir dort die passenden Stücke herauszusuchen.
Ich habe auch nach passenden Mailinglisten gesucht, aber nach etwas stöbern im Archiv von openldap-technical schien mir das ebensowenig passend wie die deutsche debian-users Liste. Eher scheint mir noch die Postfixbuch Liste geeignet, aber das liegt ja auch etwas querab. Also mache ich an dieser Stelle mal einen ersten Versuch. Versuch macht kluch.

Danke und Grüße, Christian
 
Back
Top