[Postfixbuch-users] Ist Abschalten von virtual_alias_maps für smtpd problematisch?

Sandy Drobic postfixbuch-users at drobic.de
Di Jun 22 20:54:06 CEST 2010


On 2010.06.21 20:19, Mathias Jeschke wrote:
> Hallo Postmaster,
> 
> ich habe hier einen Postfix-Mailserver mit folgender Konstellation:
> 
> - ca. 200 "virtuelle" Benutzer abgelegt in einem LDAP-Verzeichnis
>   mit "Default-E-Mail-Adressen" in der Form user at firma.de und
>   vorname.nachname at firma.de
> 
> - eine Reihe zusätzlicher "Alias-Domains", d.h. alle User-Anteile sollen
>   unter allen Domains (firma.com, firma.info, ...) erreichbar sein.
>   Diese Domains sind ebenfalls im LDAP abgelegt.
> 
> - Ich möchte auf jeden Fall verhindern, alle Kombinationen von User-Teil
>   und Domains als Alias den Nutzern-Objekten im LDAP zuzuordnen.
>   (Vor allem da die Anzahl der Domains auch von Zeit zu Zeit zunimmt.)

Da wirst du nicht drum herumkommen. Oder du baust um und deklarierst die
Domains als lokale Domains in mydestination. Dann kommst du mit der Liste der
Domains in mydestination und den Usern in local_recipient_maps aus.

> 
> Beim Einliefern einer Mail passiert also folgendes:
> 
> 1. per $mydestination wird geprüft, ob Postfix für die Domain zuständig ist.
>    ($mydestination beinhaltet eine LDAP-Table, zur Domain-Abfrage)
>    (Es ist nur "smtpd_recipient_restrictions" gesetzt, um Relaying nach SMTP-Auth
>     zu erlauben: smtpd_recipient_restrictions =
>                    permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination)
> 
> 2. Es werden die "local_recipient_maps" ausgewertet, in denen u.a. so etwas steht:
>    ---------------------------------------------------------------------------
>    # Prüfe, ob der User-Teil als Alias oder als Account bekannt ist.
>    # (Prüfung der Domain-Gültigkeit erfolgt über $mydestination)
>    query_filter = (&(mail=*)(|(uid=%u)(gosaMailAlternateAddress=%u@*)))
>    result_attribute = uid
>    ---------------------------------------------------------------------------

Okay, das geschieht ja dann schon.

> 3. In den "virtual_alias_maps" werden zum einen alle Domains im LDAP durch
>    die Standard-Domain ersetzt (so dass die andere Map s.u. in "virtual_alias_maps"
>    zutreffen kann: alias_key at firma.com -> alias_key at firma.de -> user at firma.de)
>    Die Map sieht in etwa so aus:
>    ---------------------------------------------------------------------------
>    query_filter = cn=%d
>    result_attribute = description
>    result_format = @firma.de
>    ---------------------------------------------------------------------------
> 
>    Weiterhin werden die E-Mail-Adressen auf Aliases geprüft:
>    ---------------------------------------------------------------------------
>    query_filter = (|(gosaMailAlternateAddress=%s)(mail=%s))
>    result_attribute = uid
>    ---------------------------------------------------------------------------
>    (Der Teil mit "mail=%s" ist ein "Hack", um die Mail mit Cyrus zustellen
>     zu können: weil "vorname.nachname" keine gültige Mailbox ist.)
> 
> 
> Nun zum Problem:
> 
> Durch das Hinzufügen der virtual_alias_maps zur "Domain-Ersetzung" werden durch die
> "Catchall-Adresse" @%d -> @firma.de leider die local_recipient_maps ausgehebelt,
> weil (in meinem Fall blöderweise) der smtpd bei der Annahme auf Port 25 auch in
> dieser Map nach gültigen Empfängern sucht.

Das ist kein Catch-all, sondern eine Wildcard-Umschreibung. Diese zerstört in
der Tat die Empfängervalidierung.

> Daher habe ich in der master.cf für smtpd "virtual_alias_maps=" gesetzt,
> was anscheinend das Problem löst.
> 
> Besser wäre eine Möglichkeit - die ich bisher noch nicht gefunden habe -
> um den Domain-Teil im Envelop zu ersetzen.
> 
> Ich bin mir aber unsicher, ob das noch andere Probleme nach sich zieht,
> habt Ihr eine Idee?

Es gibt mehrere Methoden, um dieses Problem zu lösen. Die meisten setzen
voraus, dass die Mail über einen Hop läuft. Entweder einen Content_filter oder
eine zweite Instanz.

Wenn du einen content_filter wie Amavisd-new verwendest, dann kannst du vor
dem Content_filter die Umschreibung abschalten und verhinderst somit die
Wildcard-Umschreibung. Hinter dem content_filter wird dann bei der Rücknahme
der Mail aus dem Content_filter die Umschreibung wieder aktiviert, womit du
die gewünschte Umschreibung erhälst.

Eine ähnliche Umschreibung kann man mit smtp_generic_maps machen, wobei hier
die Umschreibung ohne Probleme mit Wildcards arbeiten kann, da die Mail zu
diesem Zeitpunkt schon angenommen ist.

-- 
Sandy

Antworten bitte nur in die Mailingliste!
PMs bitte an: news-reply2 (@)drobic (.) de



Mehr Informationen über die Mailingliste Postfixbuch-users