Kampf dem Spam

Was ist Spam?

Spam ist unerwünschte Werbung per Email.

Diese Unart nimmt leider immer schlimmere Ausmaße an. So kommen bei mir pro Tag rund 10-20 Emails an, die mich mit Werbung (zweifelhaften Inhalts) zupflastern.

Sehr oft konnte ich beobachten, daß Die Mails über meine Usenet-Mailadresse[1] kommen. Das lässt den Schluß zu, daß die Spammer systematisch Usenet-Gruppen[2] abgrasen und wahllos alle Mailadressen in ihre Spam-Datenbank aufnehmen.

Was kann man gegen Spam tun?

Ganz einfach gesagt: Alle Mails filtern.

OK, das ist vielleicht etwas zu pauschal beschrieben ...

Genauer gesagt geht es darum die Spreu (Spam) vom Weizen (echte Mails) zu trennen. Um Spam von den echten Emails zu unterscheiden, muß man diese erstmal als Spam erkennen. Glücklicherweise gibt es Erkennungsmuster für Spam-Mails:

Erkennungsmuster von Spam

Einige Erkennungsmuster von Spam der bei mir eintrifft sind z.B.:

Der erste Versuch mit KMail[4]

Um dem Spam Herr zu werden habe ich einige Filter in KMail eingerichtet. Das funktioniert auch soweit ganz gut, allerdings muß man fast täglich einen neuen Filter anlegen, da eine RegEx[5] nicht mehr passt, oder eine neue (Fantasie-)Domain als Absender genommen wurde.

Die Verbesserung mit 'mailfilter'

Alle Versuche die eingehenden Mails mit KMail zu filtern sind zwar nett, aber die Mails müssen dazu dennoch zuerst vom Postfach abgeholt werden.

In meinem speziellen Fall ist das aufgrund einer Flatrate zwar nicht teurer als wenn kein Spam ankommen würde, aber es ist lästig die Mails zuerst abzuholen und dann erst auf dem Rechner zu filtern und zu löschen. Deswegen soll der Spam gleich auf dem Mailserver gelöscht werden, so daß ich lokal weniger filtern muß.

Die Lösung dafür ist 'mailfilter' [6]. Dieses Programm wird dem eigentlichen Abruf der Mails vorgeschaltet und löscht den entsprechenden Spam auf dem Server.

Die Installation von 'mailfilter' ist recht einfach und unter Linux mit dem üblichen "\.configure && make && make install" schnell erledigt.

Anschließend ist eine Konfigurationsdatei im eigenen HOME-Verzeichnis zu erstellen. Hier ein Beispiel:

# ~/.mailfilterrc

LOGFILE  = /home/martin/Mail/mailfilterlog
VERBOSE  = 3

############
# Mailserver
############

# Postfach 1
SERVER   = post.domain.com
USER     = username
PASS	 = passwort
PROTOCOL = POP3
PORT	 = 110

# Postfach 2
SERVER	 = pop.domain.com
USER	 = anderer_username
PASS	 = anderes_passwort
PROTOCOL = POP3
PORT	 = 110


REG_TYPE = extended
REG_CASE = no

NORMAL   = yes

###################
# Mailfilter-Regeln
###################
DENY=^Subject:.*Viagra
DENY=^Subject:.*Video-Botschaft
DENY=^Subject:.*enlarge
[...]

Da mehr als ein Postfach geprüft werden kann, sind im o.a. Beispiel zwei Postfächer aufgeführt. Die danach folgenden Regeln (RegEx) gelten für alle angegebenen Postfächer.

In diesem Fall werden alle Mails auf den Servern gelöscht die die Worte "Viagra", "Video-Botschaft" und "Penis" enthalten. Durch die Option "REG_CASE = no" werden auch die Schreibweisen "ViAGrA", "VidEO-BOtsChaFT" und "pEnIs" ausgefiltert, da dadurch die Groß- und Kleinschreibung ignoriert wird.

Die Option "NORMAL = yes" bewirkt, daß alle nicht-alphanumerischen Zeichen aus dem Betreff ignoriert werden. Somit ist auch die Filterung von "V:I:A:G:R:A" und "e.n.l-a:r.g-e" gewährleistet.

Alle weiteren Optionen und Filterregeln sind auf der mailfilter-Homepage[6] nachzulesen.

Um nachvollziehen zu können, welche Mails auf dem Server gelöscht wurden, wird das Ergebnis von 'mailfilter' in eine Logdatei geschrieben. Diese ist zwingend anzulegen. In der o.a. .mailfilterrc ist diese unter LOGFILE einzutragen.

Mailfilter kann nun direkt von der Konsole mittels #~> mailfilter gestartet werden.

Einbinden von 'mailfilter' in 'fetchmail'

Da ich meine Mails nicht manuell abhole, habe ich dafür 'fetchmail'[7] eingerichtet. Fetchmail holt meine EMails alle 30 Minuten automatisch von den verschiedenen Mailservern ab und legt diese in mein lokales Postfach. Soweit so gut. Allerdings soll 'fetchmail' vorher bitte 'mailfilter' aufrufen und dann erst die Mails von den Servern abholen.

Dies ist wiederum sehr einfach, da die Konfigurationsdatei (~/.fetchmailrc) dazu lediglich um eine Zeile erweitert werden muß. Hier ein Beispiel:

# ~/.fetchmailrc
set logfile "/home/martin/Mail/fetchmaillog"
set postmaster "root"
set bouncemail
set no spambounce
set properties ""
poll post.domain.com with proto POP3 and options no dns
       user 'username' there with password 'passwort' is 'martin' here options fetchall
       preconnect "mailfilter"

poll pop.domain.com with proto POP3 and options no dns
       user 'anderer_username' there with password 'anderes_passwort' is 'martin' here options fetchall
  

Durch die Zeile preconnect "mailfilter" wird beim ersten Eintrag festgelegt, daß vor dem Abholen der Mails bitte die 'mailfilter' gestartet werden soll. Dieser Aufruf braucht nur einmal in der '.fetchmailrc' auftauchen, da in der '.mailfilterrc' bereits alle Server definiert sind.

Feinarbeit mit Spamassassin

Spamassassin kommt bei mir nach 'mailfilter' dran. Ich möchte nämlich auch den Spam herausfiltern, der durch den 'mailfilter'-Filter durchgerutscht ist. Spamassassin filtert aber erst nachdem/während die Mail vom Mailserver übertragen wird.

Spamassassin ist ein Perlprogramm, das über CPAN oder http://www.spamassassin.org bezogen werden kann.

Die Installation von Spamassassin ist relativ unspektakulär:

Wenn bereits Perl installiert ist kann das Paket über CPAN mittels #~> perl -MCPAN -e 'install Mail::SpamAssassin' heruntergeladen und installiert werden.

Ergebnis

Im Zeitraum vom 04.03.03 - 15.04.03 kamen hier 328 Spam-Mails an. Das sind pro Tag rund 10 Mails reinster Schrott.

Allerdings ist mir aufgefallen, daß sich die Anzahl sofort häuft, sobald ich ins Usenet poste (so komme ich auf 20-30 Spammails an manchen Tagen). Im Selben Zeitraum habe ich 66 Postings im Usenet abgesetzt. Jedem Posting im Usenet folgen statistisch gesehen rund 5 Spammails.
Die meisten Spammails tragen als (gefälschte!) Absenderadresse "aol.com". Der einfachste Filter wäre also einfach alle Mails von aol.com zu löschen. Dumm nur wenn man Freunde mit AOL-Account hat. (Anmerkung: AOL selbst ist an dieser Situation selbstverständlich nicht Schuld, sondern ebenso Leidtragender, da die Absenderadressen sehr leicht gefälscht werden können.)

Hier nun die vorläufige Statistik: anzeigen


[1] Usenet-Mailadresse
Separate Email-Adresse für Usenet-Gruppen. Dies ist hilfreich um festzustellen woher jemand meine Mailadresse hat und woher Spam kommt.

[2] Usenet
Diskussionsgruppen zu allen möglichen Themengebieten. Auch Newsgroups genannt. Diese sind über den News-Server des Provider erreichbar.

[3] "unsubscribe"-Link
Ein solcher Link ist häufig in Spam-Mails zu finden. Dieser Link soll dem Leser suggerieren, daß wenn er diesem Link folgt keine Mails mehr vom Absender bekommt. Leider ist genau das Gegenteil der Fall. Wird solch einem Link gefolgt, weiß der Absender, daß die Mail gelesen wurde und es sich somit um eine gültige Email-Adresse handelt, die man schön weiter mit Spam zuschütten kann.

[4] KMail
KMail ist ein Programm um Emails zu lesen und zu schreiben (MUA) für KDE (http://www.kde.org). KMail verfügt über einen frei konfigurierbaren Mailfilter

[5] RegEx
RegEx = Regular Expression = Regulärer Ausdruck
RegEx dienen der Mustererkennung z.B. in Email-Adressen. Wenn z.B. häufig Spam mit ähnlichen (nicht identischen) Absenderadressen geliefert wird, kann diese Ähnlichkeit mittels RegEx erkannt werden.
Beispiel:

l3l4ö5kj1@offerli.com und 3j5jl241@offerse.com

Hier würde z.B. eine RegEx wie: .{1,}@offer.{1,}\.com zum Erfolg führen. Es wird nach dem Muster: <beliebiges Zeichen, mindestens ein mal vorhanden>@offer<beliebiges Zeichen, mindestens ein mal vorhanden>.com gesucht.

[6] mailfilter
... ist zu beziehen von http://mailfilter.sourceforge.net

[7] fetchmail
... ist ein Programm, welches EMails automatisch von mehreren Postfächern abholt und an die lokalen Empfänger zustellt. Fetchmail kann manuell oder zeitgesteuert über einen 'cron'- oder 'at'-Job gestartet werden.
Fetchmail lässt sich über http://www.catb.org/~esr/fetchmail/ herunterladen.