SpamAssassin unter Postfix Einrichten

Aus A-Enterprise

Wechseln zu: Navigation, Suche
Autor: Don.K am 2.11.2006

Eine Anleitung für den Aufbau und die Konfiguration von SpamAssassin [1] unter einem Postfix MTA (Mail Transport Agent) zu erstellen. Abschliessend wird der Automatische Update der Bayesion DB aufgesetzt. SpamAssassin ist ein Filterprogramm, mit dem ungewünschte E-Mails automatisch aussortiert werden können. Das in Perl geschriebene Programm ist auf einem Mail Server und gibt jeder E-Mail nach bestimmten Regeln Punkte, die nach der erkennung anzeigen, wie hoch die wahrscheinlichkeit klassifiziert wird, ob es sich um ein SPAM Mail handelt.

SpamAssassin verwendet unterschiedliche Stufen um zwischen erwünschter und unerwünschter Mail (HAM und SPAM) zu unterscheiden:

  • Statische Regeln, die auf Regulären Ausdrücken basieren und in Mails nach Sequenzen sucht, wie sie typisch in Spam vorkommt.
  • Abfrage von Realtime Blackhole Lists.
  • Abfrage von Checksum-basierenden Filtern wie Razor, Pyzor und DCC.
  • Integrierter Bayesion-Filter, der aufgrund der Einteilung der bisher empfangenen Mails statistisch die Wahrscheinlichkeit berechnet, ob es sich bei neuer Mail um erwünschte oder unerwünschte Mail handelt. Der Filter ist selbst lernend, wird ein Mail aus dem eigenen Netzwerk gesendet nimmt der Bayesion Filter mit hoher wahrscheinlichkeit an, das es sich dabei um ham handeln, so das nach ca. 2 Wochen mit hoher Treffsicherheit zwischen spam und ham unterschieden wird. Ein Bayes'scher-Filter eines Servers und der eines anderen Unternehmens lernt unterschiedliche Informationen, so wie sie von den Gegebenheiten und Eigenschaften einer Branche zu anderen geben ist. Weitere Informationen zur Bayes Ergebnis der Wahrscheinlichkeitstheorie [2] benannt nach dem Mathematiker Thomas Bayes

SpamAssassin ist ein Projekt der Apache Software Foundation [3] und steht unter der Apache-Lizenz.

Inhaltsverzeichnis

Hinweise

Da ich bereits schon bevor es die ersten Windows Rechner gab, als *IX Mensch mit vi arbeiten musste, taucht dieser eigenwillige Editor vi, hier nur als Beispiel auf, du kannst natürlich joe, emacs oder einfach dein bevorzugten Editor Verwenden. Wer es dennoch mit vi aufnehmen möchte, für die habe ich ein einfaches vi-Tutorial bereit.

Versionen

Die in dieser Anleitung verwendeten Packete und Versionen:

GNU/Linux Kernel 2.6.9-42, RHEL 4.4/CentOS 4.4
Postfix Version 2.2.10
SpamAssassin Version 3.1.5
Perl Version 5.8.5

Installation

Zunächst sollten wir SpamAssassin deinstallieren falls dies als RPM-Packet auf einem MTA bereits installiert ist, mit dem Shell Befehl [root@linux]# rpm -e spamassassin-* damit es später nicht zu Versions Überschneidungen und Konflikte führen kann. Als ein unter Perl entwickeltes Packet ist die Installation von SpamAssassin aus CPAN (Comprehensive Perl Archive Network) sehr effektiv und weitgehend Automatisiert. Auch sind die bei CPAN.ORG gehosteten Codes neben den vielen als TAR-Source und RPM verfügbaren Pakete auf dem aktuellsten stand. Diese Methode ist auch deshalb gut geeignet, da bei allen distributionen auf die gleiche weise installiert werden kann.

SpamAssassin von CPAN Installieren

Wir sind als root auf der shell und starten mit folgendem command:

[root@linux]# perl -MCPAN -e shell
CPAN: File::HomeDir loaded ok
cpan shell -- CPAN exploration and modules installation (v1.8801)
ReadLine support enabled
cpan> o conf prerequisites_policy ask
cpan> install Mail::SpamAssassin
...
Tee pause :-)

Nun haben wir eine Standard Installation. Weitere Module werden uns jedoch sehr empfohlen, also installieren wir weiter. Es ist möglich das einige Module bereits installiert wurden. Es wird dann eine ausgabe is up to date mit der Version Nummer mittgeteilt, in diesem fall einfach weiter gehen.

cpan> install MD5
cpan> install Digest::MD5
cpan> install Digest::HMAC_MD5
cpan> install Digest::SHA1
cpan> install MIME::Base64
cpan> install Net::DNS
cpan> install Mail::SPF::Query
cpan> install Bundle::LWP
cpan> DB_File
cpan> quit

Konfiguration

Nachdem wir jetzt die benötigten Programme und Module Installiert haben, geht es an das konfigurieren. Als erstes legen wir einige Verzeichnise und ein User filter an.

[root@linux]# useradd -s /bin/true filter
mkdir /home/filter/sc
mkdir /var/spool/filter
cd $home
wget http://lansys.ch/arch/howtos/spamd/spamd
cp spamd /etc/rc.d/init.d/  (!! init scripte können wo anders liegen z.B. debian /etc/init.d)
chmod 755 /etc/rc.d/init.d/spamd
touch /home/filter/sc/filter.sh
chmod 755 /home/filter/sc/filter.sh
chown -R filter.filter /home/filter
chown -R filter.filter /var/spool/filter

Anlegen der script Datei filter.sh die von Postfix später ausgeführt wird. Diese Zeilen mit Copy & Paste in deinem Editor einfügen.

[root@linux]# vi /home/filter/sc/filter.sh
#!/bin/sh
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
SPAMASSASSIN=/usr/bin/spamc
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
# Clean up when done or when aborting.
trap "rm -f in.$$; rm -f out.$$" 0 1 2 3 15
# Parameter for $SPAMASSASSIN
#  -P   Pipe message, don't deliver
#  -x   Disable user config files
#  -a   Use auto-whitelists
cat | $SPAMASSASSIN  > out.$$ || { echo Message content rejected; exit $EX_UNAVAILABLE; }
$SENDMAIL -i "$@" < out.$$
exit $?

SpamAssassin

Wir legen nun die Konfigurations Datei local.cf für SpamAssassin an:

[root@linux]# vi /etc/mail/spamassassin/local.cf
required_score          4.0
rewrite_header Subject  *****SPAM*****
report_safe             1
use_bayes               1
skip_rbl_checks         0
use_razor2              1
use_dcc                 1
use_pyzor               1
ok_locales              en
bayes_auto_learn        1

SpamAssassin Starten können wir mit /etc/rc.d/init.d/spam start

Nun noch die Start-Scripte in den richtigen runlevel Linken damit Spamd auch bei jedem Boot geladen wird.

[root@linux]# cd /etc/rc.d/rc3.d
ln -s ../init.d/spamd S70spamd
Es geht natürlich auch so..
chkconfig --add spamassassin
chkconfig --list  (überprüfen)

Wir gehen ja davon aus das ein richtiger MTA im default runlevel 3 ist, ansonsten kann man das in /etc/inittab auf der Zeile id:3:initdefault: feststellen.

Postfix

Jetzt integrieren wir den Filter für Postfix, also ändert man master.cf wie folgt:

[root@linux]# vi /etc/postfix/master.cf
#smtp      inet  n       -       n       -       -       smtpd
smtp      inet  n       -       n       -       -       smtpd -o content_filter=filter:
....
hier an letzter zeile anfügen..
# SPAMASSASIN
filter    unix  -       n       n       -       -       pipe
  user=filter argv=/home/filter/sc/filter.sh -f ${sender} -- ${recipient}

Der Bestehende Eintrag smtp inet.. können wir mit einem # als Kommentar stehen lassen, und kopieren die zeile, am ende fügen wir -o content_filter=filter: ein, und am ende der Datei die zwei Einträge für SpamAssassin.

Jetzt ist es zeit Postfix neu zu starten /etc/rc.d/init.d/postfix restart

Automatisch updaten

Um nun automatisch und kontinuierlich die Bayesion DB auf dem neusten stand zu halten, fügen wir folgende zielen in ein cron Task ein. Dies ist von grosser Wichtigkeit, denn ohne eine Aktuelle DB wird nach kurzer zeit die Erkennung und unterscheidung von SPAM durch HAM zunehmend wirkungslos sein.

[root@linux]# vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# sa-update channel distribute rulepdates
0 13 * * * root /usr/bin/sa-update --channel updates.spamassassin.org

Täglich jeweils um 13:00 Uhr werden über den Update channel die neusten sa-rules abgeholt. Der Update Zyklus kann natürlich kürzer oder länger gesetzt werden. Falls kein PGP Key vorhanden ist, lässt sich sa-update auch ohne Key betreiben:

/usr/bin/sa-update --nogpg --channel updates.spamassassin.org

Wer ein PGP Key Importieren will sieht nach dem Verzeichnis /etc/mail/spamassassin/sa-update-keys

-rw-------  1 root root 2240 Sep 26 21:39 pubring.gpg
-rw-------  1 root root 1200 Sep 26 21:39 trustdb.gpg

Durch die Installation sollte eine PGP Key Datei in /usr/share/spamassassin/sa-update-pubkey.txt angelegt worden sein.

Überprüfung & Debuging

Jetzt sollten wir überprüfen ob alles zum rechten steht! mit dem Befehl: spamassassin -D --lint es werden jetzt viele zeilen ausgegeben, also abwarten und dann in ruhe zurück scrollen um nach möglichen Fehlern zu sehen. Werden Warnungen ausgegeben wie warn: lint: 2 issues detected ist dies nicht weiter tragisch. Wird aber z.B. ausgegeben: dbg: pyzor: pyzor is not available: no pyzor executable found, sollte man das entprechende Modul nach installieren mit perl -MCPAN -e shell und anschlissendem install Mail::SpamAssassin::Plugin::Pyzor

Tipp! auf Search von CPAN [4] können Perl Module nach beliebigen Wort Kriterien gesucht werden.

Wichtig! Es ist zwingend für eine funktionierende Namens Auflösung zu sorgen, da sonst kein Download Mirror gefunden wird. Es ist also darauf zu achten das in /etc/resolv.conf ein zu verfügung stehender DNS Nameserver eingetragen ist. Erhält man beispielsweise eine Fehler ausgabe: dbg: dns: testing resolver nameservers: 192.168.1.1 not avalable oder eine solche dbg: dns: testing resolver nameservers: 192.168.1.1 no sollte man am bessten NUR einen Nameserver eintragen. (ein BUG!)

[root@linux]# vi /etc/resolv.conf
nameserver 192.168.1.1
  • Lösungsvorschläge möglicher Probleme
  1. Internationalisierung: Es kann sich möglicherweise als nützlich erweisen export LANG=en_US zu setzen.
  2. Perl 5.6.1 oder höher wird vorausgesetzt, Perl Version abfragen mit perl -v.
  3. sa-update nicht gefunden !! wurden nicht alle benötigten Module Installiert! mit dem Befehl:
perl -MCPAN -e shell
cpan> i /Bundle::LWP/

auf das vorhanden sein des Bundle Modules überprüfen.

  1. Perl CPAN kann kein download Mirror finden so kann mit folgender Parameter Datei Config.pm [5] welche sich hier /usr/lib/perl5/5.8.5/CPAN/Config.pm beheimatet fühlt, dies geregelt werden.
  2. Als nächster und vollständiger CPAN Perl Mirror erweist sich ftp://mirror.switch.ch/mirror/CPAN/

Anhang

Alternative Installationen der jeweiligen Distributionen:

Debian: apt-get install spamassassin
Gentoo: emerge mail-filter/spamassassin
Fedora: yum install spamassassin
Download des Tar-Sources von http://spamassassin.apache.org/downloads.cgi
tar -xzvf Mail-SpamAssassin-x.x.x.tar.gz
cd Mail-SpamAssassin-*
perl Makefile.PL
[option: add -DSPAMC_SSL to $CFLAGS to build an SSL-enabled spamc]
make
make install

weblinks

Persönliche Werkzeuge