Spam-Abwehr mit Linux

15.04.2004 von STEFAN RUBNER 
Über 50 Prozent der E-Mails sind derzeit Spam. Kaum hat man den eigenen Mail-Server eingerichtet, schlägt daher die erste Werbemail auf. Mit dem Mail-Filter SpamAssassin werden Sie aber schnell wieder Herr der Lage.

Der Transport von E-Mail macht einen erheblichen Anteil an der täglich über das Internet bewegten Datenmenge aus. Leider hat jedoch der weitaus größte Teil davon nichts mit der direkten Kommunikation zwischen einzelnen Personen zu tun. Stattdessen enthalten mittlerweile mehr als 50 Prozent aller Nachrichten Werbung - noch dazu die vom Empfänger in aller Regel meist unerwünschte Form, Spam.

Gerade diejenigen, die viel über das Internet kommunizieren oder sehr aktiv in Foren tätig sind, bekommen das Problem am stärksten zu spüren. Dank spezieller Robot-Programme, die das Web nach verwertbaren E-Mail-Adressen durchforsten, landen sie am schnellsten auf den Listen der Spammer. Aber auch wer seine E-Mail-Adresse schützt, sich nicht an öffentlichen Diskussionen beteiligt und sich von Angeboten fernhält, die zum Hinterlassen der Mail-Adresse auffordern, kann Opfer der Spammer werden. Diese gehen nämlich vermehrt dazu über, nicht nur per Sammel-Software ermittelte, sondern auch einfach zufällig generierte Adressen anzuschreiben. Die einzig wirklich hilfreiche Waffe gegen Spam sind Spam-Filter, die die Spreu vom Weizen trennen und in Zusammenarbeit mit Mail-Server oder Mail-Client für Ruhe im Postfach sorgen.

SpamAssassin: ein flexibler Spam-Filter

Der Spam-Filter SpamAssassin erfreut sich gerade unter Linux-Benutzern größter Beliebtheit. Das in der Skriptsprache Perl erstellte Paket bietet vielfältige Funktionen zum Aufspüren unerwünschter Nachrichten und ist deshalb Bestandteil der meisten Linux-Distributionen. SpamAssassin prüft eintreffende E-Mail-Nachrichten mit mehreren Verfahren auf die Wahrscheinlichkeit, dass es sich bei der untersuchten Post um Spam handelt:

Allerdings ähnelt der Kampf gegen Spam dem Wettrennen, das sich auch Viren-Schreiber und die Hersteller von Antivirus-Software liefern. Es tauchen immer neue Verfahren auf, mit denen Spam als normale Nachricht getarnt werden soll. Entsprechend verwenden die Spam-Filter immer neue Algorithmen zur Spam-Erkennung. Diese sich schnell drehende Spirale macht keine der aktuellen Linux-Distributionen mit und so enthalten alle derzeit erhältlichen Angebote eine mehr oder minder stark veraltete Version von SpamAssassin. Außerdem sind die von den Anbietern der Distribution getroffenen Voreinstellungen eher suboptimal und die Integration in das Mail-System ist meist nicht vorhanden. Genug Gründe also, selbst Hand anzulegen.

Installation der Software

Da SpamAssassin nicht nur ein Perl-Modul, sondern auch im CPAN (Comprehensive Perl Archive Network) enthalten ist, empfiehlt es sich, die Installation nicht nach dem unter Linux sonst üblichen Schema "Download, Entpacken, Konfigurieren, Compilieren" vorzunehmen. Viel effektiver ist es, diese Arbeiten gleich vom CPAN-Modul erledigen zu lassen. Bei dieser Methode werden nämlich auch von SpamAssassin eventuell benötigte Zusatzmodule automatisch mit eingerichtet:

su -
perl -MCPAN -e 'install Mail::SpamAssassin'
perl -MCPAN -e 'install DB_File'
perl -MCPAN -e 'install HTML::Header'
perl -MCPAN -e 'install Net::DNS'

Die letzten drei Befehle richten Zusatzmodule ein, die von SpamAssassin nicht unbedingt benötigt werden, deren Installation aber sinnvoll ist. Um das Modul DB_File einrichten zu können, muss das Development-Paket für Berkeley DB, meist db-devel-<version> genannt, auf dem Rechner eingerichtet sein.

Sollte dies der erste Aufruf des CPAN-Moduls auf dem Rechner sein, dann fragt es zunächst ein paar Parameter ab, bevor es mit der eigentlichen Arbeit beginnt. Hier ist lediglich darauf zu achten, dass bei der Frage nach den zu verwendenden Download-Servern eine vernünftige Wahl erfolgt, bei den restlichen Fragen bietet das Modul schon sinnvolle Vorgaben an.

Während der eigentlichen Installation von SpamAssassin fragt das System gleich nach der E-Mail-Adresse, an die Status-Meldungen zu senden sind und erledigt die restliche Installation vollautomatisch. Den Erfolg der Aktion überprüft ein erster Aufruf von SpamAssassin mit dem Paramter -V zur Ausgabe der Versionsnummer:

spamassassin -V

Die zwei Betriebsmodi

Zur Prüfung der eingehenden Nachrichten kennt SpamAssassin zwei unterschiedliche Methoden. Zum einen den Aufruf von SpamAssassin für jede Nachricht, zum anderen die Arbeit als ständig im Hintergrund laufender Dämon, den ein Hilfsprogramm mit den zu prüfenden Mails füttert. Die Dämon-Variante hat den Vorteil höherer Verarbeitungsgeschwindigkeit. Ihr Nachteil besteht darin, dass sich Filterregeln und auch der Bayes'sche Filter in diesem Modus nur global definieren lassen. Allerdings ist dieser Nachteil in den meisten Fällen eher virtuell, da das Gros der Anwender sowieso zu faul ist, den Bayes'schen Filter zu trainieren oder eigene Filterregeln zu entwerfen. Hier bietet der Dämon dann sogar den Vorteil, dass auch diese Anwender von der Arbeit der anderen Nutzer profitieren. Es macht daher Sinn, die Dämon-Variante zu wählen.

Um den Dämon beim Start des Rechners automatisch zu laden, benötigen Sie ein Startup-Skript. Anstatt dieses eigenhändig zu schreiben oder durch Kopieren und Probieren aus einem vorhandenen Script zu erzeugen, bietet sich eine komfortablere Alternative an: Im CPAN-Paket von SpamAssassin ist bereits ein vorgefertigtes Skript für SUSE-Linux enthalten. Netterweise löscht das CPAN-Modul die zur Installation verwendeten Pakete nicht, sondern speichert sie in einem Cache-Verzeichnis. Das Skript muss also nur aus dem Archiv extrahiert, mit dem richtigen Namen in das Verzeichnis /etc/init.d kopiert und der neue Dienst dem System bekannt gemacht werden:

tar -xvzf ~/.cpan/sources/authors/id/F/FE/FELICITY/Mail-SpamAssassin-2.62.tar.gz Mail-SpamAssassin-2.62/spamd/suse-rc-script.sh
cp Mail-SpamAssassin-2.62/spamd/suse-rc-script.sh /etc/init.d/spamd
chmod a+x /etc/init.d/spamd
insserv /etc/init.d/spamd

Puristen stört an dieser Variante noch, dass sie auf eine ältere Version von SUSE-Linux zugeschnitten ist und unter aktuellen Ausgaben eine - für die Funktion von SpamAssassin nicht relevante - Fehlermeldung produziert. Um das zu beheben, löschen Sie in der Datei /etc/init.d/spamd die folgenden Zeilen:

# Source SuSE config
. /etc/rc.config

Unter SUSE-Linux 9.0 erfolgt die Parameterübergabe durch eine eigene Konfigurationsdatei. Daher fügen Sie zwei neue Zeilen ein:

SPAMD_CONFIG=/etc/sysconfig/spamd
test -r $SPAMD_CONFIG && . $SPAMD_CONFIG

Die Parameter, die der SpamAssassin-Dämon beim Start übernehmen soll, legen Sie in der Datei /etc/sysconfig/spamd über die optionale Variable SPAMD_OPTS fest. Damit der Dämon auch wirklich gestartet wird, muss diese Datei zumindest die beiden folgenden Zeilen enthalten:

START_SPAMD=yes
SPAMD_OPTS="-d -L"

Die in der Variablen SPAMD_OPTS hinterlegten Optionen weisen den Dämon-Prozess an, sich wirklich als Dämon zu installieren und nur lokale Tests durchzuführen - also keine Daten mit Servern im Internet auszutauschen.

Basiskonfiguration

Obwohl Sie SpamAssassin auch dazu verwenden können, für einen einzelnen Mail-Client die Filterung zu übernehmen, ist sein häufigstes Einsatzgebiet unter Linux sicher das Zusammenspiel mit einem Mail-Server. Die hierbei verwendeten Arbeitseinstellungen entnimmt der Dämon-Prozess der Datei /etc/mail/spamassassin/local.cf.

Diese wird bei der Installation automatisch erzeugt, enthält aber keine Befehle, so dass SpamAssassin mit der Default-Konfiguration arbeitet. Für den Betrieb als systemweiter Dämon genügt dies jedoch nicht, zumindest ein paar weitere Parameter sind noch zu setzen. Diese betreffen vor allem die erweiterten Funktionen wie "Auto-Whitelist" und den "Bayes-Filter". Beide arbeiten mit Datei-basierten Datenbanken, für die erst einmal Verzeichnisse anzulegen sind, zum Beispiel im Verzeichnisbaum unterhalb von /var.

mkdir -p /var/cache/spam/awl
mkdir -p /var/cache/spam/bayes

Auto-Whitelist

Der Name Auto-Whitelist für diese Funktion ist eigentlich falsch gewählt. Richtiger müsste es Auto-White/Blacklist heissen. Diese Funktion merkt sich für die Mails jedes Absenders deren Spam-Wert, bildet aus allen vorliegenden Informationen den Mittelwert und passt für weitere eintreffende Nachrichten den Spam-Wert in Richtung des Mittelwerts an.

Ein Beispiel: Treffen vom selben Absender zwei Nachrichten ein, wobei SpamAssassin für die erste den Spam-Wert 20, für die zweite eigentlich den Spam-Wert 2 errechnet, dann passt die Auto-Whitelist-Funktion den Spam-Wert für die zweite Nachricht auf 11 an. Das funktioniert natürlich auch in die andere Richtung. So findet zum Beispiel für einen Absender, der zwar viele Nachrichten aber keinen Spam gesendet hat, zunächst eine Korrektur des Spam-Werts nach unten statt.

Die Auto-Whitelist-Funktion ist per Default aktiviert, allerdings muss SpamAssassin noch wissen, wo er seine Datensammlung ablegen soll. Dazu erweitern Sie die Datei /etc/mail/spamassassin/local.cf um den passenden Parameter:

use_auto_whitelist 1
auto_whitelist_path /var/cache/spam/awl/

Es bietet sich an, wie oben gezeigt, den Parameter zur Aktivierung der Auto-Whitelist-Funktion ebenfalls mit in die Konfiguration aufzunehmen. So ist zum einen sofort ersichtlich, welche Funktionen Sie benutzen, zum anderen lassen sich einzelne Features bei Bedarf schnell abschalten, ohne dass ein Suchen nach den Vorgabewerten in der Dokumentation nötig ist.

Bayes-Filter

In den letzten Monaten ist es bei vielen Anti-Spam-Tools Mode geworden, einen naiven Bayes-Filter zu verwenden. Dieser arbeitet mit relativen Häufigkeiten bestimmter Schlüsselwörter (Tokens), um eine Mail als Spam oder Ham (Nicht-Spam) zu identifizieren. Genau wie Auto-Whitelist verwendet er eine Datenbank, deren Pfad ihm mitgeteilt werden muss.

use_bayes 1
bayes_path /var/cache/spam/bayes/
bayes_auto_learn 1

Der letzte Parameter weist SpamAssassin an, den Bayes-Filter automatisch zu trainieren. Das ist sinnvoll, da SpamAssassin ja mit einem Mail-Server zusammenarbeiten soll. Dieser ist im Gegensatz zu einem Anwender an einem Mail-Client nicht in der Lage, den Filter manuell zu trainieren, weshalb SpamAssassin diese Aufgabe selbst erledigen muss. Zur Sicherheit verwendet er in diesem Modus nur Mails mit extrem hohen oder extrem niedrigen Spam-Werten für die Trainingsfunktion.

Fremdsprachenfilter

Für viele Anwender ist es recht einfach, Spam auf den ersten Blick zu erkennen: Die Mails sind in einer Sprache abgefasst, die er normalerweise nicht verwendet. Wer zum Beispiel ausschließlich mit deutschsprachigen Geschäftspartnern kommuniziert, erhält in aller Regel von diesen keine Nachrichten in Englisch, Französisch oder Spanisch. Dies macht sich SpamAssassin zu Nutze und gestattet es, bestimmte Sprachen im Nachrichtentext zu akzeptieren, während anderssprachige Mails mit einem Malus belegt werden. Die Einstellung erfolgt über zwei Paramter in local.cf:

ok_languages en de
ok_locales en

Mit diesen Einstellungen gelten Englisch und Deutsch als verwendete Sprachen, alle anderen werden als potenzielle Spam-Kandidaten angesehen. Der Parameter ok_locale dient zum weiteren Feintuning. Er wertet den verwendeten Zeichensatz aus. Da alle westlichen Sprachen hier ISO-8859-1 - auch bekannt als Latin-1 - verwenden, gilt der Bezeichner "en" für alle westlichen Sprachen.

Beim Eingrenzen der erlaubten Sprachen sollte man jedoch größte Sorgfalt walten lassen. Schließlich weiß man nicht immer, mit welchen Partnern und in welchen Sprachen die Anwender des eigenen Mail-Servers kommunizieren. Hier kann es schnell Ärger geben, wenn plötzlich wichtige Nachrichten wegen eines zu eng gesetzten Sprachfilters nicht mehr beim Empfänger ankommen.

Benimmregeln

Von Haus aus kennzeichnet SpamAssassin jede bearbeitete Mail durch Flags im Nachrichtenkopf, die für den Empfänger normalerweise nicht sichtbar sind. Um auch dem Endanwender ein optisches Feedback zu geben, kann SpamAssassin aber zusätzlich die Betreffzeile einer Nachricht ändern, beispielsweise indem es die Zeichenkette "*****SPAM*****" oder eine andere, vom Administrator definierte Nachricht vor den Originalbetreff stellt. Aktiviert werden diese Funktionen über die folgenden Parameter:

rewrite_subject 1
subject_tag Spam-Verdacht:

Erkennt SpamAssassin eine Mail als Spam, erzeugt er normalerweise eine neue Nachricht, an die er die Spam-Post als Attachment anhängt. Dieses Verfahren hat den Vorteil, dass die Spam-Inhalte nicht verändert werden. Allerdings gibt es Anwender, die dieses Vorgehen nicht tolerieren, weshalb SpamAssassin auch die Option bietet, Spam nur durch Flags im Header zu kennzeichnen. Für diesen Betriebsmodus ist der standardmäßig auf den Wert "1" gesetzte Paramter report_safe zuständig:

report_safe 0

Setzen Sie den Wert auf "2", damit Spam nicht nur als Attachment an eine neue Nachricht angehängt wird. SpamAssassin verwendet dann zusätzlich als Typ für den Nachrichtenanhang type/text, um dessen automatische Ausführung zu verhindern.

Besonders für Abonnenten von Newslettern ist die Einführung eines Spam-Filters meist ein schwerer Schlag. Speziell HTML-Newsletter haben nur eine geringe Chance, nicht für Spam gehalten zu werden. Damit derartige Post dennoch ungehindert den Weg zum Empfänger findet, bietet SpamAssassin mehrere Möglichkeiten, potenziellen Spam als normale Nachricht zu deklarieren:

whitelist_from absender@keinspammer.de
whitelist_from_rcvd absender@keinspammer.de mail.keinspammer.de
whitelist_to meier@meinedomain.de
more_spam_to mueller@meinedomain.de
all_spam_to huber@meinedomain.de

Das dahinter steckende Prinzip ist recht einfach: Mails von Absendern, die hinter dem Schlüsselwort whitelist_from definiert sind, werden generell nicht als Spam klassifiziert. Ähnlich verhält es sich mit whitelist_from_rcvd, allerdings prüft SpamAssassin hier zusätzlich zur Absenderadresse auch, ob der sendende Mailserver mit dem angegebenen Server übereinstimmt. Über die drei funktional ähnlichen Schlüsselworte whitelist_to, more_spam_to und all_spam_to definieren Sie Empfänger mit unterschiedlichen Toleranzgrenzen für Spam. Benutzer, die Sie unter all_spam_to eintragen, erhalten schlichtweg jede eintreffende Nachricht. Bei den den anderen beiden Varianten werden allzu exzessive Spam-Mails nach wie vor erkannt. Für alle Adressangaben können Sie auch Wildcards verwenden, mehrere Angaben hinter dem Schlüsselwort sind ebenfalls zulässig. Zum Beispiel lässt sich ein Whitelist-Eintrag für mehrere Domains auch so definieren:

whitelist_from *@tecchannel.de *@whocares.de

Selbstverständlich funktioniert das auch in die andere Richtung, um normalerweise nicht als Spam erkannte Nachrichten zwangsweise als Spam zu deklarieren:

blacklist_from *@spam-central.com
blacklist_to public_spam@meinedomain.de

Externe Schnittstellen

Parallel zu den lokalen Spam-Filtern haben sich inzwischen einige Datenbanken im Internet etabliert, die ebenfalls der Spam-Bekämpfung dienen. Sie bieten beispielsweise Prüfsummen bekannter Spam-Nachrichten an, anhand derer sich die eingehende Post sortieren lässt. Zu drei dieser Systeme bietet SpamAssassin eine Schnittstelle: Distributed Checksum Clearinghouse (DCC), Razor und Pyzor. Diese Tools sind jeweils gesondert von SpamAssassin zu installieren. Dabei sollten Sie beachten, dass bei ihrer Nutzung für jede zu prüfende Mail eine Internet-Verbindung aufgebaut wird und Daten über die Leitung gehen. Speziell bei einem nach Volumen abgerechneten Tarif kann das schnell ins Geld gehen. Es ist daher ratsam, die Abschaltoptionen für diese Dienste zumindest als Kommentar in die Konfiguration aufzunehmen:

# use_dcc 0
# use_pyzor 0
# use_razor2 0

Ein weiterer Kandidat für unerwarteten Internet-Traffic ist der Abgleich der Mail-Absender mit verschiedenen schwarzen Listen, den so genannten Real Time Blacklists. In diesen finden sich, häufig aktualisiert, die IP-Adressen bekannter Spam-Versender, offener Relays und anderer Spam-Quellen. Auch hier gilt: die Funktion an sich ist sinnvoll, der Ausschalter sollte trotzdem in der Konfiguration aufgeführt sein:

# skip_rbl_checks 1

Integration in XMail

Nachdem nun die ganze Theorie rund um die einzelnen Filter besprochen ist, bleibt nur noch zu klären, wie man SpamAssassin zur Zusammenarbeit mit dem eigenen Mail-Server bewegt. Je nach verwendeter Server-Software unterscheiden sich die dazu notwendigen Arbeitsschritte. Generell gilt jedoch, dass SpamAssassin als Filter in die Mail-Verarbeitungsroutine integriert wird. Das folgende Beispiel beschreibt die Integration von SpamAssassin in XMail.

XMail bietet ein recht flexibles, dafür aber nicht ganz einfaches System, Filter in die Mail-Verarbeitung zu integrieren. Erste Anlaufstelle ist hierbei die Konfigurationsdatei /var/MailRoot/filters.in.tab. Sie muss für jeden auszuführenden Filter eine Zeile der Form

<absender> <empfaenger> <sender-ip> <lokale-ip> <filter>

aufweisen. Dabei gibt Filter nicht etwa den eigentlichen Filter an, sondern zeigt auf eine weitere Konfigurationsdatei, die im Verzeichnis /var/MailRoot/filters abgelegt sein muss. Um nun alle eingehenden Nachrichten für die Domain meinedomain.de durch den Filter safilter zu schleusen, sähe der Inhalt von /var/MailRoot/filters.in.tab so aus:

"*" "*@meinedomain.de" "0.0.0.0/0" "0.0.0.0/0" "safilter.tab"

Die Datei safilter.tab wiederum enthält den Aufruf des eigentlichen Filterprogramms nebst den von diesem benötigen Parametern. Da XMail zudem bestimmte Rückgabewerte erwartet genügt es nicht, einfach den zum SpamAssassin-Daemon gehörenden Client spamc aufzurufen. Ein Skript muss dafür sorgen, dass die vom Client gelieferten Rückgaben in für XMail verständliche Werte gewandelt werden. Zum Glück hat sich bereits jemand diese Arbeit gemacht und nicht nur das Skript, sondern auch gleich die passende Filterdefinition geschrieben. Auf der XMail-Seite von Drakeconsult finden sich verschiedene Versionen des Scripts sa_filter für unterschiedliche XMail-Versionen. Die Installation für XMail 1.17 ist mit wenigen Befehlen erledigt:

wget http://www.drakeconsult.com/xmail/dist/sa_filter-1.3.tar.gz
tar -xvzf sa_filter-1.3.tar.gz
cd sa_filter-1.3
cp sa_filter.pl /var/MailRoot/bin
cp safilter.tab /var/MailRoot/filters

Um eine reibungslose Zusammenarbeit mit den für XMail existierenden Verwaltungstools wie zum Beispiel XPAI zu gewährleisten, sollte die Datei safilter.tab nicht umbenannt werden. Nach einem Neustart von XMail werden nun alle Nachrichten entsprechend der vorhandenen Filterregeln für Domains oder einzelne User von SpamAssassin geprüft.

Fazit

SpamAssassin ist ein leistungsfähiger, flexibler Spam-Filter, der allerdings ein wenig Fingerspitzengefühl bei der Installation und der Wartung erfordert, insbesondere wenn es an die Optimierung der Gewichtungen geht. Umfangreiche Tuning-Optionen erlauben die Anpassung auf individuelle Bedürfnisse und ist die Hürde der Integration in den Mail-Server erst einmal genommen, erfreut SpamAssassin mit einer sehr hohen Trefferquote. (mha)