Re: [Exim-users-de] Exim, Vexim, Sieve und Spam

トップ ページ
このメッセージを削除
このメッセージに返信
著者: vol
日付:  
To: exim-users-de
題目: Re: [Exim-users-de] Exim, Vexim, Sieve und Spam
Hallo Nicola,

Nicola Tiling schrieb:
>> Ich bin mir da gerade nicht so sicher, ob Du in einer DATA-ACL
>> $local_part und $domain überhaupt hast. Denn es könnten ja auch
>> mehrere
>> Empfänger sein.
>
>
>
> Ich glaube nicht. Ich mach die Abfrage auf die user Datenbank in
> "acl_check_rcpt" und schreibe das Ergebnis dort in eine acl_m Variable
> die ich in "acl_check_data" abfrage.


Ich glaube auch, das in einer acl_smtp_data die einzelnen Empfänger
einer Mail nicht über $local_part und $domain verfügbar sind. Aber in
einer acl_smtp_rcpt. Zum Beispiel aus dem Abschnitt "11.9 Expansion
variables" der spec.txt:

<snip>
$local_part

When an address is being routed, or delivered on its own, this variable
contains the local part. When a number of addresses are being delivered
together (for example, multiple RCPT commands in an SMTP session),
$local_part is not set.
</snip>

> Unten auch die SQL Abfrage. Wobei
> die DB von mir angepasst wurde. ich finds auch praktischer /
> übersichtlicher die Abfragen am Anfang der exim configure in Macros zu
> definieren, statt in der Konfiguration von acls, routern usw. auch
> noch SQL lesen zu müssen.
>
> acl_check_rcpt:
> ===============
> set acl_m4     = ${lookup pgsql{HEAD_SCORE}}

>
>
> acl_check_data:
> ===============
> condition      = ${if > {$spam_score_int}{$acl_m4} {1}{0}}

>
>
>
> HEAD_SCORE = select users.sa_tag * 10 FROM users INNER JOIN  
> domains_view \
>         ON (users.domain_id=domains_view.domain_id) \
>         WHERE users.localpart = '${quote_pgsql:$local_part}' \
>         AND domains_view.domain = '${quote_pgsql:$domain}' \
>         AND users.on_spamassassin = '1' \
>         AND users.enabled = '1'


Die Frage hierbei ist, was die Variable acl_m4 enthält, falls die Mail
mehr als einen Empfänger hat. Tom Kistner hat in der Doku zu exiscan
schon vor Jahren geschrieben, dass die acl_smtp_rcpt für jeden einzelnen
Empfänger durchlaufen wird, aber die acl_smtp_data nur einmal pro Mail
(dies steht auch in der spec.txt). Der Wert der Variable acl_m4 wird
wahrscheinlich der Wert des letzten Empfängers sein.

In der Doku stehen zwei Alternativen: entweder wird das Exim so
konfiguriert, dass Mail grundsätzlich immer nur für einen Empfänger
angenommen wird, oder man gruppiert die Empfänger. Der "HEAD_SCORE" des
ersten Empfängers wird in die acl-Variable gespeichert. Wenn der
"HEAD_SCORE" eines folgenden Empfängers ungleich diesem Wert ist, wird
dieser Empfänger in der acl_check_rcpt "defered", also temporär
abgelehnt. In meiner Konfig sieht dies so aus (aus der acl_smtp_rcpt):

<snip>
# vol 041210 defer, wenn adressat andere scanprefs hat
#            nicht testen, wenn von relay_hosts (enthaelt av_hosts)
#            was passiert bei der ersten adresse (acl_m0 ist leer!)?
   defer  condition = ${if eq {${acl_m0}}{}{0}{1}}
          condition = ${if eq {${acl_m0}}{CDB_SCANPREFS}{0}{1}}
          log_message = $local_part@$domain hat nicht scanpref $acl_m0
          message = please try this address in the next batch
</snip>


Deine acl_m4 ist meine acl_m0. Wenn die Variable leer ist, ist dies der
erste Enmpfänger einer Mail und die defer-Regel greift nicht. Wenn der
Wert der Variable ungleich des neuen HEAD_SCOREs ist (bei mir ist die
Abfrage hinter CDB_SCANPREFS versteckt), dann wird dieser Empfänger
temporär abgelehnt.

Der Nachteil wird in der Doku genau benannt. Wenn eine Mail zum Beispiel
10 Empfänger hat, die alle unterschiedliche HEAD_SCOREs haben, dann muss
die Mail vom absendenden Server 10 mal übertragen werden :-(( Es liegt
am Wiederholungsinterval des absendenden Servers, wie lange dies dauert
:-(( Ich halte deswegen die unterschiedlichen HEAD_SCOREs sehr klein,
ich glaube, ich habe zur Zeit nur drei unterschiedliche Werte. Dadurch
muss eine Mail im ungünstigsten Fall dreimal übertragen werden. Man kann
die Zeit etwas verkürzen, in dem man mehrere MX-Records (mit
unterschiedlichen Namen und Adressen) für die Domain hat, weil viele
MTAs bei einem "defer" sofort einen anderen MX versuchen (dies konnte
ich in den Log-Dateien genau beobachten).

Gruß -vol