17.16 Verwaltung von Weiterleitungen für den Mailserver Postfix
Wenn Sie Ihren Mailserver so eingerichtet haben, wie in Kapitel 10, »Mailserver«, gezeigt wird und Ihre User-Accounts im LDAP verwalten, können Sie Ihren Postfix mit wenigen Handgriffen auch an Ihren LDAP-Server anbinden. Am Ende kann Postfix seine Weiterleitungen und Aliasse auch direkt aus LDAP beziehen, sodass Sie keine lokalen Dateien direkt auf dem Server mehr pflegen müssen.
Bei SUSE ist eine LDAP-Unterstützung bereits im Hauptpaket enthalten, bei Debian/Ubuntu müssen Sie das Paket postfix-ldap separat nachinstallieren.
Grundsätzlich können Sie alles, was Sie in Postfix als Map-Datei im Format hash oder btree anlegen können, auch direkt aus LDAP abfragen lassen. Diese Tabellen haben immer einen zweispaltigen Aufbau: Spalte eins ist die Query, also das Suchkriterium, Spalte zwei ist Result/Action, also das Suchergebnis. Bei der Abfrage von Map-Dateien liest Postfix also nie wie bei einer Konfigurationsdatei den Inhalt der Datei ein, sondern »fragt« jedes Mal erneut die jeweilige Datei oder Datenbank – die auch ein LDAP-Server sein kann.
Wenn Ihre User im LDAP zusätzliche Mailadressen im LDAP-Eintrag mailAliases gespeichert haben, benötigen Sie eine Weiterleitung von mailAiases (=Query) auf die Haupt-Mailadresse mail (=Result). Definieren Sie diese Abfrage zunächst in einer Datei /etc/postfix/virtual.ldap, so wie Sie es in Listing 17.84 sehen:
server_host = adminbuch.example.net
#server_port = 389
#start_tls = yes
#version = 3
bind = yes
bind_dn = uid=postfix,ou=users,dc=example,dc=net
bind_pw = geheim
search_base = dc=example,dc=net
scope = sub
query_filter = (mailAliases=%s)
result_attribute = mail
### Diese Variante schreibt Mailadressen auf die User-ID der Nutzer um.
### Der Result-Filter ergänzt die Domain für ein sauberes Mail-Routing!
# query_filter = (|(mailAliases=%s)(mail=%s))
# result_attribute = uid
# result_filter = %s@example.com
Listing 17.84 Die Definition der LDAP-Abfrage für »virtual_alias_maps«
Die einzelnen Parameter haben dabei folgende Bedeutung:
-
server_host = adminbuch.example.net
Das ist der FQDN des LDAP-Servers. -
server_port = 389
Das ist der TCP-Port des LDAP-Servers (falls abweichend vom Default). -
start_tls = yes
Dieser Parameter aktiviert (optional) eine TLS-gesicherte Verbindung zum LDAP-Server. -
version = 3
Das zeigt die zu verwendende Protokollversion zum LDAP-Server. -
bind = yes
Dieser Parameter teilt dem Postfix mit, dass er sich auf jeden Fall beim LDAP authentifizieren muss und dass keine anonyme Suche erlaubt ist. -
bind_dn = uid=postfix,ou=users,dc=example,dc=net
Dies ist der Benutzer, mit dem sich der Postfix am LDAP authentifiziert. Wie schon bei der Replikation können Sie auch hier ein SimpleSecurityObject erzeugen, das nur einen Namen und ein Passwort besitzt. Damit kann sich niemand über eine Shell mit dem Konto anmelden. -
bind_pw = geheim
Das ist das Passwort des Benutzers für die Authentifizierung am LDAP. -
search_base = dc=example,dc=net
Ab diesem Punkt im DIT wird der Postfix die Suche nach den Aliassen beginnen. Hier können Sie natürlich auch einen anderen Punkt im DIT angeben: Es muss nicht, so wie in Listing 17.84, die oberste Ebene des DIT sein. -
scope = sub
Der Scope gibt an, wie weit der Postfix ab der Base suchen soll. Hier wird sub verwendet: Damit wird der gesamte DIT nach Alias-Einträgen durchsucht.Alternativ sind auch »base« (nur die Ebene der Base-DN) oder »one« (Base-DN und die darunterliegende Ebene) möglich.
-
query_filter = (mailAliases=%s)
Das ist der Filter, der bei der Suche angewendet wird. Dabei setzt Postfix anstelle des %s den Suchbegriff ein, hier also die ursprüngliche Mailadresse. -
result_attribute = mail
Hat die Suche ein LDAP-Objekt als Treffer gefunden, liest Postfix den Inhalt dieses LDAP-Objekts als Suchergebnis. -
result_filter = %s@example.com
Der optionale Result-Filter ermöglicht Manipulationen und Ergänzungen am Suchergebnis. Dabei steht »%s« als Platzhalter für das ursprüngliche Suchergebnis aus result_attribute.
In der Manpage man 5 ldap_table finden Sie weitere Details und Parameter für LDAP-Abfragen durch Postfix.
[+] Wenn der DIT über ACLs abgesichert ist, müssen Sie über eine ACL sicherstellen, dass der bind_dn die Leseberechtigung an dem Attribut mail hat.
Nun müssen Sie Postfix noch anweisen, die LDAP-Suche aus der Datei virtual.ldap als Abfrage für virtual_alias_maps zu verwenden. Lassen Sie dabei virtual_alias_maps weiterhin als Erstes auf eine echte lokale Textdatei zeigen. Auch wenn diese (hoffentlich) fast immer leer ist, können Sie so im Notfall auch weiterhin schnell und unkompliziert Weiterleitungen per Hand eintragen, ohne immer gleich tatsächlich Einträge im LDAP ändern zu müssen (siehe Listing 17.85):
virtual_alias_maps = hash:/etc/postfix/virtual, proxy:ldap:/etc/postfix/virtual.ldap
Listing 17.85 Definition der »virtual_alias_maps«-Tabelle mit LDAP
Mit dem zusätzlichen Präfix proxy: veranlassen Sie, dass das smtpd-Modul von Postfix die Verbindung zum LDAP-Server nicht selbst aufbaut, sondern diese über das Proxy-Modul von Postfix führt. Auf diese Art und Weise können bestehende Verbindungen mehrfach genutzt werden, und es werden weniger zeitgleich bestehende Verbindungen zu Ihrem LDAP-Server aufgebaut.
Mit dem postmap-Kommando können Sie schnell und einfach prüfen, ob und welches Ergebnis Ihre definierte LDAP-Abfrage liefert. Suchen Sie sich einen Nutzer mit Aliassen/Weiterleitungen, und prüfen Sie auf dem Mailserver, ob diese auch gefunden werden (siehe Listing 17.86):
mail:~ # postmap -q aliasadresse@example.com ldap:/etc/postfix/virtual.ldap
zieluser@example.common
Listing 17.86 Überprüfung der LDAP-Abfrage mit »postmap«