Spamassassin ist ein Mailfilter der Spam aus den eingehenden Emails aussortiert. Die Installation ist nicht ganz trivial. Leider ist der Installationsvorgang auf der Spasassin Homepage nur schlecht beschrieben. Es git im Grunde nur sehr wenige Step-by-Step Anleitungen dafür. Ich habe mich für eine Konfiguration des Spamassassin als sogenannter Milter entschieden.
Das Kofferwort Milter setzt sich aus den Worten Mail und Filter zusammen. Milter-Programme erhalten von Postfix Voll-Zugriff auf eine E-Mail und dürfen diese auswerten und sogar inhaltlich verändern.
Der entscheidende Vorteil ist jedoch: Eine E-Mail wird hierfür zuerst an das entsprechende Milter-Programm übergeben, bevor sie in die Warteschlange eingereiht wird (Pre-Queue-Filtering). Das erlaubt eine Zurückweisung der EMail bevor diese Postfix erreicht. Denn wurde eine EMail bereits durch Postfix angenommen kann diese nicht mehr (wirklich) abgelehnt werden wenn man den Double-Bounce-Effekt vermeiden will dass EMails zweimal abgewiesen werden.
Der Daemon spamass-milter wird durch das postfix ‘smtp’-binary aufgerufen. Dieses wiederum startet bei jeder EMail das spamc binary welches die EMail letztendlich zum spamd (den ‘daemonized’ Spamassassin) schiebt.
Voraussetzung dafür ist natürlich ein fertig konfigurierter und voll funktionsfähiger Postfix
Mail MTA.
Installation
Zur Installation muß man die Pakete spamassassin
, und spamass-milter
installieren. Dabei werden die Pakete spamc
und auch sa-compile
automatisch mitinstalliert.
root@fliegerhost:/# apt-get update root@fliegerhost:/# apt-get install spamassassin spamass-milter
Konfiguration
Änderungen in Postfix
Für Postfix sind nur wenige Änderungen notwendig. Eigentlich muß man Postfix nur mit dem Parameter smtpd_milters
sagen wo dieser den Pfad zum Socket des MILTER-Daemons für per SMTP eingehende E-Mails findet. Der Pfad wird relativ zur chroot
Umgebung der Postfix-Installation angegeben. Das chroot von Postfix ist in /var/spool/postfix
zu finden.
Der andere Parameter milter_rcpt_macros
verdeckt nur eine Warnung die bei jedem Empfang einer EMail auftaucht und könnte auch weggelassen werden.
# +++++++++++++++++++++++++++ Spamassassin Milter +++++++++++++++++++++++++++++++++++ smtpd_milters = unix:/spamass/spamass.sock # die default macros werden um "{b}" erweitert um eine Warnung des milter zu vermeiden milter_rcpt_macros = i {rcpt_addr} {rcpt_host} {rcpt_mailer} {b}
Das war es auch schon. Nicht vergessen den Postfix Dienst neu zu starten:
root@fliegerhost:/# service postfix restart
Änderungen im Spamassassin
Im wesentlichen werden die Spamassassin Einstellungen in der Datei /etc/spamassassin/local.cf
getätigt. Die Einstellungen sind natürlich Geschmackssache. Wichtig ist nur die Einstellung trusted_networks
die besagt dass EMails aus dem internen Netz nicht auf Spam getestet werden sollen. Auch sollte die Einstellung required_score
mit Bedacht gewählt werden, denn eine zu geringe Einstellung erkennt zu viele gewollte EMails als Spam und eine zu hohe Einstellung lässt zu viel Spam durch. Ich habe mit dem Spam Score ‘5’ die besten Erfahrungen gemacht.
Wenn man den Bayes Algorithmus benutzen möchte, was ich ausdrücklich empfehle, dann muß man die Bayes Konfigurationen auch alle einschalten. Alle anderen Einstellungen kann man so lassen wie sie in der Original Datei zu finden sind.
# Add *****SPAM***** to the Subject header of spam e-mails # rewrite_header Subject *****SPAM***** # Save spam messages as a message/rfc822 MIME attachment instead of # modifying the original message (0: off, 2: use text/plain instead) # report_safe 0 # Set which networks or hosts are considered 'trusted' by your mail # server (i.e. not spammers) # trusted_networks 192.168.2. # Set file-locking method (flock is not safe over NFS, but is faster) # # lock_method flock # Set the threshold at which a message is considered spam (default: 5.0) # required_score 5.0 # Use Bayesian classifier (default: 1) # use_bayes 1 use_bayes_rules 1 # Bayesian classifier auto-learning (default: 1) # bayes_auto_learn 1
Änderungen in Spamassassin Milter
Auch hier ist im Grunde nur eine Änderung in der Datei /etc/default/spamass-milter
notwendig. Zunächst stellen wir sicher dass die folgende Konfiguration so gesetzt ist:
###################################### # If /usr/sbin/postfix is executable, the following are set by # default. You can override them by uncommenting and changing them # here. ###################################### SOCKET="/var/spool/postfix/spamass/spamass.sock" SOCKETOWNER="postfix:postfix" SOCKETMODE="0660" ######################################
Das sind die Einstellungen für den Socket den wir oben in der Postfix Konfiguration gesetzt haben, denn der Milter muß ja wissen wo er den UNIX-Socket finden kann.
Als nächstes müssen wir in derselben Datei die OPTIONS einstellen. Im WWW gibt es dazu mehrere Ansichten. Ich habe die besten Erfahrungen mit diesen gemacht:
# - "-u debian-spamd": Hat die Mail mehrere Addressaten wird 'spamassassin' als User für den Check benutzt # Der User 'debian-spamd' hat das Home normalerweise in '/var/lib/spamassassin' # - "-i 127.0.0.1": akzeptiere nur connections von 127.0.0.1 (localhost) # - "-I": leite nur Mails an spamd weiter die sich über den SMTP AUTH authentifiziert haben # Das verhindert den Check von ausgehenden Mails # - "-r 5": Default Spam-Score Schwelle 5 (Bewerte mails mit Spam-Score >5 als Spam) # - "--": Nachfolgende Optionen sind für den aufgerufenen Daemon (hier spamd) # - "-d 127.0.0.1": Sende Anfrage an Spamd nur über IPv4 127.0.0.1 (verhindert IPv6 Zugriff auf ::1) # - "-s 10485760": Checke nur Emails mit einer Größe bis zu 10MB OPTIONS="-u debian-spamd -i 127.0.0.1 -I -r 5 -- -d 127.0.0.1 -s 10485760"
Hinweise zu den OPTIONS:
"-u debian_spamd"
: Spamassassin benutzt für die Mailfilterung einen sogenannten Bayes Algorithmus. Dieser Algorithmus wird mit jeder eingehenden EMail für den entsprechenden Mail Empfänger (dem Nutzer) trainiert und in einer kleinen Datenbank bespeichert. Durch dieses Training wird Spamassassin immer besser Spam von gewollten EMails (Ham) zu unterscheiden. Diese Datenbank wird allerdings für jeden Nutzer einzeln im HOME des Nutzers (z.B./home/Nutzer/.spamassassin
) angelegt.
Aber was ist wenn eine Email eintrifft die mehrere Nutzer auf demselbsen Server erreichen soll? Hier kann es passieren dass die Datenbanken der unterschiedlichen Nutzer wiedersprüchlich sind und Spamassassin nicht weiß wie es sich verhalten soll (Spam? Oder doch kein Spam?). In diesem Fall wird normalerweise der Nutzer ‘spamassassin’ genutzt der dafür angelegt werden muß. Alternativ kann man aber auch einen bereits vorhandenen Nutzer wählen. Hier ist das der Nutzerdebian_spamd
der sein HOME Verzeichnis in/var/lib/spamassassin/.spamassassin
hat."-I"
: Dieser Parameter ist sehr wichtig denn der verhindert den Test auf Spam für ausgehende EMails, denn ausgehende EMails melden sich ja nicht über den SMTP AUTH Mechanismus an, jedoch eingehende schon."-d 127.0.0.1"
– Wenn man diesen Parameter weglässt stellt man fest dassspamc
immer zuerst versucht die Email über IPv6 ‘::1’ an denspamd
zuzustellen. Die erzeugt im Log-File immer eine unschöne Warnmeldung bei jeder einzelnen EMail. Dies kann man mit dem Parameter ‘-d 127.0.0.1’ ausschalten. Dies verhindert den IPv6 Zugriff und es wird sofort der IPv4 Verbindungsversuch gestartet.
Alle anderen Parameter sind, denke ich, ausreichend erklärt.
Das war es auch schon. Nicht vergessen die Dienste spamassassin
und spamass-milter
neu zu starten:
root@fliegerhost:/# service spamassassin restart root@fliegerhost:/# service spamass-milter restart
‘Spam’ und ‘Ham’ anlernen
Auf der Seite http://untroubled.org/spam/ werden regelmässig Spam EMails veröffentlicht mit denen man den Mailfilter Spamassassin anlernen kann. Dazu packt man einfach die entsprechenden *.7z Dateien in ein tempoäres Verzeichnis aus und lernt die EMails mit dem folgenden Befehl sowohl für den Nutzer spamassassin als auch für jeden beliebigen natürlichen Nutzer an:
root@fliegerhost:/# sa-learn --dbpath /var/lib/spamassassin/.spamassassin --progress --spam /tmp/<Pfad_zu_Spam> root@fliegerhost:/# sa-learn --dbpath /home/<Nutzer>/.spamassassin --progress --spam /tmp/<Pfad_zu_Spam>