Amavis-Spam-Virenfilter

Diese Anleitung erweitert den Postfix-Mailserver um Virenscanner und Spamfilter sowie automatische Mailfilter.

  • amavisd-new (Interaktion zwischen MTA und Virenscanner/Spamfilter )
  • clamav-daemon (Virenscanner )
  • spamassassin (Spamfilter )
  • razor (Online-Spamdatenbank )
  • pyzor (Online-Spamdatenbank )

AMaViS steht für A MAil Virus Scanner und ist ein serverseitiger Virenscanner, der auf Unix/Linux Mail-Servern zum Einsatz kommt. Mittlerweile wurde die Funktion um einen Spamfilter erweitert. AMaViS ist kein Virenscanner im eigentlichen Sinne, sondern eine Software, die dazu entwickelt wurde, Virenscanner in Mailserver einzubinden. Sie bietet eine Standardschnittstelle zwischen den Mail Transfer Agents (MTA) und den Contentfiltern, damit die Hersteller von Mailservern und Antivirenprogrammen nicht ständig neue Schnittstellen entwickeln müssen.

ClamAV (Clam AntiVirus) ist ein unter der GNU General Public License stehendes Virenschutzprogramm – also eine Anwendung gegen Schädlinge wie etwa Viren – mit einem Phishing-Filter, welcher häufig auf E-Mail-Servern zur Ausfilterung sogenannter Computerwürmer und Phishing-E-Mails zum Einsatz kommt.

SpamAssassin ist ein weitverbreitetes und ausgezeichnetes Filterprogramm, mit dem unerwünschte E-Mails (Spam) automatisch aussortiert werden können. SpamAssassin ist als freie Software unter den Bedingungen der Version 2 der Apache-Lizenz freigegeben.

Quelle: Wikipedia

 

Pakete installieren

apt-get install amavisd-new clamav-daemon spamassassin razor pyzor

Clamav-Daemon

Clamav erfordert normalerweise keine Anpassungen. Der Daemon ist gestartet, und Virensignaturen werden täglich aktualisiert. Damit Amavis und Clamav-Daemon zusammenarbeiten, muss der Benutzer clamav der Gruppe amavis über die Verwaltung der Benutzer und Gruppen zugeordnet werden. Dies erfolgt über die Befehle:

adduser clamav amavis
service clamav-daemon restart

Amavis

Zur Aktivierung müssen die jweiligen Bereiche in/etc/amavis/conf.d/15-content_filter_mode auskommentiert werden:

@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);

Wer nur auf Spam oder Viren prüfen will, lässt die Kommentarzeichen vor dem Block, den er nicht benötigt, stehen.

Spamassassin

Amavis greift direkt auf die spamassassin-Bibliotheken zu und benötigt keinen laufenden spamd Demon. Von daher ist keine weitere Konfiguration von spamassassin notwendig.

su - amavis -s /bin/bash
razor-admin -create
razor-admin -register
pyzor discover
exit

Postfix

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 Konfigurationsdatei /etc/postfix/master.cf wird 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

Unmittelbar hinter der Zeile mit dem Dienst pickup:

-o content_filter=
-o receive_override_options=no_header_body_checks

service postfix restart

Spammails mit ***SPAM*** kennzeichnen

In der Standardeinstellung filtert Amavis erkannten Spam einfach weg. Möglicherweise möchte man jedoch seinen Spam lieber selber nochmal auf falsche Treffer überprüfen. Dafür bietet Amavis die Möglichkeit, Spam in der Betreffszeile zu kennzeichnen. Außerdem kann man verschiedene Kopfzeilen, die mit X-Spam beginnen, einfügen lassen, wo Amavis Informationen über den Spamwert und die angeschlagenen Tests hinterlegt.

Dazu muss man in /etc/amavis/conf.d/20-debian_defaults folgende Variablen den eigenen Bedürfnissen anpassen:

  • $sa_tag_level_deflt: Mail, die höher als dieser Wert eingestuft wird, erhält die oben erwähnten X-Spam-Kopfzeilen.
  • $sa_tag2_level_deflt: Ab diesem Wert wird die Mail als Spam eingestuft, eine entsprechende Kopfzeile eingefügt und der Betreff mit dem Präfix ***SPAM*** versehen.
  • $sa_kill_level_deflt: Dieser Wert legt fest, ab wann die Mail so eindeutig als Spam eingestuft wird, dass sie sofort vernichtet wird.

Folgende Einstellungen haben sich in der Praxis als sinnvoll erwiesen:

$sa_tag_level_deflt = -999;
$sa_tag2_level_deflt = 5;
$sa_kill_level_deflt = 20;

Zum Übernehmen der Änderungen muss Amavis neu gestartet werden

service amavis restart

Wie soll Amavis mit SPAM, Viren und Anhängen umgehen?

Sobald unerwünschte Mails gefunden werden, hat AMaViS die Fähigkeit, sie unter Quarantäne zu stellen, zu verwerfen und / oder die unerwünschte Mail passieren lassen und zu zustellen.
Dabei können nützliche Informationen im Header platziert werden.

Der kritische Punkt von AMaViS Konfiguration ist zu entscheiden, welche Maßnahmen ergriffen werden sollten, wenn eine unerwünschte Nachricht gefunden wird.

Einstellungen, die mit Viren umgehen, verboten Anhängen und Bad Header:

$final_virus_destiny =
$final_banned_destiny =
$final_bad_header_destiny =

$virus_quarantine_to =
$banned_quarantine_to =
$bad_header_quarantine_to =

Mögliche Einstellungen für $final_*_destiny sind: D_PASS, D_BOUNCE, D_REJECT and D_DISCARD.

D_PASS:

E-Mails werden an die Empfänger weitergeben , unabhängig von schlechten Inhalten. Ist Quarantäne konfiguriert ist, wird eine Kopie der E-Mail dorthin gelegt, wenn nicht, erhält aber mindestens der Empfänger die E-Mail.

D_BOUNCE:

Die Mail wird nicht zugestellt und der Absender erhält eine Unzustellbarkeitsnachricht. Dies aber nicht, sollten Viren gefunden werden. Ist Quarantäne konfiguriert, geht die Mail dort hin. Ansonsten ist sie verloren.

D_REJECT:

Die Mail wird nicht zugestellt. AMaViS schickt die typischen 55x Antworten auf die Upstream-MTA und dieser kann eine Mitteilung über die Zurückweisung an den Absender senden. Die Infos sind aber nicht so aussagekräftig wie beim Bounce.

D_DISCARD:

Mail wird nicht zugestellt und der Absender nicht informiert. Eine Kopie wandert in die Quarantäne, wenn sie konfiguriert ist.

Anpassungen unter Ubuntu

Mails werden immer geblockt, auch wenn andere Einstellungen vorgenommen sind

Die Direktiven

$final_virus_destiny =
$final_banned_destiny =
$final_bad_header_destiny =
$final_spam_destiny =

greifen nicht, wenn der Server unter Ubuntu läuft. Daher muss die Datei /etc/amavis/conf.d/21-ubuntu_defaults dahingehend angepasst werden:

$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny = D_BOUNCE; # D_REJECT when front-end MTA
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS; # False-positive prone (for spam)

Spam im Betreff kennzeichnen

Damit der Header umbenannt werden kann und die X-Spam-Flag, X-Spam-Score, X-Spam-Level, X-Spam-Status Tags eingefügt werden, muss die Domain übereinstimmen.

Sollte diese nicht stimmen, werden keine Änderungen vorgenommen.

head -n 1 /etc/mailname

muss die Domain ergeben. Wenn die Ausgabe mail.example.org o.ä. ausgibt, ist dies der Bug in Amavis.

Die einfachste Lösung ist in /etc/amavis/conf.d/05-domain_id

chomp($mydomain = `head -n 1 /etc/mailname`);

zu ändern in

$mydomain = "example.com";

Infomail bei Spam oder Virus

In der Datei /etc/amavis/conf.d/21-ubuntu_defaults die Zeilen hinzufügen oder anpassen, damit bei einem Spam oder Virenfund eine Infomail an den Admin geht:

$virus_admin = "postmaster@$mydomain";

$spam_admin = "postmaster@$mydomain";

Soll  bei einem Virenfund ebenfalls der Empänger benachrichtigt werden so ist folgendes zu ergänzen:

$warnvirusrecip = 1;

Testen des Mailservers

Zum Testen, wie das Konstrukt mit Mails umgeht, eignet sich bspw. der Online Dienst von byteplant.

Mailadresse eingeben, bestätigen und schauen, was der Server tut:

amavis

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s