O'Reilly logo

Mit Open Souce-Tools Spam & Viren bekaempfen by Alexander Wirt, Peter Eisentraut

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

This is the Title of the Book, eMatter Edition
Copyright © 2005 O’Reilly & Associates, Inc. All rights reserved.
|
289
First
Max.
Linie
Max.
Linie
Kapitel 12
KAPITEL 12
Procmail
Procmail ist eine E-Mail-Filterlösung für Unix-Systeme. Es ermöglicht, über eine
eigene Filtersprache E-Mails zu filtern, zu sortieren und zu modifizieren. Auf vielen
Unix-Systemen wird Procmail als Mail Delivery Agent (MDA) eingesetzt, der die
eintreffenden E-Mails entgegennimmt und an die Benutzer ausliefert. Seine Filter-
sprache ist so flexibel, dass es sogar möglich ist, einen Mailinglisten-Server vollstän-
dig mittels Procmail zu schreiben.
In diesem Kapitel sollen allerdings die Möglichkeiten, Procmail zur Filterung von
Spam und Viren einzusetzen, beleuchtet werden. Es wird eine Reihe von Codeteilen
vorgestellt, die jeweils die Aufgabe haben, ein bestimmtes Problem zu lösen. Die
einzelnen Fragmente sind also eher als unabhängige Rezepte statt als Gesamtlösung
anzusehen. Am Ende des Kapitels werden noch einige allgemeinere in Procmail rea-
lisierte Lösungen vorgestellt.
Ein Hinweis vorweg: Dieses Kapitel lebt von seinen regulären Aus-
drücken. Ohne zumindest rudimentäres Wissen über reguläre Aus-
drücke sind die meisten Rezepte nicht zu verstehen; aus diesem
Grund befindet sich in Anhang B, Reguläre Ausdrücke eine Einfüh-
rung in regure Ausdrücke. Um das Thema zu vertiefen, wird das
exzellente Buch »Reguläre Ausdrücke« von Jeffrey E. F. Friedl emp-
fohlen (ISBN 3-8972-1349-4, erschienen im O'Reilly Verlag).
Einführung in Procmail
Dieser Abschnitt gibt eine Einführung in den Aufbau von Procmail-Filtern, um das
Verständnis für die folgenden Abschnitte zu erhöhen. Fortgeschrittene Themen –
wie die Gewichtung von Filtern – werden im Rahmen dieses Buchs nicht behandelt.
Weitere Informationen zu Procmail findet man in den Manpages procmail, proc-
mailex und procmailrc.
This is the Title of the Book, eMatter Edition
Copyright © 2005 O’Reilly & Associates, Inc. All rights reserved.
290
|
Kapitel 12: Procmail
Links
Max.
Linie
Max.
Linie
Procmail aufrufen
Normalerweise sollte Procmail so eingerichtet werden, dass es vom MTA aufgeru-
fen wird. Im Folgenden wird beschrieben, wie dies eingerichtet werden kann. Oft
sind die entsprechenden Einstellungen schon vorkonfiguriert oder müssen nur noch
auskommentiert werden. Wenn die Einbindung in den MTA nicht möglich oder
erwünscht ist, können einzelne Nutzer es auch aus ihrer .forward-Datei heraus auf-
rufen, was unten beschrieben wird.
Einbindung in Postfix
Um Procmail als MDA in Postfix zu verwenden, fügt man einfach die folgende Zeile
in die Postfix-Konfigurationsdatei /etc/postfix/main.cf ein:
mailbox_command = procmail -a "$EXTENSION"
Einbindung in Exim
Um Procmail in Exim einzubinden, geht man wie folgt vor. Man beachte, dass die
entsprechenden Konfigurationen schon häufig voreingestellt sind oder zum einfa-
chen Auskommentieren angeboten werden, oft mit weiteren Einstellungen, die für
das System angebracht sind.
Zuerst definiert man folgenden Transport im Abschnitt
transports der Konfigurati-
onsdatei (Reihenfolge ist unerheblich):
procmail_pipe:
driver = pipe
command = /usr/bin/procmail
return_path_add
delivery_date_add
envelope_to_add
Anschließend gt man diesen Router im Abschnitt routers der Konfigurationsdatei
ein:
procmail:
driver = accept
domains = +local_domains
check_local_user
transport = procmail_pipe
no_verify
no_expn
Die Reihenfolge der Router ist wichtig. Der procmail-Router muss auf jeden Fall vor
dem Router
local_user stehen und – falls vorhanden – auch vor maildrop und
mail4root. Ansonsten sollte er hinter allen anderen Router-Einträgen stehen.
This is the Title of the Book, eMatter Edition
Copyright © 2005 O’Reilly & Associates, Inc. All rights reserved.
Einführung in Procmail
|
291
Rechts
Max.
Linie
Max.
Linie
Einbindung in Sendmail
Selbstverständlich unterstützt auch Sendmail die Verwendung von Procmail. Dazu
fügt man die folgende Zeile in die Sendmail-Konfigurationsdatei sendmail.mc ein:
FEATURE(`local_procmail', `/usr/bin/procmail')dnl
Diese Zeile muss vor der Zeile MAILER(`local') stehen. Nach der Änderung muss
wie üblich die Konfigurationsdatei sendmail.cf mit
m4 erzeugt werden.
Einbindung über .forward-Dateien
Wenn Procmail nicht aus dem MTA heraus aufgerufen wird, kann man es auch aus
der persönlichen .forward-Datei jedes Nutzers heraus aufrufen. Dazu trägt man fol-
gende Zeile in die Datei .forward im jeweiligen Home-Verzeichnis ein:
"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #benutzername"
Diese Zeile besteht aus mehreren Bestandteilen:
Die Pipe am Anfang sagt dem MTA, der diese Datei liest, dass die E-Mail an
einen Prozess weitergeleitet werden soll, anstatt direkt in ein Postfach ausgelie-
fert zu werden.
IFS=' ' setzt das interne Feldtrennzeichen der Shell auf ein Leerzeichen. Damit
umgeht man einen alten Sendmail-Fehler, der das Trennzeichen auf andere
Werte setzt.
•Das && bewirkt, dass der folgende Befehl nur dann ausgeführt wird, wenn der
vorangegangene Befehl erfolgreich ausgeführt wurde.
•Das
exec ersetzt das aktuelle Skript durch den Procmail-Prozess, wenn er
erfolgreich geladen werden konnte.
•Mit
-f- wird Procmail angewiesen, dass fehlende From-Zeilen neu erzeugt wer-
den sollen und die Zeitstempel von bereits existierenden aktualisiert werden
sollen.
•Das
|| besagt, dass der folgende Befehl nur dann ausgeführt werden soll, wenn
der vorherige Befehl fehlgeschlagen ist.
exit 75 gibt, wenn beim Aufruf von Procmail ein Fehler passiert, den Fehler-
code 75 an das ausliefernde Programm zurück. Dieser Code entspricht dem
Makro
EX_TEMPFAIL, was zur Folge hat, dass durch dieses die E-Mail zurück in
die Queue gestellt und die Auslieferung später noch einmal versucht wird.
Der Kommentar
#benutzername muss gesetzt werden, da einige Sendmail-Versi-
onen versuchen, anhand des Dateinamens von Filtern zu erkennen, ob diese
mehrfach vorkommen, und dieses Mehrfachvorhandensein dann wegoptimie-
ren. Deshalb muss jede .forward-Datei ein einzigartiges Element haben.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required