Quantcast
Channel: thomas-leister.de
Viewing all articles
Browse latest Browse all 452

Postfix: Amavis Spamfilter mit Spamassassin und Sieve

$
0
0

Wenn man schon längere Zeit einen eigenen Mailserver betreibt und schon die ein oder andere Spam-Mail eingetroffen ist, kommt schnell der Wunsch auf, Spam E-Mails zu erkennen und zu löschen oder in Quarantäne zu verschieben. Was die großen E-Mail Hoster können, kann auch im kleinen gemacht werden. Die Technik ist dieselbe.

Benötigt werden dazu folgende Komponenten: Ein Filtersystem, durch das die E-Mails „geschleift” werden (Amavis), eine Spamerkennung (Spamassassin) und ggf. ein Filtersystem, das die als Spam erkannten E-Mails in einen anderen IMAP Ordner verschiebt (Sieve).

Spamassassin installieren:

Zuerst wird die Spamerkennung an sich – Spamassassin – installiert. Dazu kommen noch zwei andere Pakete, die die Erkennung verbessern.

sudo -s
apt-get install spamassassin razor pyzor

Spamassassin muss noch aktiviert werden. Das geschieht, indem die Datei /etc/default/spamassassin

ENABLED=1

gesetzt wird. Außerdem sollen die automatischen Spamassassin Updates aktiviert werden, sodass die Spamerkennung immer auf dem aktuellen Stand ist: (am Ende der Datei:)

CRON=1

Nach diesen Änderungen muss spamassassin neu gestartet werden:

service spamassassin restart

Amavis installieren

Amavis ist die eigentliche Filterkomponente. Sie nimmt sich Spamassassin zu Hilfe und markiert Spam E-Mails auf Wunsch oder löscht sie direkt. Postfix wird die eintreffenden Mails später durch Amavis schleifen.

Auch Amavis muss zunächst installiert werden:

apt-get install amavisd-new

Amavis Spamverhalten einstellen

Damit Amavis Spammails behandelt, müssen die Spam Checks aktiviert werden. Bearbeitet die Datei /etc/amavis/conf.d/15-content_filter_mode und entfernt die Kommentarzeichen vor folgenden Zeilen sodass dort steht:

@bypass_spam_checks_maps = (
    \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

Amavis soll Spam E-Mails mit „***SPAM***” im Betreff Kennzeichnen und zusätzlich einen „X-Spam-Flag” Header in den E-Mail Queltext schreiben, sodass Mailclients (oder später der Sieve Filter) erkennen können, dass es sich um eine als Spam klassifizierte E-Mail handelt. E-Mails, die ein Spamlevel > 20 erreichen, werden sofort gelöscht.

Dazu wird die Datei /etc/amavis/conf.d/20-debian-defaults wie folgt geändert:

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt  = undef;
$sa_tag2_level_deflt = 5;
$sa_kill_level_deflt = 20;
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent

Nach den beiden Konfigurationsänderungen wird Amavis neu gestartet:

service amavis restart

Amavis in Postfix integrieren

Postfix muss nun so eingestellt werden, dass eintreffende E-Mails durch den Amavis Filter geschickt werden, sodass sie von Spamassassin kontrolliert werden können.

In die Datei /etc/postfix/main.cf wird folgende Zeile eingefügt:

content_filter=smtp-amavis:[127.0.0.1]:10024

Die Service Konfigurationsdatei /etc/postfix/master.cf wird unten um folgende Zeilen erweitert:

smtp-amavis     unix    -       -       -       -       2       smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes
        -o max_use=20

127.0.0.1:10025 inet    n       -       -       -       -       smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_delay_reject=no
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=reject_unauth_pipelining
        -o smtpd_end_of_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

Außerdem werden direkt unter der Zeile für den Dienst „pickup” (weiter oben) diese beiden Zeilen eingefügt:

    -o content_filter=
    -o receive_override_options=no_header_body_checks

Wer in seiner Postfix Konfiguration main.cf die TLS Security Levels für smtp und smtpd auf eine andere Einstellung als „none” gestellt hat (Siehe auch: E-Mail Transport verschlüsseln), muss jeweils noch eine Zeile zu jedem neuen Dienst anfügen:

smtp-amavis     unix    -       -       -       -       2       smtp
    [...]
    -o smtp_tls_security_level=none

und

127.0.0.1:10025 inet    n       -       -       -       -       smtpd
    [...]
    -o smtpd_tls_security_level=none

Postfix wird neu gestartet, um die Änderungen zu übernehmen:

service postfix restart

Amavis auf Erreichbarkeit überprüfen

Nun kann kurz getestet werden, ob Amavis erreichbar ist. Außerdem ist es sinnvoll, an dieser Stelle die E-Mail Logdateien nach Fehlern und Warnungen abzusuchen.

telnet localhost 10024

Wenn die Ausgabe

220 [127.0.0.1] ESMTP amavisd-new service ready

lautet, ist alles okay. Der Telnet Client kann über die Eingabe von

"quit"

wieder beendet werden.

Spamerkennung testen

Nun soll die Spamerkennung als ganzes getestet werden. Dazu wird eine E-Mail mit einem beliebigen Betreff an ein E-Mail Konto auf dem Server geschickt. Wichtig ist nur, dass der Nachrichtentest die folgende Zeile enthält:

"XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"

Wenn diese Mail nicht im Posteingang des Zielkontos erscheint, funktioniert der Spamfilter korrekt. Bei dem Code handelt es sich um eine Zeichenkette, die zum Testen von Spamassassin geeignet ist. Wenn eine E-Mail diesen Code enthält, wird sie sofort als Spam klassifiziert und sofort gelöscht. Sie wird gelöscht, weil sie grundsätzlich das höchste Spam-Level erreicht (also zu 100% Spam ist). Mails, die Spamlevel 20 nicht erreichen, werden nur mit „***SPAM***” markiert, gelangen aber trotzdem in die Inbox. (siehe dazu Einstellungen zum Avamis Spamverhalten).

Spam E-Mails mit Sieve in Spam Ordner verschieben

Es ist zwar gut, dass Spammails jetzt direkt gelöscht oder im Zweifel mit „***SPAM***” markiert werden, besser wäre es aber, wenn sie in einen speziellen Spam IMAP Ordner verschoben würden. Der Filter soll E-Mails, die zwischen den Spam-Levels 5 und 20 liegen, in einem speziellen Spam-Ordner ablegen. E-Mails, die ziemlich sicher Spam sind (über Level 20) werden weiterhin direkt gelöscht.

Wie ich in einem anderen Beitrag zu Sieve schon gezeigt habe, können E-Mails nach verschiedenen Kriterien in spezielle Ordner einsortiert werden. Das machen wir uns hier zunutze: Spammails werden von Amavis ja mit „***SPAM***” im Betreff gekennzeichnet und erhalten zusätzlich noch einen „X-Spam-Flag” Eintrag im E-Mail Header. Sieve muss nun überprüfen, ob eine Spam Flag in einer E-Mail existiert. Wenn das der Fall ist, wird die E-Mail in den Spam-Ordner verschoben.

Folgendes wird hier vorausgesetzt:

In der Datei /etc/dovecot/dovecot.conf wird ein Sieve „before” Filter eingerichtet, der immer vor allen anderen Filtern ausgeführt wird. Er soll Spammails erkennen:

sieve_before = /var/vmail/sieve/spam-global.sieve
sieve = /var/vmail/sieve/%u.sieve

Die „spam-global.sieve” Filterdatei wird nun erstellt und mit folgendem Inhalt gefüllt:

require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
    fileinto "Spam";
}

Abspeichern, das war’s auch schon. :)

Jetzt noch Dovecot neu starten:

service dovecot restart

… und Spammails sollten nun in den Spam-Ordner verschoben werden. Um das zu testen, kann man ja eine bereits erhaltene Spammail an sich selbst schicken. Wenn nichts ankommt, wurde die Mail vermutlich „sicher” als Spam erkennt (Über Level 20) und direkt gelöscht. Sucht euch also keine zu harten Kaliber aus ;)

Weiterführender Beitrag: Mailserver Virenschutz mit ClamAV und Amavis einrichten

 

Quellen: https://help.ubuntu.com/community/PostfixAmavisNew


Viewing all articles
Browse latest Browse all 452