PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit $mydestination und MySQL



Kaimane
04.05.04, 23:36
Hallo!

Habe Postfix so konfiguriert, dass es alle Daten aus der MySQL-DB ausließt. Nun habe ich aber das Problem, dass ich trotz DB in $mydestination meine Domains die auf den Server zeigen eintragen muss, damit jemand, der mir eine Email schickt, keine Fehlermeldung a la "554: Recipient address rejected: Relay access denied" bekommt.
Doch was muss ich umstellen / umschreiben, damit Postfix auch die Domainnamen aus der DB ließt und ich diese nicht mehr in $mydestination eintragen muss?

Hier meine aktuelle main.cf
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
setgid_group = postdrop
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no
myhostname = mail.xxx.de

# basic settings
myorigin = xxx.de
mydomain = xxx.de
mydestination = $myhostname, localhost.$mydomain, $mydomain
mynetworks = 127.0.0.0/8
relayhost =

mailbox_command =
mailbox_size_limit = 0
recipient_delimiter = +

# virtual domain and delivery settings
virtual_mailbox_limit = 10000000
virtual_mailbox_base = /home/vmail/
virtual_uid_maps = static:1008
virtual_gid_maps = static:1008
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf
transport_maps = mysql:/etc/postfix/mysql-transport.cf
virtual_maps = mysql:/etc/postfix/mysql-virtual.cf

local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

message_size_limit = 10000000

Vielen Dank schon mal im Voraus!

Terran Marine
05.05.04, 09:01
Doch was muss ich umstellen / umschreiben, damit Postfix auch die Domainnamen aus der DB ließt und ich diese nicht mehr in $mydestination eintragen muss?


Wie sieht denn deine transport Table in mysql aus ?

Liste mal ein paar Zeilen auf.

Gruß
Terran

Kaimane
05.05.04, 11:09
Die Tabelle "Transport" in MySQL sieht so aus:
id domain destination
1 xxx.de virtual:
3 yyy.de virtual:
Die mysql-transport.cf folgendermaßen:
user = postfix
password = xxx
dbname = provider
table = transport
select_field = destination
where_field = domain
hosts = localhost


Ist das denn alles so richtig?

Terran Marine
05.05.04, 12:47
Die Tabelle "Transport" in MySQL sieht so aus:
id domain destination
1 xxx.de virtual:
3 yyy.de virtual:
Die mysql-transport.cf folgendermaßen:
user = postfix
password = xxx
dbname = provider
table = transport
select_field = destination
where_field = domain
hosts = localhost


Ist das denn alles so richtig?

Fehler von mir,

ich meinte die virtual Tabelle, kannst du die bitte mal posten ?

Kaimane
05.05.04, 13:13
Hier kommt die Virutal-Tabelle :) :
id email destination
3 mail@xxx.de mail@xxx.de
6 hausverwaltung@yyy.de hausverwaltung@yyy.de
7 architektur@yyy.de architektur@yyy.de
8 rainer@yyy.de rainer@yyy.de

Thx a lot!

Terran Marine
05.05.04, 13:19
Hier kommt die Virutal-Tabelle :) :
id email destination
3 mail@xxx.de mail@xxx.de
6 hausverwaltung@yyy.de hausverwaltung@yyy.de
7 architektur@yyy.de architektur@yyy.de
8 rainer@yyy.de rainer@yyy.de

Thx a lot!


Dachte ich mir doch,

zu jeder Domain, für die postfix zuständig sein soll, muss ein extra Domäneneintrag gesetzt werden, also :

yyy.de anywhere

Der Begriff "anywhere" ist beliebig, da kann auch "Terran_ist_cool" stehen, es muss nur irgendwas da stehen.

Gruß
Terran

Kaimane
05.05.04, 13:45
Das heißt also:
id email destination
2 xxx.de xxx_domain
3 mail@xxx.de mail@xxx.de
5 yyy.de yyy_domain
6 hausverwaltung@yyy.de hausverwaltung@yyy.de
7 architektur@yyy.de architektur@yyy.de
8 rainer@yyy.de rainer@yyy.de

Ist das das, was du meinst?

Terran Marine
05.05.04, 13:49
Das heißt also:
id email destination
2 xxx.de xxx_domain
3 mail@xxx.de mail@xxx.de
5 yyy.de yyy_domain
6 hausverwaltung@yyy.de hausverwaltung@yyy.de
7 architektur@yyy.de architektur@yyy.de
8 rainer@yyy.de rainer@yyy.de

Ist das das, was du meinst?

2 und 5 ja.

3,6,7,8 sind Weiterleitungen auf sich selbst, die würde ich weglassen.

Kaimane
05.05.04, 13:57
Nachdem ich die Domain yyy.de aus $mydestination in der main.cf von Postfix entfernt habe und die Einträge in der Virtual-Tabelle hinzugefügt habe bekomme ich, wenn ich nun eine Email an rainer@yyy.de schicke folgende Fehlermail zurück:
<rainer@yyy.de>: unknown user: "rainer@yyy.de"

Da stimmt doch was nicht :(

Terran Marine
05.05.04, 15:22
Nachdem ich die Domain yyy.de aus $mydestination in der main.cf von Postfix entfernt habe und die Einträge in der Virtual-Tabelle hinzugefügt habe bekomme ich, wenn ich nun eine Email an rainer@yyy.de schicke folgende Fehlermail zurück:
<rainer@yyy.de>: unknown user: "rainer@yyy.de"


Gibt es denn den User auf deinem System ?

Und wie legst du die Mails ab ? (mbox, maildir, cyrus .. etc ) ?

Gruß
Terran

Kaimane
05.05.04, 16:13
Nein, den User gibt es natürlich nicht. Der wird ja aus der MySQL-DB ausgelesen. Also ist er quasi ein virtueller User.
Die Mails werden von Postfix über Maildir in /home/vmail abgelegt. Für jede Domain legt Postfix ja einen eigenen Ordner an und darunter noch einen Ordner für die entsprechende Email-Addy.

Was nur komisch ist, wenn ich den Eintrag yyy.de aus der Virtual-Tabelle entferne kommt der Fehler 554 '[...] Access denied'. Ist der Eintrag vorhanden schreibt Postfix eine Fehlermail zurück "Unknown user" (die Fehlermeldung von eben). Natürlich alles nur dann, wenn ich die Domain yyy.de aus $mydestination in der main.cf entferne. Ansonsten läuft alles wunderbar!

Terran Marine
05.05.04, 16:27
Was nur komisch ist, wenn ich den Eintrag yyy.de aus der Virtual-Tabelle entferne kommt der Fehler 554 '[...] Access denied'. Ist der Eintrag vorhanden schreibt Postfix eine Fehlermail zurück "Unknown user" (die Fehlermeldung von eben). Natürlich alles nur dann, wenn ich die Domain yyy.de aus $mydestination in der main.cf entferne. Ansonsten läuft alles wunderbar!

Das ist nicht komisch, sondern logisch ;)

Wenn der Domainname nicht in der virtual-table und nicht in mydestination steht, fühlt sich postfix nicht dafür zuständig und blockt die Email.

Ist einer der beiden Einträge vorhanden, nimmt postfix die Mail zur internen Weiterverabeitung an und scheitert erst beim ausliefern, da der User unbekannt ist.

Hast du denn User mal versucht anzulegen ?

Gruß
Terran

Kaimane
05.05.04, 16:36
Nein hab ich noch nicht. Wenn ich den anlege muss der Username rainer sein? Kannst du mir vl kurz sagen, was ich zu beachten habe?

<Nachtrag>
In der Users-Tabelle ist allerdings rainer@yyy.de als User angelegt. Steht dort zwar in der Email-spalte, aber ist ja im Prinzip der User. Wenn ich die Emails per POP3 anrufe, wird ja niergenswo anders nach den Userdaten gesucht.

Terran Marine
05.05.04, 16:50
Nein hab ich noch nicht. Wenn ich den anlege muss der Username rainer sein? Kannst du mir vl kurz sagen, was ich zu beachten habe?

Du musst in der virtual-mailbox-maps Tabelle in mysql einen User mit dementsprechenen Pfaden und Rechten anlegen.

Das Verzeichnis muss natürlich auch existieren inkl richtiger Rechte.

Gruß
Terran

Kaimane
05.05.04, 17:08
Das hab ich doch gemacht, siehe hier:
id email password name uid gid homedir maildir quota postfix
8 rainer@yyy.de xxxyyy Dr. Norten 1008 1008 /home/vmail yyy.de/rainer@yyy.de/ Y

Das Verzeichnis /home/vmail/yyy.de/rainer@yyy.de/ besteht und der User vmail auch. UID und GID sind 1008, so wie es eingestellt ist. Nur, was ist nun falsch daran?

Terran Marine
05.05.04, 18:08
Das hab ich doch gemacht, siehe hier:
id email password name uid gid homedir maildir quota postfix
8 rainer@yyy.de xxxyyy Dr. Norten 1008 1008 /home/vmail yyy.de/rainer@yyy.de/ Y

Das Verzeichnis /home/vmail/yyy.de/rainer@yyy.de/ besteht und der User vmail auch. UID und GID sind 1008, so wie es eingestellt ist. Nur, was ist nun falsch daran?

Mhh schwierig, sieht eigentlich gut aus.

Läuft postfix bzw. Teile davon in einer chroot Umgebung ?

Gruß
Terran

Kaimane
05.05.04, 19:40
Nein, das wäre mir neu. Also ich habe das nicht mit chroot eingerichtet. Aber um sicher zu gehen, wie kann man das denn feststellen?

Terran Marine
05.05.04, 22:59
Nein, das wäre mir neu. Also ich habe das nicht mit chroot eingerichtet. Aber um sicher zu gehen, wie kann man das denn feststellen?

Poste mal deine master.cf

Gruß
Terran

Kaimane
05.05.04, 23:45
Hier die master.cf
# ================================================== ========================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (50)
# ================================================== ========================
smtp inet n - - - - smtpd
#628 inet n - - - - qmqpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - - 300 1 qmgr
#qmgr fifo n - - 300 1 nqmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
flush unix n - - 1000? 0 flush
smtp unix - - - - - smtp
showq unix n - - - - showq
error unix - - - - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

Dazu muss ich sagen, ich habe sie so gelassen, wie sie von Postfix eingerichtet wurde. Habe nachträglich nichts dran verändert.

Terran Marine
05.05.04, 23:50
Hier die master.cf
# ================================================== ========================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (50)
# ================================================== ========================
smtp inet n - - - - smtpd
#628 inet n - - - - qmqpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - - 300 1 qmgr
#qmgr fifo n - - 300 1 nqmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
flush unix n - - 1000? 0 flush
smtp unix - - - - - smtp
showq unix n - - - - showq
error unix - - - - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

Dazu muss ich sagen, ich habe sie so gelassen, wie sie von Postfix eingerichtet wurde. Habe nachträglich nichts dran verändert.

Standardmässig richtet Debian 3.0 postfix in einer chroot Umgebung ein,
setzt mal beim smtpd das chroot auf "n", sonst kann es probleme mit dem mysql Zugriff über Socket geben.

Gruß
Terran

Kaimane
06.05.04, 01:00
Postfix läuft dohc chrootet. Ist aber weiter nicht schlimm, da ich meine Emails ja über POP3 bzw. IMAP abrufen kann. Der Tipp mit der master.cf hat nichts gebracht; genau das selbe Spiel wie vorher ...

Kaimane
06.05.04, 10:09
ENDLICH IST ES GESCHAFFT!
Wenn man sich hier (http://www.linuxforen.de/forums/showpost.php?p=822113&postcount=1) mal ganz genau die Zeile $mydestination anschaut, sieht man, dass der Eintrag $transport_maps, der für die verschiedenen Domains zuständig ist, fehlt. Nach dem Nachtrag dieser Variable läuft nun alles einwandfrei!!

Vielen Dank noch mal an Terran Marine, der mir so sehr geholfen hat!
Und danke an den Autor von phpmywebhosting (http://phpmywebhosting.sf.net), der mir ebenfalls sehr viel geholfen hat und es immer noch tut.