[postfix-users] Alias Domains Problem
Hallo zusammen,
bin dabei, unseren Mailserver umzustellen. Als Basis des Servers, um es schlicht etwas einfacher zu machen bei der Anlage und Pflege von Kundendomains, ist ISPConfig3. Bin allerdings hergegangen und habe die vorgegebene Postfix-Config von ISPConfig3 noch etwas getuned, was, zumindest was mein jetziges Problem betrifft, eventuell auch der springende Punkt ist. ;-)
Folgende Situation: Es gibt Alias Domains. Beispiel: Alles, was an domain-a.de geht, wird an domain-b.de weitergeleitet. Kenne das von meiner bisherigen Config so, dass dann geschaut wurde, ob es den Empfaenger, der unter mail@domain-a.de angeschrieben wurde, unter mail@domain-b.de auch existiert - ansonsten wird die Mail nicht angenommen.
Leider ist das nun nicht mehr der Fall. Schicke ich etwas an domain-a.de wird diese Mail auf jeden Fall angenommen, in /var/vmail/domain-a.de wird dann auch ein Empfaengerverzeichnis angelegt und die Mail dort abgelegt. Nur wenn an domain-b.de etwas gesendet wird schaut Postfix wie er soll in die Tabelle und meckert dann auch entsprechend, so es den Alias nicht gibt.
Anbei meine Config. Ich habe wahrscheinlich nur irgendwo einen banalen Fehler gemacht.
Ansonsten bin ich auch gerne fuer weitere Aenderungsideen oder Hinweise auf Fehler oder daemliche Einstellungen dankbar. Die Config habe ich in den letzten Jahren aufgebaut (daher teilweise auch nur noch bedingt Ahnung, was welche Einstellung bewirkt) und nun mit der ISPConfig3-Config zusammengeworfen.
Danke und viele Gruesse, Martin
Zitat von Martin Sebald msebald@hot-chilli.net:
Hallo zusammen,
bin dabei, unseren Mailserver umzustellen. Als Basis des Servers, um es schlicht etwas einfacher zu machen bei der Anlage und Pflege von Kundendomains, ist ISPConfig3. Bin allerdings hergegangen und habe die vorgegebene Postfix-Config von ISPConfig3 noch etwas getuned, was, zumindest was mein jetziges Problem betrifft, eventuell auch der springende Punkt ist. ;-)
Folgende Situation: Es gibt Alias Domains. Beispiel: Alles, was an domain-a.de geht, wird an domain-b.de weitergeleitet. Kenne das von meiner bisherigen Config so, dass dann geschaut wurde, ob es den Empfaenger, der unter mail@domain-a.de angeschrieben wurde, unter mail@domain-b.de auch existiert - ansonsten wird die Mail nicht angenommen.
Leider ist das nun nicht mehr der Fall. Schicke ich etwas an domain-a.de wird diese Mail auf jeden Fall angenommen, in /var/vmail/domain-a.de wird dann auch ein Empfaengerverzeichnis angelegt und die Mail dort abgelegt. Nur wenn an domain-b.de etwas gesendet wird schaut Postfix wie er soll in die Tabelle und meckert dann auch entsprechend, so es den Alias nicht gibt.
Also so ganz verstanden hab ich die config nicht zumal auch sehr viele Tabellen unbekannten Inhalts im Spiel sind. Was normalerweise funktionieren sollte:
virtual_alias_domains=domain_a, domain_b virtual_alias_maps= @domain_a @domain_b #schreibt alle user@domain_a nach user@domain_b um user1@domain_b virtual-mailbox-user1 user2@domain_b virtual-mailbox-user2
usw.
Die virtual mailbox domain sollte nicht Teil der virtual alias domains sein. Eine Domain sollte immer nur zu einer Adressclass gehören (http://www.postfix.org/ADDRESS_CLASS_README.html)
Das ganze dann noch entsprechend auf die Tabellen ummünzen. Mit "postmap -q" testen und die Lookup Strategie unter man 5 virtual nachlesen.
Viel Erfolg
Andreas
Anbei meine Config. Ich habe wahrscheinlich nur irgendwo einen banalen Fehler gemacht.
Ansonsten bin ich auch gerne fuer weitere Aenderungsideen oder Hinweise auf Fehler oder daemliche Einstellungen dankbar. Die Config habe ich in den letzten Jahren aufgebaut (daher teilweise auch nur noch bedingt Ahnung, was welche Einstellung bewirkt) und nun mit der ISPConfig3-Config zusammengeworfen.
Danke und viele Gruesse, Martin
Hallo Andreas,
und danke für Deine Antwort.
Folgende Situation: Es gibt Alias Domains. Beispiel: Alles, was an domain-a.de geht, wird an domain-b.de weitergeleitet. Kenne das von meiner bisherigen Config so, dass dann geschaut wurde, ob es den Empfaenger, der unter mail@domain-a.de angeschrieben wurde, unter mail@domain-b.de auch existiert - ansonsten wird die Mail nicht angenommen. Leider ist das nun nicht mehr der Fall. Schicke ich etwas an domain-a.de wird diese Mail auf jeden Fall angenommen, in /var/vmail/domain-a.de wird dann auch ein Empfaengerverzeichnis angelegt und die Mail dort abgelegt. Nur wenn an domain-b.de etwas gesendet wird schaut Postfix wie er soll in die Tabelle und meckert dann auch entsprechend, so es den Alias nicht gibt.
Also so ganz verstanden hab ich die config nicht zumal auch sehr viele Tabellen unbekannten Inhalts im Spiel sind.
Ich kann natürlich gerne kurze Auszüge aus dem Inhalt der Tabellen posten. Oder einfach so:
virtual_alias_domains = virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
mysql-virtual_forwardings.cf: In der Tabelle, die abgefragt wird, befinden sich "normale" Weiterleitungen/Aliase (a@b.de -> b@c.de), Catchall (@b.de -> b@c.de) und die Aliasdomains (@b.de -> @c.de). mysql-virtual_email2email.cf: Hier werden die lokal angelegten Mailboxen (a@b.de) abgefragt. mysql-virtual_domains.cf: Hier stehen die lokalen Domains (b.de).
Eigentlich recht ähnlich hatte ich das Setup auch auf dem alten Server. virtual_alias_domains wurde dort auch nicht benutzt. aber einen gravierenden Unterschied wird es wohl geben.
Was normalerweise funktionieren sollte: virtual_alias_domains=domain_a, domain_b virtual_alias_maps= @domain_a @domain_b #schreibt alle user@domain_a nach user@domain_b um user1@domain_b virtual-mailbox-user1 user2@domain_b virtual-mailbox-user2 usw.
Im Grunde genommen sollte das ja genau so funktionieren, nur eben, dass virtual_alias_domains nicht benutzt wird.
Die virtual mailbox domain sollte nicht Teil der virtual alias domains sein. Eine Domain sollte immer nur zu einer Adressclass gehören (http://www.postfix.org/ADDRESS_CLASS_README.html)
Dann kann ich die Domains aber gar nicht bei virtual_alias_domains eintragen, denn die stehen ja schon bei virtual_mailbox_domains drinnen.
Stehe immer noch etwas auf dem Schlauch, werde aber gleich noch die von Dir angegebenen Quellen beackern.
Viele Grüße, Martin
Hallo Martin, hallo Leute,
Am Mittwoch, 8. Dezember 2010 schrieb Martin Sebald:
Folgende Situation: Es gibt Alias Domains. [...] Schicke ich etwas an domain-a.de wird diese Mail auf jeden Fall angenommen, [...]
Ich habe Deine Configfiles nur kurz überflogen, deshalb die Kurzfassung: Deine Queries sind zu einfach ;-)
Aliase im Stil von @domain1 -> @domain2, die so in der Alias-Datenbank stehen, gelten als Catchall und nehmen daher Mails and alles @domain1 an. Ob die Mail dann hinterher an eine existierende Mailadresse @domain2 weitergeleitet werden kann, ist natürlich die Frage (und wird ggf. mit einem Bounce beantwortet).
Du musst die Queries so bauen, dass die Adressen direkt im SQL auf domain2 umgeschrieben werden.
Wenn Du nicht gerade das Rad neu erfinden willst ;-) guck die mal die Queries an, die PostfixAdmin verwendet (stehen in POSTFIX_CONF.TXT). Diese Queries sehen zwar teilweise etwas kompliziert aus, dafür funktionieren sie aber garantiert ;-)
(Ob sich die Queries mit Deiner Datenbankstruktur vertragen, musst Du selbst rausfinden ;-)
Gruß
Christian Boltz
Hallo Christian!
Folgende Situation: Es gibt Alias Domains. [...] Schicke ich etwas an domain-a.de wird diese Mail auf jeden Fall angenommen, [...]
Ich habe Deine Configfiles nur kurz überflogen, deshalb die Kurzfassung: Deine Queries sind zu einfach ;-)
"Meine" Queries sind gar nix, denn das sind die Queries von ISPConfig3. ;-)
Umso frustrierender, denn das scheint dann bisher keinem dort aufgefallen zu sein...
Aliase im Stil von @domain1 -> @domain2, die so in der Alias-Datenbank stehen, gelten als Catchall und nehmen daher Mails and alles @domain1 an. Ob die Mail dann hinterher an eine existierende Mailadresse @domain2 weitergeleitet werden kann, ist natürlich die Frage (und wird ggf. mit einem Bounce beantwortet).
Ah ich beginne zu verstehen.
Du musst die Queries so bauen, dass die Adressen direkt im SQL auf domain2 umgeschrieben werden.
Uff...
Wenn Du nicht gerade das Rad neu erfinden willst ;-) guck die mal die Queries an, die PostfixAdmin verwendet (stehen in POSTFIX_CONF.TXT). Diese Queries sehen zwar teilweise etwas kompliziert aus, dafür funktionieren sie aber garantiert ;-) (Ob sich die Queries mit Deiner Datenbankstruktur vertragen, musst Du selbst rausfinden ;-)
Habe ich eben getan, hab ja auch noch meine alte Postfixadmin-Config in der Rueckhand. Die Datenbankstruktur ist ne recht aehnliche, es kommt halt alles aus einer Tabelle und wird als "alias", "forward", "catchall" oder "aliasdomain" bezeichnet. Die Eintraege fuer die Alias Domains haben ein @ Zeichen davor, was bei Postfixadmin nicht so ist.
Schwitz, aber das werd ich schon hinkriegen. Ich melde mich wieder, ob positiv oder negativ. :-)
Viele Grüße, Martin
Zitat von Christian Boltz postfix-users@cboltz.de:
Hallo Martin, hallo Leute,
Am Mittwoch, 8. Dezember 2010 schrieb Martin Sebald:
Folgende Situation: Es gibt Alias Domains. [...] Schicke ich etwas an domain-a.de wird diese Mail auf jeden Fall angenommen, [...]
Ich habe Deine Configfiles nur kurz überflogen, deshalb die Kurzfassung: Deine Queries sind zu einfach ;-)
Aliase im Stil von @domain1 -> @domain2, die so in der Alias-Datenbank stehen, gelten als Catchall und nehmen daher Mails and alles @domain1 an. Ob die Mail dann hinterher an eine existierende Mailadresse @domain2 weitergeleitet werden kann, ist natürlich die Frage (und wird ggf. mit einem Bounce beantwortet).
Stimmt so nicht 100%. Bei virtual aliases ist die Abfrage "recursive" d.h. das Ergebnis wird erneut durch die virtual Alias Prüfung gejagt falls es im Bereich virtual alias domains liegt. D.h. eine Umschreibung mit
@domain1 @domain2
führt dazu das jeder user@domain1 nach user@domain2 umgeschrieben wird und falls domain2 ebenfalls eine virtual alias domain ist wird user@domain2 geprüft. Falls natürlich Domain2 eine Remote-Domain ist oder keine Benutzerliste prüft gibt es Backscatter. Siehe dazu "man 5 virtual".
Du musst die Queries so bauen, dass die Adressen direkt im SQL auf domain2 umgeschrieben werden.
Es gibt meistens zwei Möglichkeiten: 1.) In der Anwendungslogik --> Postfix 2.) In der Datenbank --> kompliziertes SQL eventuell mit Stored Procedures
Gruß
Andreas
Hallo Andreas, hallo Martin, hallo Leute,
Am Mittwoch, 8. Dezember 2010 schrieb lst_hoe02@kwsoft.de:
Zitat von Christian Boltz postfix-users@cboltz.de:
Aliase im Stil von @domain1 -> @domain2, die so in der Alias-Datenbank stehen, gelten als Catchall und nehmen daher Mails and alles @domain1 an. Ob die Mail dann hinterher an eine existierende Mailadresse @domain2 weitergeleitet werden kann, ist natürlich die Frage (und wird ggf. mit einem Bounce beantwortet).
Stimmt so nicht 100%. Bei virtual aliases ist die Abfrage "recursive" d.h. das Ergebnis wird erneut durch die virtual Alias Prüfung gejagt falls es im Bereich virtual alias domains liegt. D.h. eine Umschreibung mit
@domain1 @domain2
führt dazu das jeder user@domain1 nach user@domain2 umgeschrieben wird und falls domain2 ebenfalls eine virtual alias domain ist wird user@domain2 geprüft.
Die Umschreibung ist rekursiv, ja.
Allerdings akzeptiert Postfix die Mailadresse als gültig, sobald es @domain1 in der Datenbank gefunden hat - unabhängig davon, wo der Alias hinzeigt und wie oft er noch umgeschrieben wird. Das Ergebnis ist, dass die Mail angenommen wird und dann Backscatter produziert.
Ich habe das gerade nochmal getestet (postfix 2.7.1 auf openSUSE 11.3), dieses Verhalten hat sich nicht geändert. (Naja, mein Test mit telnet auf Port 25 hat beim Greylisting aufgehört - aber grundsätzlich wäre die Mail angenommen worden und hätte dann keine andere Wahl als bouncen gehabt.)
Falls natürlich Domain2 eine Remote-Domain ist oder keine Benutzerliste prüft gibt es Backscatter. Siehe dazu "man 5 virtual".
Nicht nur dann, siehe oben.
Du musst die Queries so bauen, dass die Adressen direkt im SQL auf domain2 umgeschrieben werden.
Es gibt meistens zwei Möglichkeiten: 1.) In der Anwendungslogik --> Postfix
Wäre wohl einen Feature Request wert, damit Alias-Domains auch mit anderen Map-Typen (hash, pcre, ldap, ...) funktionieren.
2.) In der Datenbank --> kompliziertes SQL
Kompliziert ist relativ - man braucht eben mehrere Queries hintereinander, siehe http://postfixadmin.svn.sourceforge.net/viewvc/postfixadmin/trunk/DOCUMENTS/...
(@Martin: Du musst vermutlich beim CONCAT jeweils den '@'-Teil rausnehmen und ein "AND type = 'aliasdomain'" ergänzen. Das Ganze unter der Annahme, dass der Typ in der Spalte "type" steht und ich Deine Mail richtig verstanden habe.)
eventuell mit Stored Procedures
Da diese Queries nur von Postfix gebraucht werden, machen stored procedures nur begrenzt Sinn - es sei denn, Du kennst einen Weg, die Abfragen in der richtigen Reihenfolge mit "first match wins" auszuführen. Wenn also die virtual_alias_maps.cf einen Treffer ergibt, darf virtual_alias_domain_maps*.cf nicht mehr ausgeführt werden - OR und UNION scheiden also aus... [1]
Das würde theoretisch die Abfrage beschleunigen, weil Postfix nicht bis zu 3x bei der Datenbank nachfragen muss. Ob man den Unterschied in der Praxis merkt, ist natürlich eine andere Frage ;-)
Gruß
Christian Boltz
[1] alles, was ich dazu bisher an SQL ausprobiert habe, war wahlweise kaputt (falsches Ergebnis) oder extrem kompliziert
Hallo Christian, hallo Leute,
wir sind nun mal hergegangen und haben das Thema umgesetzt. Und siehe da, es funktioniert.
Habe das Thema dann fuer ISPConfig hier gepostet: http://www.howtoforge.de/forum/showthread.php?t=3773 (inklusive den Abfragen, die wir gebaut haben)
Da wollte man mir erst einmal erzaehlen, dass es schon einen Fix gibt. Der Fix verhindert, dass maildrop lokale Mailboxverzeichnisse anlegt fuer Benutzer, die es gar nicht gibt.
Nach meinem Verstaendnis ist es doch aber so, dass das vielleicht so verhindert wird, aber die Mail trotzdem angenommen werden muesste, oder?!? So war das zumindest mit der Annahme von Mails bevor wir die zusaetzlichen Abfragen eingebaut haben.
Wie ich in dem Thread schreibe, passiert es allerdings immer noch, dass Postfix (bzw maildrop) Mailboxverzeichnisse anlegt und Mails dort speichert, die an nicht vorhandene Aliase geht. Allerdings nur, wenn ich Mails lokal ueber die Shell an diese nicht vorhandenen Aliase versende. Von "aussen" passiert das nicht mehr, hier meldet Postfix brav, dass der Empfaenger nicht in der virtual table gefunden wurde.
Wo hab ich denn da u.U. noch nen Bug drinnen?
Viele Grüße, Martin
Hallo Martin, hallo Leute,
Am Donnerstag, 9. Dezember 2010 schrieb Martin Sebald:
wir sind nun mal hergegangen und haben das Thema umgesetzt. Und siehe da, es funktioniert.
sagichdoch[tm] ;-)
Habe das Thema dann fuer ISPConfig hier gepostet: http://www.howtoforge.de/forum/showthread.php?t=3773 (inklusive den Abfragen, die wir gebaut haben)
Du solltest dort auch die richtige Reihenfolge der Queries (siehe Postfixadmin-Doku) erwähnen. Die kann u. U. wichtig sein (und bei falscher Reihenfolge zu falschen Zieladressen führen).
Postfixadmin erlaubt beispielsweise, auf einer als Alias-Domain weitergeleiteten Domain separate Aliase oder Mailboxen zu erstellen, die dann bevorzugt behandelt werden (also "diese Domain ist eine Alias- Domain, außer es existiert eine passende Mailadresse"). (Keine Ahnung, ob ISPConfig das auch kann/erlaubt.)
Und auch ohne diesen Sonderfall kann die Reihenfolge der Queries entscheidend sein - frag mich jetzt aber bitte nicht nach den Details ;-)
Nach meinem Verstaendnis ist es doch aber so, dass das vielleicht so verhindert wird, aber die Mail trotzdem angenommen werden muesste, oder?!? So war das zumindest mit der Annahme von Mails bevor wir die zusaetzlichen Abfragen eingebaut haben.
Vermutlich schon. Ich tippe mal, dass diese Mails dann erstmal bei Dir lokal mit einem 4xx "maildir doesn't exist" oder so in der mailq rumschwirren und irgendwann gebounct werden.
Wie ich in dem Thread schreibe, passiert es allerdings immer noch, dass Postfix (bzw maildrop) Mailboxverzeichnisse anlegt und Mails dort speichert, die an nicht vorhandene Aliase geht. Allerdings nur, wenn ich Mails lokal ueber die Shell an diese nicht vorhandenen Aliase versende. Von "aussen" passiert das nicht mehr, hier meldet Postfix brav, dass der Empfaenger nicht in der virtual table gefunden wurde.
Wo hab ich denn da u.U. noch nen Bug drinnen?
Schuss ins Blaue: - einmal zu oft no_address_mappings konfiguriert, z. B. für localhost:25 bei deaktiviertem Amavis? Bitte in der master.cf nachsehen. - permit_mynetworks zu weit oben? (Wobei das aufgrund des Fehler- Verhaltens eher unwahrscheinlich ist)
Falls es das nicht ist, bitte die Ausgabe von "postconf -n" und die master.cf ohne Kommentare posten ("grep '^[^#]' master.cf")
Gruß
Christian Boltz
participants (3)
-
Christian Boltz
-
lst_hoe02@kwsoft.de
-
Martin Sebald