Spam-Filter für E-Mails

Einleitung

Da in der letzten Zeit die Spam-E-Mails an unsere Fachschaftsratsadresse (und auch meine eigene Adresse) stark zunahmen, habe ich einen Filter entwickelt, der einen Großteil des Spams ausfiltern soll.

Diesen Spamfilter stelle ich hiermit auch anderen Interessierten zur Verfügung, die einen E-Mail-Account am Institut für Mathematik haben.

Technik

Da unsere FSR-Verteilerliste bereits über Procmail verwaltet wird, habe ich die selbe Technik auch für den Spam-Filter benutzt.

Hierbei kann in einem Skript festgelegt werden, wie hereinkommende E-Mails zu behandeln sind - dabei können anhand des Inhaltes der E-Mail jeweils andere Aktionen ausgeführt werden.

Bei der Erkennung wird der Spam zunächst mit einem X-Spam-gefunden-Header (mit Erläuterung) versehen. Später wird dann (zumindest in der Standard-Version) alle Mail mit dieser Marke an eine andere Adresse weiterzuleiten. Dort sehe ich jeweils regelmäßig nach, ob nicht doch eine eigentlich erwünschte E-Mail mit ausgefiltert wurde.

Außerdem passe ich den Mailfilter regelmäßig an, da sich auch die Spammer ständig neue Methoden ausdenken, und so doch Mails durchkommen.

Anwendung

Um den Filter anzuwenden, gibt die Möglichkeiten, meine Spamfang-Adressen mitzubenutzen oder eigene zu verwenden. Auch die Speicherung in lokalen Dateien ist möglich.

Achtung: Es werden natürlich nur E-Mails gefiltert, die über die Mathe-Adresse eingehen. (Bei mir sind das alle, da bis auf eine geheime Adresse alle Adressen hierher weitergeleitet werden.)

Verwendung der Standard-Adresse

Hierfür sind folgende Schritte hinreichend (über notwendig sage ich nichts - es geht garantiert auch anders):

  1. Erstellen (oder Ändern) der Datei .forward im eigenen Home-Verzeichnis mit dem Inhalt
    "|exec /usr/bin/procmail"
    Dies sorgt dafür, dass jede eingehende E-Mail an das Procmail-Programm verfüttert wird.
  2. Erstellen (oder Ändern) der Datei .procmailrc im eigenen Home-Verzeichnis mit dem folgenden Inhalt
     # Suchpfad für Programme
    PATH=/bin:/usr/bin:/usr/local/bin
     # Verzeichnis, in dem Mail abgelegt wird
    MAILDIR=$HOME/mail
     # Was passiert mit übrigbleibender Mail?
    DEFAULT=$MAILDIR/mbox
     # Hier ein Protokoll schreiben
    LOGFILE=$MAILDIR/procmail.log
    
    # Spamfilter einbinden 
    
    INCLUDERC = /u/ebermann/mailfilter/spamfilter-default.rc
    Willst du die E-Mails nicht direkt (z.B. mit PINE) oder POP3 vom Mathe-Server lesen, sondern an eine andere Adresse weiterleiten lassen (wie du es vielleicht schon vorher mit der .forward-Datei gemacht hast), so kannst du am Ende noch eine passende Regel einfügen (damit werden alle nicht-weggefilterten Mails behandelt):
    :0
    ! Zieladresse
    Auch beliebige weitere Behandlungen (sogar die Einrichtung einer Mailingliste etc.) ist hiernach möglich. Ich empfehle bei Interesse das Lesen der Manual-Page (man procmail) bzw. Suchen im Internet.

Nun werden alle Spam-Mails an die Adresse weitergeleitet, die ich dafür vorgesehen habe. Ich werde mir diese mehr oder weniger regelmäßig ansehen und abrufen.

Diese Variante ist also nur dann zu empfehlen, wenn du mir vollkommen vertraust - zunächst bezüglich Nicht-Böswilligkeit (ich versuche nicht, deine E-Mails abzufangen) und weiterhin, dass ich nicht zu faul bin (oder es vergesse), dir versehentlich gefilterte Adressen zuzuschicken.

Falls du meinst, dass sowieso nichts wichtiges an diese Adresse kommt, kannst du natürlich dich auch so verhalten :-)

Individuelle Behandlung des Spams

Wenn du mich nicht mit dem aussortieren Spam belasten willst, kannst du dich auch selbst drum kümmern. Dazu kann man einfach nur den Erkennungs-Teil des Filters nutzen. Abweichend zu oben sieht dann die .procmailrc z.B. so aus:

 # Suchpfad für Programme
PATH=/bin:/usr/bin:/usr/local/bin
 # Verzeichnis, in dem Mail abgelegt wird
MAILDIR=$HOME/mail
 # Was passiert mit übrigbleibender Mail?
DEFAULT=$MAILDIR/mbox
 # Hier ein Protokoll schreiben
LOGFILE=$MAILDIR/procmail.log

 # Spamerkennung 

INCLUDERC = /u/ebermann/mailfilter/spamerkennung.rc

 # Nun die eigentliche Entsorgung:
:0 h
* ^X-Spam-gefunden:
! Spamfang-Adresse

Statt weiterleiten an eine spezielle Adresse (mit !) kannst du sie auch in einer Datei oder einem Verzeichnis speichern (einfach den Namen angeben - mit kompletten Pfad, $HOME steht für das eigene Home-Verzeichnis) oder sie an ein Programm weitergeben (mit | und dem Programmnamen). Man kann auch einfach gar nichts machen, sondern nur das eigene Mail-Lese-Programm dies ausfiltern lassen.

Genauso wie oben kann man natürlich auch hier danach die Mail selbst weiterbehandeln.

Auch hier ist Vertrauen zu mir erforderlich, denn ich habe auch hier die Möglichkeit, jegliche Mail an euch abzufangen (oder mir auch nur eine Kopie schicken zu lassen). Ich bräuchte dazu nur eine zusätzliche Weiterleitungsregel in das Erkennungs-Skript aufnehmen.

Hierfür wäre aber Absicht notwendig, Faulheit alleine reicht nicht.

Benutzung auf anderen Systemen

Um das ganze außerhalb des Mathe-Netztes nutzen zu können, kann man sich auch die Filter-Dateien herunterladen.

Allerdings hat man dann keine automatische Aktualisierung, wenn ich den Filter anpasse (meist täglich, manchmal seltener), und muss sich selbst darum kümmern, regelmäßig eine neue Filter-Datei zu bekommen. Außerdem müssen die verwendeten Pfade in den Dateien natürlich angepasst werden.


Paul Ebermann
Lasta modifado: Thu Jul 3 23:52:44 MEZMS 2003