Debian: amavis für multi domain hosting

2

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

Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

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?

Antworten