Eine der ärgerlichsten Sachen, wenn man Mails noch während des SMTP-Dialogs auf Spam und Viren filtert, ist ganz klar, daß man das ja auch für Mails von Mailing-Listen tut. Und wenn man da zu oft Mails ablehnt, dann fliegt man relativ schnell von der Liste runter. Nun sind solche Mails meistens durch das Vorhandensein von speziellen Headern gekennzeichnet, z.B:
CODE:
Precedence: list
Will man nun vermeiden, von einer Mailingliste zu fliegen, wenn dort zuviel Spam an Start ist, dann kann man sich natürlich als erstes Mal eine Policy-Bank definieren (dazu hatte ich
hier was geschrieben), die Spam und Viren nicht hart ablehnt, sondern einfach wegwirft und/oder in eine Quarantäne schmeißt. Das könnte mit
amavisd-new z.B. so aussehen:
CODE:
# additional policy bank for incoming mailing lists
$policy_bank{'PREQ-LOWPRECEDENCE'} = {
final_spam_destiny => D_DISCARD,
final_virus_destiny => D_DISCARD,
spam_quarantine_method => 'sql:',
virus_quarantine_method => 'sql:',
};
Wenn also die obige Policy aktiviert würde (und damit die vordefinierten Werte überschreibt), dann würden Mails und Viren verworfen und in einer SQL-Datenbank abgespeichert, die der Benutzer dann z.B. über ein Webinterface kontrollieren kann. Das Problem an der Sache ist nur: Wie kriege ich diese Policy aktiviert?
Hier hat
Alexander Wirt, auch bekannt als „formorer”, in knapp 10 Minuten eine Lösung in Form eines sog. „custom packages” für amavisd-new entworfen:
CODE:
package Amavis::Custom;
use strict;
BEGIN {
import Amavis::Conf qw(:platform :confvars c cr ca $myhostname);
import Amavis::Util qw(do_log untaint safe_encode safe_decode);
import Amavis::rfc2821_2822_Tools;
import Amavis::Notify qw(build_mime_entity);
}
sub new {
my($class,$conn,$msginfo) = @_;
my($self) = bless {}, $class;
my $low_precedence = 0;
foreach my $line (@{$msginfo->{'orig_header'}}) {
$line =~ s/\n / /g;
$low_precedence = 1 if $line =~ m/^Precedence:\s+(bulk|list|junk)/i;
}
if ($low_precedence) {
do_log(2, sprintf("Load low precedence policybank"));
Amavis::load_policy_bank('PREQ-LOWPRECEDENCE')
}
return $self;
}
1; # insure a defined return
Diese Datei (die man auch
hier runterladen kann, was man auch tun sollte, da obiger Code einige Zeichen verfälscht) legt man dann bei Debian z.B. einfach unter
/etc/amavis/conf.d/60-low-precedence ab, startet amavisd-new neu und freut sich. Und natürlich kann man das ganze auf beliebige andere Header erweitern.
Danke, formorer!
Als kleinen Nachtrag zu dem hier: Das ganze kann natürlich auch mit „Received:”-Headern funktionieren, was es auch mit einem amavisd-new der Version 2.6.x erlaubt, eine Policy nachzuladen, die „$originating” setzt. Ich habe das in
Aufgenommen: Aug 01, 01:18