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=yes
    127.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

    2 Kommentare

    1. Hallo. Eine frage hätte ich im bezug auf Methode 2. Ist es möglich anstatt mit Port pro „Kunde“ die ganze Geschichte über socks laufen zu lassen?

    Leave A Reply