PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Postfix mit cyrus mysql und amavis



panchovilla
29.06.07, 23:20
Hallo und schönen Tag!

Nach endlosem Rumprobieren versuche ich mal wieder hier mein Glück.

Ich soll für meinen neuen Arbeitgeber einen Mailserver aufsetzen, der virtuelle Domains bietet, mit Postfix und Cyrus arbeitet und mysql Datenbanken benutzt.

Die sasl-authentifizierung mit auxprop sql läuft tadellos.
Die DB für die accounts steht und die Abfragen laufen, die mail wird zugestellt und landet in der cyrus-typischen Form im Verzeichnis /var/spool/cyrus.


Soweit so gut.


Nun zu meinem Problem:

Da es sich eigentlich ausschliesslich um virtuelle Domains handelt, kommen diese in der postfix/main.cf unter mydestinations nicht vor.

Damit also nicht das relayen für diese domains automatisch geblockt wird, findet via:



virtual_alias_maps =
mysql:/etc/postfix/mysql-user.cf,
mysql:/etc/postfix/mysql-alias.cf

virtual_alias_domains =
mysql:/etc/postfix/mysql-domain.cf


Datenbankabfrage ein Zuordnen der User der virtuellen Domains statt.

Die Zuordnung erfolgt via select Anweisungen, wie für die neueren Postfix-Versionen angegeben.


Beispiel [/etc/postfix/mysql-user.cf]
query = SELECT dest FROM virtual WHERE alias='%s' AND status='1'


Auch das klappt prima:

snip:
"SELECT dest FROM virtual WHERE alias='frank@spieltkeinerolle.com' AND status='1' "[aus dem mysql.log]




dest muß dann die cyrusverträgliche Form "frank.spieltkeinerolle.com" (ohne at) haben, damit sich cyrus zuständig fühlt und die Mail angenommen wird.

Das wiederum führt dann dazu, das der Befehl noch einmal aufgerufen wird und an frank.spieltkeinerolle.com dann noch einmal @$myhostname
(nach: myhostname = host.local.domain) angehängt wird.(Wohl weil eine qualified Mail addy erwartet wird)

Für den reinen Postfixtransport mit Cyrus spielt dieses Extraloop keine Rolle und die schrägen Header könnte man mit einer canonical wieder bereinigen.

Aber nun kommt amavis ins Spiel.

Ist amavis eingeschleift, bekommt es nur die 2. Variante zu sehen und schafft es so nicht, den Usern in der amavisdb die entsprechenden Policies zuzuordnen, weil es die normale Mailaddy erwartet. Spamfilter funktioniert, clamav funktioniert, aber nur mit globalen und nicht mit per user Einstellungen.

Kennt jemand das Problem und hat einen Hinweis?

Bei Anfrage liefere ich gerne auch relevante Teile der logs und confs.

Mir wäre sehr geholfen, da ich an diesem Punkt schon lange bastele und mein Chef mich auch schon schräg anschaut deswegen.

Roger Wilco
30.06.07, 00:38
dest muß dann die cyrusverträgliche Form "frank.spieltkeinerolle.com" (ohne at) haben, damit sich cyrus zuständig fühlt und die Mail angenommen wird.
Warum benutzt du nicht einfach das Virtual Domains Feature von Cyrus IMAP? Dann nimmt deliver auch E-Mails der Form localpart@example.com an.

Ansonsten gäbe es noch ein brauchbares Howto unter http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/, in dem alles beschrieben wird.

cane
01.07.07, 03:20
Ich mache es so:
http://www.open-xchange.com/wiki/index.php?title=Open_Xchange_Installation

mfg
cane

panchovilla
01.07.07, 12:55
Hallo,

ich danke euch sehr für die Antworten.

Ich versuche es gerade mit einem etwas schmutzigen Trick, da ich wohl nicht die Zeit haben werde, einen komplett neuen Server aufzubauen.

Das Howto von Delouw(neben vielen anderen) hatte ich schon zu Rate gezogen, als es darum ging, die mysql-Abfragen zu erstellen.

Virtuelle Domänen durch cyrus2.2 verwalten zu lassen scheitert daran, daß ich den Transport nicht richtig konfiguriert bekomme. Die READMEs zu diesem neuen Feature sind spärlich und überfordern mich scheinbar.
Ich habe eine virtuelle domain zwar anlegen können (/unter var/spool/cyrus/mail/domains) und das Feature in der imapd.conf richtig freigeschaltet (mit loginrealms, virtdomains und defaultdomain eintrag), aber Postfix ignoriert das (bzw bin ich zu blöde die richtigen Parameter für den Transport in der master.cf zu finden).


Also mache ich jetzt Folgendes:

in der main.cf:

mydestinations = localhost, localhost.localdomain, mysql:/etc/postfix/mysql-domains.cf (hängt natürlich von der jeweiligen Struktur ab)
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual.cf

Die mysql_virtual.cf lautet wie folgt:



user = xxxx
passwd = xxxx
db_name = mail
query = select dest from virtual where alias='$u@$d' and status = '1'

(Ich schreibe das gerade aus dem Kopf, weil der Cisco-vpnclient mich abstürzenderweise nervt, also nicht Wort für Wort nehmen!)

Der Trick ist folgender:

Ich erstelle eine domain xyz.com, füge die in die domain Tabelle meiner DB ein und hänge sie an jedem Eintrag der Spalte dest aus der Tabelle virtual an.
(wenn man die Abfragen in etwa nach dem Delouw-Howto erstellt hat.Individuell haben wir noch ein paar Besonderheiten, die hier nur verwirren würden)

Postfix arbeitet zuerst die virtual_alias_map ab und erhält so eine dest (destination). Vorher war die in der cyrus-verträglichen Form (Punkt statt 'at'), nun mit angehängter dummy-domain.

Die dest wandert dann an den cleanup server von postfix, von dort zum Trivial_rewrite. Der hängt, so es keine qualified Addresse ist,normalerweise 'at'$myorigin an. Durch den xyz.com Anhang kürze ich das address rewriting ab, die Datenbank findet den Eintrag beim ersten Mal und wenn nachher die mail von amavis zurückwandert, schneidet cyrus den Teil ab und stellt zu.


Nicht elegant aber geht.

Grüße,
Frank

panchovilla
02.07.07, 16:48
Hallo noch einmal:

Cyrus2.2 Postfix und virtual sind ganz banal zu händeln(war ja klar):

Also in der imapd.con
virtdomains = yes
defaultdomain = $die.alte.domain(für user, die nach der alten Methode angelegt sind)

In der master.cf von Postfix
den cyrus unix transport suchen und bei den flags

flags= user=cyrus argv=/usr/bin/cyrdeliver -r ${sender} -m ${extension} ${recipient}

Unterschied: statt der Variabel ${user} wird dieVariabel ${recipient} abgefragt und schon gehts.

Grüße.