Mail-Filterung mit Procmail
Die Nadel im Heuhaufen
Procmail ist eines jener Programme, die man oft erst auf den zweiten Blick lieben lernt. Wer aber erst mal seine Vorzüge erkannt hat, wird es nicht mehr missen wollen.
Procmail ist eines jener Programme, die man oft erst auf den zweiten Blick lieben lernt. Wer aber erst mal seine Vorzüge erkannt hat, wird es nicht mehr missen wollen.
Vom einfachen automatischen Abspeichern von E-Mails in die Standard-Inbox bis hin zum Filtern und Sortieren aller eingehenden Mails nach vorgegebenen Kriterien - Procmails Anwendungsmöglichkeiten sind schier endlos. Dieses Tutorial soll den Einstieg in das Mail-Filtern mit Procmail erleichtern.
Wer eine der verbreiteten Linux-Distributionen verwendet, greift wahrscheinlich bereits auf die Dienste von Procmail zurück, ohne es zu wissen. Üblicherweise startet der Mail Transfer Agent (MTA) - meist Sendmail - Procmail für jede eingehende E-Mail automatisch und verwendet es zur Abspeicherung von E-Mails in die Standardmailbox des jeweiligen Benutzers. Man bezeichnet es daher auch als Local Delivery Agent (LDA). Procmail kann aber noch sehr viel weiter reichende Dienste leisten.
Befindet sich in Ihrem Heimatverzeichnis eine Datei ».procmailrc«, so wird sie von Procmail für jede eingehende E-Mail nach einer Vorschrift durchsucht, anhand derer eine weitere Verarbeitung dieser Mail erfolgen kann. Das ermöglicht eine automatische Filterung eingehender E-Mails.
Vor dem Schritt in die Praxis ist jedoch noch ein Wort der Warnung angebracht: Testen Sie eine neue Procmail-Konfiguration gründlich, bevor Sie sie zur Verarbeitung Ihrer E-Mails einsetzen. Das kann beispielsweise unter Verwendung eines eigens für diesen Test eingerichteten Benutzer-Accounts geschehen. Procmail ist ein sehr mächtiges Werkzeug und erleichtert die Arbeit erheblich. Umgekehrt kann eine fehlerhafte Verarbeitungsvorschrift aber auch leicht alle eingehenden Mails in eine falsche Mailbox abspeichern oder sogar ins Datennirwana schicken.
Procmail umschließt die Funktionalität von Egrep, eines Programms, mit dem das Durchsuchen von Texten nach bestimmten Suchbegriffen, den regulären Ausdrücken, möglich ist (siehe Kasten "Reguläre Ausdrücke"). Eine ».procmailrc« besteht im einfachsten Fall aus einer Reihe von Rezepten. Ein Rezept hat formal den folgenden Aufbau (eine eckige Klammer [] signalisiert einen optionalen Teil):
:0 [flags] [ : [locallockfile] ] [* ein Suchmuster] [* ein Suchmuster] ... eine Handlungsanweisung
Ein Rezept beginnt stets mit »:0«. Optional folgen unterschiedliche Flags (siehe Tabelle 1). Es folgt eine beliebige Anzahl von Suchbegriffen, dargestellt durch reguläre Ausdrücke. Jeder neue Suchbegriff wird durch ein Sternchen (*) eingeleitet und muss in einer eigenen Zeile stehen. Das Sternchen signalisiert nur den Beginn eines neuen Suchbegriffs und wird nicht zu ihm gezählt.
Ein Rezept wird durch eine Handlungsanweisung abgeschlossen. Steht in dieser Zeile nur ein einzelner Name, bewirkt die Handlungsanweisung das Abspeichern der E-Mail in einen Mail-Folder mit diesem Namen. Das ist sicherlich die am häufigsten vorkommende Regel von Procmail.
Fehlen in einem Rezept die Suchbegriffe oder existiert nur ein leerer Ausdruck (signalisiert durch ein einzelnes Sternchen in einer eigenen Zeile), wird die Handlungsanweisung in jedem Fall ausgeführt. Sind in einem Rezept mehrere Suchbegriffe enthalten, wird nacheinander nach allen Begriffen in der E-Mail gesucht. Nur wenn alle gefunden wurden, wird die Handlungsanweisung ausgeführt (UND-Verknüpfung).
Werden ein oder mehrere Suchbegriffe nicht gefunden, springt Procmail zum nächsten Rezept in ».procmailrc«. Wurden alle Suchbegriffe eines Rezepts in einer Mail gefunden, bricht die weitere Abarbeitung der ».procmailrc« normalerweise ab. Eine passende ODER-Variante gibt es nicht, man muss sie nach der booleschen Algebra mit Hilfe negierter UND-Terme darstellen.
Neben Rezepten können in einer ».procmailrc« noch Environment- und Steuervariablen sowie Kommentare vorkommen. Ein Kommentar wird durch eine Raute (#) eingeleitet.
Nachdem wir den theoretischen Aufbau einer ».procmailrc« kennen, lässt sich eine einfache Version dieser Datei erstellen. Stellen Sie zunächst sicher, dass diese Datei nicht bereits in Ihrem Heimatverzeichnis existiert, und fertigen falls erforderlich ein Backup an.
Da es sich um eine reine Ascii-Datei handelt, kann man jeden beliebigen Texteditor benutzen. Eine sehr einfache ».procmailrc« kann so aussehen:
VERBOSE=yes LOGABSTRACT=all MAILDIR=$HOME/Mail PROCMAILDIR=$HOME/.Procmail LOGFILE=$PROCMAILDIR/log :0 * .incoming
Die im Beispiel angegebenen Verzeichnisse »$HOME/Mail« und »$HOME/ .Procmail« müssen vorher bereits existieren; Procmail legt sie nicht selbsttätig an. Befindet sich eine ».procmailrc« mit diesem Inhalt in Ihrem Heimatverzeichnis, werden alle eingehenden E-Mails automatisch in die Datei »$HOME/Mail/ .incoming« abgespeichert.
Die Werte der Variablen »VERBOSE« und »LOGABSTRACT« sorgen dafür, dass bei jeder Abarbeitung der ».procmailrc« ausführliche Informationen über den Verlauf der Abarbeitung in der »$HOME/ .Procmail/log«-Datei (angegeben durch die Variable »LOGFILE«) abgespeichert werden. Wollen Sie die Generierung dieser Informationen unterbinden, setzen Sie »VERBOSE« auf »no« und kommentieren »LOGABSTRACT« aus (mit Hilfe der Raute). MAILDIR gibt das Verzeichnis an, in dem Mails abgespeichert werden sollen.
Alle bisher besprochenen Variablen sind interne Steuervariablen von Procmail. Im Gegensatz dazu ist »PROCMAILDIR« eine von uns definierte freie Variable, die wir der Übersichtlichkeit und einfacheren Wartbarkeit der ».procmailrc« halber verwenden. In unserem Beispiel gibt diese Variable einfach ein Verzeichnis an, das wir zum Sammeln von im Zusammenhang mit Procmail relevanten Dateien verwenden.
Die Handlungsanweisung besteht in unserem einfachen Beispiel also nur aus einem einzelnen Namen. Der wird von Procmail als Name der Mailbox interpretiert, in die Mails abgespeichert werden sollen. Ist die Variable »MAILDIR« wie in unserem Beispiel definiert, ist keine Angabe eines Verzeichnisses für die Abspeicherung der Mail respektive die Erstellung eines Mail-Folders durch Procmail mehr notwendig.
Alle Rezensionen aus dem Linux-Magazin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...