Nach vielen vergeblichen/unzufriedenstellenden Versuche amavis mit Spamfilter Funktion auf einem System mit mehrere Domains zu integrieren ist es mir endlich gelungen. Die aktuelle stable Version zur Zeit der Integration ist die 2.4.2-6.1.
Es gibt zwei Möglichkeiten wie amavis integriert werden kann.
1. Variante
Auf dem Server werden alle eMails, egal von welcher Domain mit den Einstellungen aus der 20-debian-defaults behandelt.
2. Variante
Es wird für jeden Kunden (Domain) eine eingener Port für Amavis freigeschaltet der dann die über diesen Port geleiteten eMails mit den in der entsprechenden policy bank hinterlegte Regeln behandelt. Das hat den Vorteil, dass die Spam-/Virenfilterung für einzelne Kunden direkt freigeschaltet und konfiguriert werden kann.
Einrichtung von Variante 1.
Als erstes müssen Sie die /etc/amavis/conf.d/50-user um eine Zeile mit den lokalen Domains ergänzen.
@local_domains_maps = ( [".$mydomain", "example2.com", "example3.com"] );
Dies bewirkt, dass eMail die als Absender in local_domains_maps auftauchen beim eMail Versand nicht geprüft werden.
Beachten Sie, dass die Bewertungsgrenzen in der /etc/amavis/conf.d/20-debian_defaults gesetzt sein müssen.
Anschließend noch in der /etc/postfix/main.cf den content Filter definieren und beides neu starte
content_filter=smtp-amavis:[127.0.0.1]:10024
Einrichtung von Variante 2.
Variante zwei ist unabhängig von Variante 1. Stellen Sie als erstes sicher, dass in der main.cf kein content filter für amavis hinterelgt ist.
Achtung, wenn Sie in der main.cf address_verify_sender benutzen, wird die dort hinterlegt Adresse nicht durch den Filter laufen. Auch dann nicht, wenn die Empfängeradresse umgeschrieben wird. Anstelle einer Adresse sollten Sie dann liebe einen null Sender (address_verify_sender = <>) benutzen. Beispiel:
address_verify_sender = postmaster@domain.tld
Als erstes muss ebenfalls ein Content-Filter für Amavis aktiviert werden
content_filter=smtp-amavis:[127.0.0.1]:10024
Es muss sichergestellt sein, dass in der Datei /etc/amavis/conf.d/15-content_filter_mode der Virenscanner sowie der Spamfilter aktiviert sind!
@bypass_virus_checks_maps = ( %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re);@bypass_spam_checks_maps = ( %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re);
Anschließend werden die smtpd_recipient_restrictions in der main.cf um eine Zeile erweitert:
smtpd_recipient_restrictions = reject_non_fqdn_recipient reject_non_fqdn_sender reject_unknown_sender_domain reject_unknown_recipient_domain check_recipient_access hash:/etc/postfix/filter/filter_recipient_domains permit_mynetworks permit_sasl_authenticated
Nun wird in der Datei /etc/amavis/conf.d/20-debian_defaults ein policy interface für den Port 10024 definiert:
$interface_policy{'10024'} = 'sending';
Jetzt muss in der Datei /etc/amavis/conf.d/50-user eine entsprechende policy_bank definiert werden, über die der Spamfilter deaktiviert wird:
$policy_bank{'sending'} = { bypass_spam_checks_maps => [1], };
In der /etc/postfix/master.cf muss jetzt noch eine Änderung an der Adressumschreibung vorgenommen werden.
smtp inet n - - - - smtpd -o receive_override_options=no_address_mappings....smtp-amavis unix - - n - 5 smtp -o smtp_data_done_timeout=1200s -o disable_dns_lookups=yes127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o receive_override_options=no_unknown_recipient_checks -o mynetworks=127.0.0.0/8´
Nach einem neustart von Amavis und Postfic, durchläuft jede eingehenden sowie ausgehende eMail Amavis an Port 10024 und wird nur auf Virengeprüft.
Aktivierung eines Kunden zur Spamfilterung
Um für einen Kunden einen individuellen Spamfilter zu definieren, wird ein weiteres Amavis interface definiert. Hierbei muss der Port in der Datei /etc/amavis/conf.d/20-debian_defaults expliziet frei geschaltet werden
$inet_socket_port = [10024, 10030]; $interface_policy{'10030'} = 'blog.cscholz.io';
Nun wird wie für den Port 10024 für den Port 10030 über den später die Domain blog.cscholz.io gefiltert wird eine weitere policy_bank definiert:
$policy_bank{'blog.cscholz.io'} = { syslog_ident => 'AMAVIS-O-O-S.DE', log_level => 3, smtpd_greeting_banner => '${helo-name} ${protocol} ${product} blog.cscholz.io filter ready', virus_admin_maps => ["postmaster@blog.cscholz.io.de"], spam_admin_maps => ["postmaster@blog.cscholz.io"], #spam_subject_tag_maps => '** SPAM **', spam_subject_tag2_maps => '*** SPAM **', spam_tag_level_maps => 16.0, spam_tag2_level_maps => 18.31, spam_kill_level_maps => undef, final_virus_destiny => D_BOUNCE, final_banned_destiny => D_PASS, final_spam_destiny => D_PASS, final_bad_header_destiny => D_PASS, sa_mail_body_size_limit => [400*1024], };
Desweiteren wird die Domain blog.cscholz.io in der Datei /etc/postfix/filter/filter_recipient_domains eingetragen:
blog.cscholz.io FILTER smtp-amavis:[127.0.0.1]:10030
Diese Datei muss dann noch in eine DB umgewandelt werden:
postmap /etc/postfix/filter/filter_recipient_domains
Nun amavis und postfix erneut starten. Von jetzt ab werden alle eingehenden eMails für die Domain blog.cscholz.io über den Port 10030 laufen. Hier greift dann der Spam-/Virenfilter. Die eMail durchläuft nicht den Port 10024.
Beim senden hingegen wird der Port 10024 benutzt auf dem kein Spamfilter aktiv ist.
Um den Spam-/Virenfilter zu testen, gibt es jeweils eine Zeile, die in einer eMail dazu führt, dass der jeweilige scanner anschlägt:
SPF-Filterung
Damit amaivsd-new auf falsche/korrekte SPF Einträge prüfen kann, muss das Paket libmail-spf-query-perl installiert sein:
apt-get install libmail-spf-query-perl
Debuging
Es ist auch manchmal ganz hilfreich, amavis mal im Debug Modus zu beobachten. Hierbei ist mir das fehlende Perl Paket für die SPF Recors aufgefallen.
/etc/init.d/amavis debug-sa
Virenscanner: Eicar-Test-Virus
X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Spamfilter: GTUBE
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Decoder installieren
Damit Amavis auch die Dateien verarbeiten kann die sich im Anhang der eMails befinden, müssen die entsprechenden Decoder installiert sein. Einige sind:
apt-get install lzop rpm cabextract zoo unrar-free arj freeze pax arc bzip2
Amavisd-new zeigt im Log-Leve 5 beim neustart des Dienstes aber auch an, welche Decoder fehlen.
Aussicht auf zukünftige Amavis Versionen
Ab der Version 2.5.2 ist es möglich Konfigurationsdateien mittels
include_config_files('/etc/amavisd-custom.conf');
einzubinden. Dies würde sich für policy banks anbieten um pro Kunden eine eigene Konfigurationsdatei zu haben.
Links
http://postfix.state-of-mind.de/patrick.koetter/amavisd-new/
http://www.opensource.apple.com/darwinsource/Current/SpamAssassin-124.6/amavisd/amavisd.conf-sample
http://marc.info/?l=amavis-user&m=113415019700881
http://www.webservertalk.com/archive390-2006-8-1604619.html
http://www.ijs.si/software/amavisd/amavisd-new-docs.html
http://www.heinlein-support.de/upload/mk3/SpamAssassin-Geheimnisse.pdf
http://readlist.com/lists/lists.sourceforge.net/amavis-user/0/1595.html
http://www.ijs.si/software/amavisd/amavisd-new-magdeburg-20050519.pdf
http://www.oreilly.de/german/freebooks/spamvirger/pdf/179-212.pdf