Exim4: Mails Recjet

Postfix, QMail, Sendmail, Dovecot, Cyrus, Courier, Anti-Spam
mascha
Posts: 22
Joined: 2003-11-07 15:01

Exim4: Mails Recjet

Post by mascha » 2004-07-30 09:20

Hallo,

ich habe folgendes Problem:

Ich nutze auf meinem Mailserver eine Kombination aus Exim4 (heavy with mysql), Courier-IMAP SSL, Amavis, Spamassassin, Clamv und verschiedene Tools zur Spamerkennung (Razor, Pyzor und DCC).

Alles läuft im Grunde genommen einwandfrei. Allerdings möchte ich Emails, die an lokale nichtexistierende Empfänger geschichkte werden, eigentlich sofort bouncen oder zumindest rejecten. Bisher ist es so, dass nachgeschaut wird, ob der Nutzer in der DB existiert. In der DB steht er nicht drin - draufhin verbleibt die Mail im Spool-Verzeichnis und wird mehrfach veruscht zuzustellen. Nach 3/4 Tagen enden die Zustellveruscgen und die Mail ist "frozen" (mailq). OK - ich kann Exim4 zum einen so konfigurieren, dass die frozen Mails irgendwann einmal rejected werden. Allerdings wäre mir lieber, dass Exim schon während der Phase der Anlieferung der Mails nachschaut, ob die lokale Mailbox existiert und falls nicht die Annahme der Mail verweigert.

Ich nutze dabei die gesplitteten Konfigfiles von Exim - d.h. ich habe im /etc/exim4/conf.d/ die Möglichkeit, u.a. acl's, router oder transports zu definieren.

Um das Ziel zu verwirklichen, müßte ich eigentlich eine acl-rule anlegen. Allerdings bin ich aus den Beispielen auf exim.org nicht so richtig schlau geworden.

Hat jemand von Euch vielleicht einen Tip für mich, wie ich o.g. Problem lösen kann?

Vielen Dank für Eure Hilfe und Unterstützung!

Mascha

dodolin
RSAC
Posts: 4009
Joined: 2003-01-21 01:59
Location: Sinsheim/Karlsruhe

Re: Exim4: Mails Recjet

Post by dodolin » 2004-07-30 12:20

Um das Ziel zu verwirklichen, müßte ich eigentlich eine acl-rule anlegen.
Nicht direkt.

Du brauchst nur

verify = recipient

Das funktioniert aber nur, wenn der Amavis-Router "no_verify" ist.

Die elegantere Lösung wäre aber, komplett auf solche Krücken wie Amavis zu verzichten und stattdessen z.B. exiscan-acl zu nutzen. Amavis ist bei Exim IMHO wirklich überflüssig und macht nur unnötigen Ã?rger. Sandwitch-Setups sind immer irgendwie Murks.

mascha
Posts: 22
Joined: 2003-11-07 15:01

Re: Exim4: Mails Recjet

Post by mascha » 2004-08-01 10:00

dodolin wrote:
Um das Ziel zu verwirklichen, müßte ich eigentlich eine acl-rule anlegen.
Nicht direkt.

Du brauchst nur

verify = recipient

Das funktioniert aber nur, wenn der Amavis-Router "no_verify" ist.
Hallo Dodolin,

vielen Dank für Deine Hilfe!

Hmm .. in der betreffenden acl ist tatsächlich "verify = recipient" schon eingetragen.

Augenscheinlich scheint es also am Amavis-Router zu liegen.
Im Router-Verzeichnis unter /etc/exim4/conf.d/ habe ich an sich nur zwei Files, die irgendetwas mit Amavis zu tun haben:

... ein 650_domainname_amavis_mysql mit folgendem Inhalt:

Code: Select all

amavis: debug_print = "R: amavis for $local_part@$domain" driver = manualroute transport = amavis route_list = "* localhost byname" self = send condition =  
${if and { 
{eq {${lookup mysql{SELECT m.amavisok  
FROM address a LEFT JOIN mailbox m ON a.mailboxid=m.id  
WHERE (a.domain='${quote_mysql:$domain}')  
AND (a.local='${quote_mysql:$local_part}' OR a.local IS NULL)  
ORDER BY a.local DESC LIMIT 1}}}{1}  
}  
{!eq {$interface_port}{10025}}  
}{1}{0}} 

... und ein 900_amaris_mysql_user mit folgendem Inhalt:

Code: Select all

mysql_user: driver = accept condition = ${lookup mysql {SELECT local FROM address 
WHERE local='${quote_mysql:$local_part}'  
AND domain='${quote_mysql:$domain}'  
AND mailboxid IS NULL}{0}{1}} retry_use_local_part transport = ${lookup mysql {SELECT  
IF(m.mode='DIR', 'mysql_delivery', 'mysql_file_delivery')  
FROM address a LEFT JOIN mailbox m ON a.mailboxid=m.id  
WHERE (a.domain='${quote_mysql:$domain}')  
AND (a.local='${quote_mysql:$local_part}' OR a.local IS NULL)  
ORDER BY a.local DESC LIMIT 1}  
{$value}  
{mysql_delivery}} 
Mit scheint der letzte Router der Ort zu sein, an dem eine Art "verify" des Empfängers gemacht wird.

Könntest Du mir einen Tip geben, was ich hier noch ändern muß, damit das verify = recipient in meiner acl Wirkung entfaltet?

Vielen Dank für Deine/Eure Hilfe!

Viele Grüße!

Mascha

dodolin
RSAC
Posts: 4009
Joined: 2003-01-21 01:59
Location: Sinsheim/Karlsruhe

Re: Exim4: Mails Recjet

Post by dodolin » 2004-08-01 12:29

Könntest du die Code-Blöcke mal so formatieren, damit man das auch lesen kann?!
Das funktioniert aber nur, wenn der Amavis-Router "no_verify" ist.
Also, guckst du, spec.txt, Kapitel 15 Generic Options for Routers, suchst dort nach "verify" und Kapitel 6.7 Boolean Options. Außerdem empfehlenswert: Kapitel 3.9 Processing an address for verification.

Aber auch diesen Hinweis wiederhole ich dir gerne:
Die elegantere Lösung wäre aber, komplett auf solche Krücken wie Amavis zu verzichten und stattdessen z.B. exiscan-acl zu nutzen. Amavis ist bei Exim IMHO wirklich überflüssig und macht nur unnötigen Ã?rger. Sandwitch-Setups sind immer irgendwie Murks.
IOW: Amavis ist Schei.Ã?e. Es mag vielleicht MTAs geben, da geht's nicht ohne, aber bei Exim ist das IMHO wirklich so gut wie nie nötig.

HTH.

mascha
Posts: 22
Joined: 2003-11-07 15:01

Danke

Post by mascha » 2004-08-08 15:58

Hallo Dodolin,

vielen Dank für Deinen Tip!

Letztlich hat es doch genauso funktioiert, wie von Dir vorgeschlagen - das Problem lag letztendlich in meinem mysql_user - Router. Dieser wurde auch im Rahmen der Recipient-acl angesprungen - allerdings waren die MySQL-Befehle noch nicht in der "optimalen Reihenfolge", um auf den fehlenden local-Part zu reagieren. Jetzt klappt es aber!

Nochmals vielen Dank!

Mascha