amavisd-new in Postfix zur Spam- und Virus-Überprüfung integrieren

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>

Diese Anleitung veranschaulicht, wie man amavisd-new in einem Postfix Mail Server zur spam- und virus-Überprüfung integriert. amavisd-new ist ein Hochleistungs-Interface zwischen MTAs wie zum Beispiel Postfix und Content Checkers: Virenscanner und/oder SpamAssassin. Wir werden in dieser Anleitung ClamAV als Virusscanner und SpamAssassin zur Spam-Überprüfung verwenden.

An dieser Stelle möchte ich darauf hinweisen, dass dies nicht die einzige Variante ist, ein solches System einzurichten. Es gibt mehrere Wege, die zum Ziel führen – dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktionieren wird!

1 Vorbemerkung

In dieser Anleitung werde ich beschreiben, wie man amavisd-new auf Debian Etch/Ubuntu 6.10 Edgy Eft (die Schritte sind für beide Distributionen die gleichen) und auf Debian Sarge installiert/konfiguriert. Die amavisd-new Konfiguration passt auf Systeme, bei denen, Systembenutzer für E-Mailkonten verwendet werden; wenn Du virtuelle Benutzer verwendest, sind vielleicht, oder auch nicht, ein paar Veränderungen in der Konfiguration von amavisd-new notwendig (aber das hängt vom eigentlichen Setup ab). Wenn Du virtuelle E-Mailbenutzer verwendest, sieh Dir die beiden folgenden Anleitungen an:

amavisd-new funktioniert so: Postfix erhält eine E-Mail auf Port 25, leitet es zu amavisd-new auf Port 10024 weiter, was dann ClamAV und SpamAssassin aufruft und amavisd-new danach die Mail wieder in Postfix auf Port 10025 einspeist, was dann letztlich die Mail liefert (wenn sie sauber ist). Hier ist ein kleiner Abriss des Prozesses:

[SpamAssassin]
^
|
Email –> [(Port 25) Postfix] –> [(10024) amavisd-new] –> [(10025) Postfix] –> Mailbox
|
v
[ClamAV]

Ich gehe davon aus, dass Postfix und Deine E-Mailkonten bereits eingerichtet sind und funktionieren, da ich die Postfix-Installation/Konfiguration hier nicht behandeln werde.

Alle Schritte in dieser Anleitung werden als Rootanwender ausgeführt, also stelle sicher, dass Du als Rootanwender angemeldet bist.

2 Debian Etch/Ubuntu 6.10 Edgy Eft

Zuerts installieren wir amavisd-new, SpamAssassin und ClamAV zusammen mit ein paar anderen Programmen (hauptsächliche Programme, die amavisd-new benötigt um Archive zu entpacken, da E-Mails Archive als Anhang beinhalten können):

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop

Danach müssen wir amavisd-new konfigurieren. Die Konfiguration ist in zahlreiche Dateien aufgesplittet, die sich im /etc/amavis/conf.d Verzeichnis befinden. Sieh Dir jede einzelne an um Dich mit der Konfiguration vertraut zu machen. Die meisten Einstellungen sind in Ordnung, jedoch müssen wir zwei Dateien ändern:

Zunächst müssen wir ClamAV und SpamAssassin in /etc/amavis/conf.d/15-content_filter_mode freischalten, indem wir die @bypass_virus_checks_maps und die @bypass_spam_checks_maps Zeile aktivieren:

vi /etc/amavis/conf.d/15-content_filter_mode

Die Datei sollte wie folgt aussehen:

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the two lines below to enable it back
#

@bypass_virus_checks_maps = (
   %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re);

#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#

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

1;  # insure a defined return

Dann solltest Du Dir die Spam-Einstellungen und Vorgänge für Spam-/Virus-Mails in /etc/amavis/conf.d/20-debian_defaults ansehen. Es besteht kein Grund etwas zu verändern, wenn Dir die Standard-Einstellungen zusagen. Die Datei beinhaltet viele Erklärungen, es besteht also kein Anlass die Einstellungen an dieser Stelle zu erklären:

vi /etc/amavis/conf.d/20-debian_defaults

$QUARANTINEDIR = "$MYHOME/virusmails";

$log_recip_templ = undef;    # disable by-recipient level-0 log entries
$DO_SYSLOG = 1;              # log via syslogd (preferred)
$syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages
$syslog_facility = 'mail';
$syslog_priority = 'debug';  # switch to info to drop debug output, etc

$enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny)
$enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1

$inet_socket_port = 10024;   # default listenting socket

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.31; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent

$sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger
$sa_local_tests_only = 0;    # only tests which do not require internet access?

[...]
$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_BOUNCE;
$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)
[...]

Lass danach diese Befehle laufen um den clamav Benutzer der amavis Gruppe hinzuzufügen und amavisd-new und ClamAV neu zu starten:

adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart

Als Nächstes müssen wir die Konfigurationsdatei des Freshclam Daemon bearbeiten (das ist der Daemon, der regelmäßig und automatisch die neusten Virensignaturen von einem ClamAV Spiegel holt) da sie einen kleinen Fehler enthält. Öffne /etc/clamav/freshclam.conf und bearbeite die NotifyClamd Zeile wie unten gezeigt wird:

vi /etc/clamav/freshclam.conf

[...]
NotifyClamd /etc/clamav/clamd.conf
[...]

Starte Freshclam dann neu (vergewissere Dich, dass kein anderer Freshclam Vorgang gerade läuft (vielleicht von einer anderen ClamAV Installation), da der Start unseres Freshclam sonst fehlschlagen wird):

/etc/init.d/clamav-freshclam restart

Nun müssen wir Postfix konfigurieren, damit es eingehende E-Mails durch amavisd-new leitet:

postconf -e ‚content_filter = amavis:[127.0.0.1]:10024‘
postconf -e ‚receive_override_options = no_address_mappings‘

Füge dann folgende Zeilen /etc/postfix/master.cf an:

vi /etc/postfix/master.cf

[...]
amavis unix - - - - 2 smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes

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_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_bind_address=127.0.0.1

Starte Postfix dann neu:

/etc/init.d/postfix restart

Lass nun Folgendes laufen

netstat -tap

und Du siehst, dass (master) auf Port 25 (smtp) und 10025, und amavisd-new auf Port 10024 hört:

server1:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:4069 *:* LISTEN 3457/rpc.statd
tcp 0 0 localhost.localdo:10024 *:* LISTEN 6886/amavisd (maste
tcp 0 0 localhost.localdo:10025 *:* LISTEN 7268/master
tcp 0 0 *:sunrpc *:* LISTEN 3083/portmap
tcp 0 0 *:auth *:* LISTEN 3417/inetd
tcp 0 0 *:smtp *:* LISTEN 7268/master
tcp6 0 0 *:imaps *:* LISTEN 4952/couriertcpd
tcp6 0 0 *:pop3s *:* LISTEN 4872/couriertcpd
tcp6 0 0 *:pop3 *:* LISTEN 4815/couriertcpd
tcp6 0 0 *:imap2 *:* LISTEN 4905/couriertcpd
tcp6 0 0 *:ssh *:* LISTEN 3438/sshd
tcp6 0 0 *:smtp *:* LISTEN 7268/master
tcp6 0 148 server1.example.com:ssh localhost:3117 ESTABLISHED3519/0

Wenn Du magst, kannst Du nun Razor, Pyzor und DCC SpamAssassin hinzufügen, um seine Filterleistung zu verbessern. Razor, Pyzor und DCC sind Spamfilter, die ein gemeinsames Filternetzwerk benutzen. Um sie zu installieren, lass dies laufen

apt-get install razor pyzor dcc-client

Nun müssen wir SpamAssassin mitteilen, diese drei Programme zu verwenden. Bearbeite /etc/spamassassin/local.cf und füge folgende Zeilen hinzu:

vi /etc/spamassassin/local.cf

[...]

# dcc
use_dcc 1
dcc_path /usr/bin/dccproc
dcc_add_header 1
dcc_dccifd_path /usr/sbin/dccifd

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor
pyzor_add_header 1

#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

Starte danach amavisd-new neu:

/etc/init.d/amavis restart

Das war es schon. Sieh Dir nun das Mail Log (/var/log/mail.log) an, um herauszufinden, ob amavisd-new richtig funktioniert. Wenn amavisd-new eine Spam-/Virus-Mail findet, wird es das protokollieren. Wenn Du amavisd-new (neu) startest, sollte es auch protokollieren, dass es seinen Spam-und Virus-Überprüfungs-Code läd (wenn nicht, hast Du wahrscheinlich etwas falsch gemacht).

Um Dir das Protokoll in Echtzeit anzusehen, kannst Du diesen Befehl verwenden:

tail -f /var/log/mail.log

(Drücke STRG + c um das Protokoll zu verlassen.)

Das könnte dich auch interessieren …