• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Postfix, virtuelle Mailboxen mit mySql und Catchall-Problem

Status
Für weitere Antworten geschlossen.

nils-l

Member
Hallo!
Habe Postfix jetzt endlich so eingerichtet, dass es virtuelle Mailboxen aus einer mySql-Tabelle ausliest und ich in einer zweiten Tabelle Weiterleitungen anlegen kann. So weit, so gut!

Nun aber mein Problem:
Ich habe z.B. zwei Accounts: user1@domain.tld und user2@domain.tld, die können auch prima Mails empfangen.
Wenn ich nun eine Catchall-Weiterleitung einrichte ("@domain.tld" "user1.domain.tld"), werden auch Mails an user2@domain.tld weitergeleitet. Irgendwie ja auch logisch, aber kann ich das irgendwie verhindern? Also sowas wie "leite nur mails zu user1@domain.tld weiter, falls kein eigener account existiert"

Hoffe ihr könnt mir helfen und sag schonmal Danke!
 

crazyrolf

Advanced Hacker
Wie hast du das gemacht?

Liest du mit Postfix jetzt nur noch die virtuelle mysql Datei aus?

Oder wie?

Bitte deine Einträge dazu in der main.cf posten.
 

crazyrolf

Advanced Hacker
Ich hab das zwar noch nicht gemacht, aber würde es so versuchen:

Du packst alle User für die du eine Weiterleitung haben möchtest in die mysql Tabelle, aber nicht die catch-all!

Die catch-all würde ich in die Datei virtual schreiben.

Also etc/postfix/virtual:

Inhalt:
@domain.de user1@domain2.de

Jetzt die main.cf:

Reihenfolge beachten!

virtual_maps = mysql:/etc/postfix/forward.mysql,hash:/etc/postfix/virtual


So könnte es gehen, wenn Postfix die Reihenfolge beachtet!

Also wenn der User nicht in der mysql-Tabelle gefunden wird, dann die Datei virtual zum Zug kommt und die catch-all Funktion greift.
 
OP
N

nils-l

Member
Hallo!

Ich lese alle von Postfix benötigten Daten aus mySql aus.
Die entsprechenden Stellen in der main.cf:
Code:
relay_domains = $mydestination, mysql:/etc/postfix/transport.mysql
virtual_mailbox_maps = mysql:/etc/postfix/virtboxes.mysql
virtual_maps = mysql:/etc/postfix/virtual.mysql
transport_maps = mysql:/etc/postfix/transport.mysql
Die mySql Tabellen sehen so aus:
Code:
Transport:
domain (xyz.de)
transport (virtual:)

Virtboxes:
address (abc@xyz.de; def@xyz.de)
dir (/var/virtboxes/xyz.de/abc/; /var/virtboxes/xyz.de/def/)
uid (user-id; user-id)
password (passwort; passwort)
gid (gruppen-id; gruppen-id)

Virtual:
from (@xyz.de)
to (abc@xyz.de)

Es soll ganz gerne auch alles aus der Datenbank kommen...
 

crazyrolf

Advanced Hacker
Teste doch mal so wie ich es geschrieben habe.

Ich weiß nicht genau ob das nur mit mysql geht?

Normal nimmt er ja das was er zuerst findet, wenn dann die addi nicht da ist, sollte die catch-all genommen werden.
 
OP
N

nils-l

Member
Hm, ist ja leider noch nicht so ganz das, was ich will...

Bei Deinem Vorschlag würde er schauen, ob in der mySql eine Weiterleitung (virtual_maps) existiert und diese ggfs. benutzen. Falls keine existiert, nimmt er die CatchAll aus der Hash-Datei.

Er soll aber schauen, ob ein Postfach (virtual_mailbox_maps) existiert und die Mail dorthin ausliefern. Nur wenn kein Postfach da ist, soll die Mail umgeleitet werden.
 
OP
N

nils-l

Member
Oh, sorry, es geht tatsächlich...
Aber warum? Ist in meiner vorigen Antwort ein Denkfehler?
 

crazyrolf

Advanced Hacker
Ist doch genau das was ich gesagt habe.

Also geht es so wie ich dachte oder was?

So könnte es gehen, wenn Postfix die Reihenfolge beachtet!

Also wenn der User nicht in der mysql-Tabelle gefunden wird, dann die Datei virtual zum Zug kommt und die catch-all Funktion greift.
 
OP
N

nils-l

Member
Entweder hast Du nicht verstenden, was ich mit

nils-l schrieb:
Bei Deinem Vorschlag würde er schauen, ob in der mySql eine Weiterleitung (virtual_maps) existiert und diese ggfs. benutzen. Falls keine existiert, nimmt er die CatchAll aus der Hash-Datei.

Er soll aber schauen, ob ein Postfach (virtual_mailbox_maps) existiert und die Mail dorthin ausliefern. Nur wenn kein Postfach da ist, soll die Mail umgeleitet werden.

meinte, oder ich vestehe Dich nicht :)

Meine Logik sagt mir dass er bei
Code:
virtual_maps = mysql:/etc/postfix/forward.mysql,hash:/etc/postfix/virtual
zwischen dem mysql und hash eintrag prüft, ob eine Mailbox existiert...
Oder bin ich jetzt ganz doof?! :D :roll: :oops:
 

crazyrolf

Advanced Hacker
Wenn es so geht wie ich meine, sieht er erst in die mysql-db ob da ein Eintrag vorhanden ist.
Ist der user da, wird die Mail an diesen user ausgeliefert.
Ist der user nicht da, sollte die catch-all aus der virtual zum zuge kommen und die Mail an diese Stelle liefern.

Das ist doch genau das was du willst oder nicht?
 
OP
N

nils-l

Member
Sorry erstmal für die späte Antwort...

crazyrolf schrieb:
Ist der user nicht da, sollte die catch-all aus der virtual zum zuge kommen und die Mail an diese Stelle liefern.
Ja, genau das will ich.

Die user stehen in einer MySQL Tabelle, für die Weiterleitungen habe ich folgendes, wie Du gesagt hast:
Code:
virtual_maps = mysql:/etc/postfix/forward.mysql,hash:/etc/postfix/virtual
Die MySQL Tabelle ist natürlich eine andere als die, wo die User drin stehen.
Trage ich einen CatchAll jetzt in der MySQL-Tabelle ein, werden auch Mail weitergeleitet, für die ein User (in der anderen) Tabelle existiert. Trage ich die Weiterleitung in der Hash ein, wird nur weitergeleitet, wenn der User nicht existiert.
Das ist das, was mich verwirrt....
 

crazyrolf

Advanced Hacker
Das wird mit der Abfrage von MySql zusammen hängen.

Der ist es wohl egal, wer oder was zuerst kommt, die nimmt dann wohl alles was sie findet und schickt es da hin.
 
Status
Für weitere Antworten geschlossen.
Oben