SpamAssassin unter Postfix Einrichten
Aus A-Enterprise
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
- Internationalisierung: Es kann sich möglicherweise als nützlich erweisen export LANG=en_US zu setzen.
- Perl 5.6.1 oder höher wird vorausgesetzt, Perl Version abfragen mit perl -v.
- 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.
- 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.
- 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
- wiki.apache.org - FrontPage - Spamassassin Wiki
- apache.org - The Apache SpamAssassin Project
- cpan.org - Comprehensive Perl Archive Network
- postfix.org - Postfix the fast secure & easy to administer MTA
- LANsys.ch - LANsys Open Source Network Firewall security

