Red Hat Linux enthält zwei primäre MDAs, Procmail und mail. Beide dieser Applikationen werden als lokale Zustellungsagenten (Delivery Agents) bezeichnet und beide verschieben E-Mails von der Spool-Datei des MTA in die Mailbox des jeweiligen Benutzers. Procmail bietet allerdings ein robustes Filter-System.
Dieser Abschnitt behandelt lediglich Procmail. Für Informationen zu mail, sehen Sie dessen man-Seite.
Procmail filtert und stellt E-Mails zu, sobald diese in die Spool-Datei auf dem localhost eingehen. Es ist sehr umfangreich, nimmt nur wenige System-Ressourcen in Anspruch und ist weitverbreitet. Procmail kann eine kritische Rolle in der Zustellung von E-Mails übernehemen, die von E-Mail Client-Applikationen gelesen werden.
Procmail kann auf verschiedene Weise aufgerufen werden. Procmail kann so konfiguriert werden, dass wenn ein MTA eine neue EMail in Ihrer Spool-Datei ablegt, Procmail diese filtert, am für den E-Mail-Client entsprechend konfigurierten Ort ablegt und beendet. Ihr E-Mail-Client kann aber auch so konfiguriert werden, dass Procmail immer dann gestartet wird, wenn Mitteilungen eingegangen sind und diese Mitteilungen jeweils in die korrekte Mailbox geleitet werden. Häufig wird Procmail durch die .procmailrc-Datei im Homeverzeichnis des Benutzers aufgerufen, wenn MTA eine neue E-Mail erhält.
Procmail ist von Anweisungen bestimmter recipes oder auch Regeln abhängig, die Mitteilungen mit dem Programm vergleichen. Wenn eine Mitteilung mit den Erfordernissen übereinstimmt, wird die E-Mail in einer bestimmten Datei abgelegt, gelöscht oder anderweitig bearbeitet.
Wenn Procmail startet, liest es die E-Mail und unterteilt sie in Hauptinformationen und Kopfzeilen-Informationen. Danach sucht Procmail standardmäßig im ganzen System nach der /etc/procmailrc-Datei und den rc-Dateien im /etc/procmailrcs-Verzeichnis nach Umgebungsvariablen und Recipes. Anschließend sucht Procmail nach einer.procmailrc-Datei im Homeverzeichnis des Benutzers, um Regeln zu finden, die für diesen Benutzer speziell bestimmt sind. Viele Benutzer erstellen auch eigene zusätzliche rc-Dateien für Procmail, die sich auf ihre .procmailrc-Datei beziehen. Diese können schnell ein- bzw. ausgeschaltet werden, wenn beim Filtern von Mails Probleme auftreten.
Standardmäßig gibt es keine systemweiten rc-Dateien im /etc-Verzeichnis und auch keine Benutzer- .procmailrc-Dateien. Wenn Sie Procmail das erste Mal benutzen, müssen Sie eine .procmailrc- Datei mit speziellen Umgebungsvariablen und Recipes erstellen, mit denen Sie festlegen, wie mit bestimmten Mitteilungen zu verfahren ist.
In den meisten Fällen hängt die Konfiguration von Procmail für das Filtern Ihrer E-Mail davon ab, ob eine .procmailrc-Benutzerdatei vorhanden ist. Um Procmail zu deaktivieren und Ihre Arbeit in der .procmailrc-Datei zu speichern, platzieren Sie Procmail mit dem mv ~/.procmailrc ~/.procmailrcSAVE-Befehl in eine Datei mit einem ähnlichen Namen. Wenn Sie Procmail dann erneut testen wollen, ändern Sie den Namen dieser Datei wieder in .procmailrc. Procmail steht Ihnen dann sofort wieder zur Verfügung.
Die Konfigurationsdateien von Procmail, insbesondere die Benutzerdatei .procmailrc, enthalten wichtige Umgebungsvariablen. Diese Variablen geben Procmail an, welche Mitteilungen sortiert werden sollen und wie mit den Mitteilungen verfahren werden soll, die nicht mit den Recipes übereinstimmen, usw.
Diese Umgebungsvariablen erscheinen normalerweise am Anfang der .procmailrc-Datei, und zwar im folgenden Format:
<env-variable>="<value>" |
In diesem Beispiel ist <env-variable> der Name der Variablen, und der <value>-Bereich definiert sie.
Viele Umgebungsvariablen werden von den meisten Procmail-Benutzern nicht verwendet, und viele der wichtigsten Umgebungsvariablen sind bereits standardmäßig eingestellt. Sie werden meistens folgende Variablen verwenden:
DEFAULT — Stellt die Standard-Mailbox ein, in der Mitteilungen, die mit keinem einzigen Recipe übereinstimmen, abgelegt werden.
Der standardmäßige DEFAULT-Wert und $ORGMAIL stimmen überein.
INCLUDERC — Bestimmt zusätzliche rc-Dateien, die weitere Recipes enthalten, die mit Mitteilungen verglichen werden müssen. Dadurch können Sie die Liste der Recipes fpr Procmail in verschiedene Dateien aufteilen, die unterschiedliche Aufgaben übernehmen, wie z.B. das Blockieren von Junkmail und die Verwaltung von E-Mail-Listen, die dann mit kommentierenden Zeilen in der Benutzerdatei .procmailrc ein- oder ausgeschaltet werden können.
Zwei Zeilen in einer .procmailrc-Benutzerdatei sehen z.B. wie folgt aus:
MAILDIR=$HOME/Msgs INCLUDERC=$MAILDIR/lists.rc INCLUDERC=$MAILDIR/spam.rc |
Wenn der Benutzer das Filtern seiner E-Mails ausschalten will, die
Junkmail-Kontrolle aber weiterhin aktiviert bleiben soll, kann er diese Option
in der ersten INCLUDERC-Zeile ganz einfach mit dem
LOCKSLEEP — Bestimmt die Zeitspanne - in Sekunden - innerhalb derer Procmail versucht, eine bestimmte Sperrdatei zu verwenden. Standardmäßig sind 8 Sekunden eingestellt.
LOCKTIMEOUT — Stellt die Zeit ein, die nach der letzten Modifizierung einer Sperrdatei vergeht, bis Procmail davon ausgeht, dass sie alt ist und gelöscht werden kann. Standardmäßig sind 1024 Sekunden eingestellt.
LOGFILE — Der Pfad und die Datei, die alle Informationen über Procmail sowie Fehlermeldungen enthält.
MAILDIR — Stellt das aktuell ausgeführte Verzeichnis für Procmail ein. Ist es eingestellt, beziehen sich alle anderen Pfade in Procmail auf dieses Verzeichnis.
ORGMAIL — Legt die ursprüngliche Mailbox oder andere Orte fest, an denen Mitteilungen abgelegt werden können, wenn sie nicht in der standardmäßigen oder recipe-mäßigen Stelle platziert werden können.
Standardmäßig wird der /var/spool/mail/$LOGNAME Wert verwendet.
SUSPEND — Legt die Zeit fest - in Sekunden - nach der Procmail stoppt, wenn die benötigten Ressourcen, z.B. ein Swap-Space, nicht zur Verfügung stehen.
SWITCHRC — Ermöglicht einem Benutzer, eine externe Datei festzulegen, die zusätzliche Recipes enthält. Ähnlich wie die INCLUDERC-Option, aber mit der Ausnahme, dass die Konfigurationsdatei zur Zeit nicht überprüft wird und nur Recipes, die in der SWITCHRC-spezifischen Datei festgelegt sind, angewendet werden.
VERBOSE — Weist Procmail an, viel mehr Informationen zu protokollieren. Diese Option eignet sich gut für das Debugging.
Weitere wichtige Umgebungsvariablen können Sie Ihrer Shell entnehmen, z.B. LOGNAME, Ihr Login-Name, HOME, die Speicherstelle Ihres Homeverzeichnisses und SHELL, Ihre Standard-Shell.
Eine vollständige Beschreibung aller Umgebungsvariablen sowie deren Werte finden Sie in der procmailrc man-Seite.
Neue Benutzer empfinden den Aufbau der Recipes oft als den schwierigsten Teil im Umgang mit Procmail. Bei einigen Erweiterungen ist das verständlich, wenn die Mitteilungen z.B. anhand von regulären Ausdrücken (regular expressions) mit den Recipes verglichen werden. Dies ist ein besonderes Format, das die Bedingungen für einen Matching String festlegt. Reguläre Ausdrücke sind jedoch weder schwer zu erstellen noch schwer zu verstehen. Ungeachtet der regulären Ausdrücke ist aufgrund der Art und Weise, wie die Procmail Recipes geschrieben sind, einfach, herauszufinden, wie sie funktionieren.
Eine vollständige Beschreibung des regulären Umfangs würde den Rahmen dieses Kapitels sprengen. Die Struktur der Procmail Recipes ist viel wichtiger. Im Internet finden Sie unter anderem unter http://www.iki.fi/era/procmail/links.html hilfreiche Beispiele für Procmail Recipes. Die korrekte Verwendung und Anpassung der regulären Ausdrücke, die Sie in diesen Beispielen finden, hängt vom Verständnis der Struktur der Procmail Recipes ab. In der grep-man-Seite finden Sie einführende Informationen über die grundlegenden Regeln der regulären Ausdrücke.
Ein Procmail Recipe sieht wie folgt aus:
:0<flags>: <lockfile-name> * <special-condition-character> <condition-1> * <special-condition-character> <condition-2> * <special-condition-character> <condition-N> <special-action-character><action-to-perform> |
Die ersten zwei Zeichen in einem Procmail Recipe sind ein Doppelpunkt und eine Null. Nach der Null können wahlweise verschiedene Flags platziert werden, um zu kontrollieren, was Procmail tut, wenn dieses Recipe bearbeitet wird. Ein Doppelpunkt nach dem Abschnitt <Flags> bestimmt, dass für diese Mitteilung eine Sperrdatei erstellt wird. Wenn diese Sperrdatei erstellt wird, geben Sie deren Namen in das <Sperrdatei-Name>-Feld ein.
Ein Recipe kann verschiedene Bedingungen für die Überprüfung einer Mitteilung enthalten. Sind keine Bedingungen enthalten, wird jede Mitteilung dem Recipe angepasst. Zur Vereinfachung eines Vergleichs mit einer Mitteilung werden in einigen Bedingungen reguläre Ausdrücke platziert. Wenn viele Bedingungen verwendet werden, müssen diese alle verglichen werden, bevor eine Aktion ausgeführt wird. Die Bedingungen werden auf der Grundlage der Flags überprüft, die in der ersten Zeile der Regel eingestellt wurden. Spezielle, wahlweise platzierte Zeichen nach dem *-Zeichen können die Bedingungen kontrollieren.
Die Option <auszuführende Aktion> legt fest, was mit einer Mitteilung passiert, die einer der Bedingungen entspricht. Pro Recipe wird nur eine Aktion ausgeführt. In vielen Fällen wird der Name der Mailbox verwendet, um die Mitteilungen in die Datei weiterzuleiten, die die E-Mails tatsächlich sortiert. Es können auch spezielle Zeichen für die Aktion verwendet werden, bevor diese festgelegt wird.
Die Aktion, die ein Recipe beim Vergleichen einer bestimmten Mitteilung durchführt, legt fest, ob das Recipe liefert oder nicht liefert. Ein Delivering Recipe enthält eine Aktion, die eine Mitteilung in eine Datei schreibt, die Mitteilung an ein anderes Programm schickt oder an eine andere E-Mail-Adresse weiterleitet. Ein Non-delivering Recipe hingegen deckt alle anderen Aktion ab, wie z.B. das Verwenden eines Nesting-Blocks. Ein Nesting-Block ist eine Aktion in Klammern { }, die zusätzliche Aktionen für Mitteilungen vorsieht, welche mit den Bedingungen der Recipes verglichen werden. Nesting Blocks können verschachtelt werden und bieten dadurch eine bessere Kontrolle zum Identifizieren und Ausführen von Aktionen in Mitteilungen.
Delivering Recipes, die Mitteilungen vergleichen, weisen Procmail an, eine bestimmte Aktion auszuführen und das Vergleichen der Mitteilungen mit anderen Recipes zu beenden. Mitteilungen, die den Bedingungen in Non-Delivering Recipes entsprechen, werden weiterhin in den aktuellen und folgenden rc-Dateien mit anderen Recipes verglichen. Mit anderen Worten: Non-Delivering Recipes bewirken, dass die Mitteilung weiterhin durch die Recipes kontrolliert wird, nachdem eine bestimmte Aktion eingestellt wurde.
Flags sind sehr wichtig, um festzulegen, wie und ob eine Mitteilung mit den Bedingungen des Recipes verglichen wird. Im allgemeinen werden folgende Flags verwendet:
A — Legt fest, dass dieses Recipe nur verwendet wird, wenn das vorherige Recipe ohne ein A- oder a-Flag diese Mitteilung ebenfalls verglichen hat.
Um sicherzustellen, dass der letzte Vergleich mit dem Recipe erfolgreich abgeschlossen wurde, verwenden Sie das a-Flag.
B — Analysiert den Hauptteil der Mitteilung und sucht nach Matching-Bedingungen.
b — Verwendet standardmäßig den Hauptteil der Mitteilung und die sich daraus ergebenden Aktionen, wie z.B. das Scheiben der Mitteilung in eine Datei oder das Weiterleiten der Mitteilung. Dies ist standardmäßig.
c — Erstellt eine Kopie der E-Mail. Dies ist für die Delivering Recipes hilfreich, da die erforderlichen Aktionen in der Mitteilung ausgeführt und die Kopie weiterhin in den rc-Dateien verarbeitet werden kann.
D — Macht den egrep Vergleich abhängig von Groß- und Kleinschreibung. Standardmäßig wird nicht zwischen Groß- und Kleinschreibung unterschieden.
E — Ähnelt dem A-Flag, mit dem Unterschied, dass die Bedingungen in diesem Recipe nur mit der Mitteilung verglichen werden und das vorherige Recipe ohne E-Flag die Mitteilung nicht verglichen hat. Dies ist vergleichbar mit der else-Aktion.
Verwenden Sie stattdessen das e-Flag, wenn Sie nur dieses Recipe zum Überprüfen verwenden wollen und die Prüfung des vorherigen Recipes fehlgeschlagen ist.
f — Verwendet die Pipe als Filter.
H — Analysiert standardmäßig die Kopfzeile der Mitteilung und sucht nach Matching-Bedingungen.
h — Verwendet standardmäßig die Kopfzeile bei einer Aktion.
w — Weist Procmail an, auf einen bestimmten Filter oder Programm zu warten, der/das meldet, ob die vorangegangene Aktion erfolgreich war, bevor die Mitteilung gefiltert wird.
Wenn Sie "Program failure" (Programmfehler) Meldungen ignorieren möchten, die erscheinen, wenn ein Filter oder eine Aktion nicht erfolgreich war, verwenden Sie stattdessen die W-Option.
Zusätzliche Flags finden Sie in der procmailrc-man-Seite.
Sperrdateien sind für Procmail sehr hilfeich, um sicherzustellen, dass zur gleichen Zeit nicht mehr als ein Prozeß versucht, eine bestimmte Mitteilung zu ändern. Sie können eine lokale Sperrdatei festlegen, indem Sie nach jedem Flag in der ersten Zeile eines Recipes einen Doppelpunkt (:) setzen. Dadurch wird eine Sperrdatei erstellt, die auf dem Namen der Zieldatei und den Einstellungen der allgemeinen LOCKEXT-Umgebungsvariablen basiert.
Alternativ können Sie auch festlegen, dass der Name der lokalen Sperrdatei mit diesem Recipe nach dem Doppelpunkt verwendet wird.
Bestimmte Zeichen, die vor den Procmail Recipe-Bedingungen und Aktionen verwendet werden, ändern die Art, wie diese interpretiert werden.
Die folgenden Zeichen können nach dem *-Zeichen, am Anfang einer Zeile mit den Recipe-Bedingungen verwendet werden:
! — Kehrt die Bedingungen um und verursacht ein Match für den Fall, dass die Bedingungen nicht mit der Mitteilung übereinstimmen.
< — Prüft, ob die Mitteilung eine bestimmte Byte-Zahl unterschreitet.
> — Prüft, ob die Mitteilung eine bestimmte Byte-Zahl überschreitet.
Folgende Zeichen werden verwendet, um spezielle Aktionen durchzuführen:
! — Weist Procmail an, die Mitteilung an die gegebenen E-Mail-Adressen weiterzuleiten.
$ — Verweist auf eine vorher in der Refers to rc-Datei eingestellte Variable. Dieses Zeichen wird üblicherweise verwendet, um eine allgemeine Mailbox einzustellen, die sich auf verschiedene Recipes bezieht.
| — Das Pipe-Zeichen weist Procmail an, ein bestimmtes Programm zu starten, das diese Mitteilung verarbeitet.
{ and } — Erstellt einen Nesting-Block, der weitere Recipes zum Vergleichen mit der Mitteilung enthält.
Wenn am Beginn einer Zeile für eine Aktion kein spezielles Zeichen verwendet wird, geht Procmail davon aus, dass die Aktionszeile in der Mailbox festgelegt ist, in die die Mitteilung geschrieben sein sollte.
Procmail ist ein äußerst flexibles Programm, das es Ihnen erlaubt, Mitteilungen mit sehr spezifischen Bedingungen zu vergleichen und danach detaillierte Aktionen in diesen Mitteilungen ausführt. Aufgrund dieser Flexibilität kann das Erstellen eines Procmail Recipes zu einem bestimmten Zweck für neue Benutzer schwierig sein.
Der beste Weg, um bei der Erstellung von Procmail Recipe-Bedingungen Erfahrungen zu sammeln, ist das Verständnis für reguläre Ausdrücke sowie das Anschauen der Beispiele, die von anderen erstellt wurden. Die folgenden sehr einfachen Beispiele demonstrieren dei Struktur der Procmail Recipes und bilden die Grundlage für kompliziertere Konstruktionen.
Wie im folgenden Beispiel gezeigt, enthalten die meisten einfachen Recipes keine Bedingungen:
:0: new-mail.spool |
Die erste Zeile startet das Recipe und legt fest, dass eine lokale Sperrdatei erstellt werden muss, ohne den Namen dabei festzulegen. Procmail verwendet den Namen der Zieldatei und die LOCKEXT-Option zur Benennung der Datei. Es sind keine Bedingungen festgelegt, so dass jede Mitteilung mit diesem Recipe übereinstimmt und in der Spooldatei new-mail.spool abgelegt wird, die sich in dem Verzeichnis befindet, das von der Umgebungsvariablen MAILDIR festgelegt wird. Ein E-Mail-Client kann die Nachrichten in dieser Datei dann ansehen.
Dieses einfache Recipe kann bis zum Ende aller rc-Dateien gehen, um Mitteilungen zu einer standardmäßigen Location zu leiten. Bei einem komplizierteren Beispiel können Mitteilungen von einer bestimmten Adresse entnommen und entfernt werden, wie aus folgendem Beispiel hervorgeht.
:0 * ^From: spammer@domain.com /dev/null |
In diesem Beispiel werden alle von spammer@domain.com verschickten Mitteilungen an /dev/null weitergeleitet und dort gelöscht.
![]() | Achtung |
---|---|
Vergewissern Sie sich bei jeder Regel, dass sie richtig funktioniert, bevor Mitteilungen an /dev/null weitergeleitet werden, wo sie definitiv und endgültig gelöscht werden. Wenn Ihre Recipe-Bedingungen versehentlich eine korrekte Mitteilung empfangen, werden Sie nicht wissen, dass Sie diese Mitteilung erhalten haben, es sei denn, der Absender benachrichtigt Sie. Es ist besser, wenn sich die Aktionen des Recipes auf eine spezielle Mailbox richten, die Sie von Zeit zu Zeit überprüfen können und nach false positives oder Mitteilungen suchen, die versehentlich mit den Bedingungen verglichen wurden. Wenn Sie feststellen, dass versehentlich keine Mitteilungen überprüft wurden, können Sie die Mailbox löschen und die Aktion, Mitteilungen an /dev/null weiterzuleiten, wieder aktivieren. |
Procmail wird primär als Filter von E-Mails benutzt, der als solcher diese automatisch an die richtige Stelle leitet und Sie die E-Mails nicht manuell sortieren müssen. Das folgende Recipe greift sich die E-Mails heraus, die von einer bestimmten Mailing-Liste gesendet wurden, und legt sie im richtigen Ordner ab.
:0: * ^(From|CC|To).*tux-lug tuxlug |
Jede Mitteilung, die von der tux-lug@domain.com-Mailing-List verschickt wurde, wird automatisch für Ihren E-Mail-Client in der Mailbox tuxlug abgelegt. Bitte beachten Sie, dass die Bedingung in diesem Beispiel die Mitteilung danach überprüft, ob sich die E-Mail-Adresse der Mailing-Liste in den Zeilen From, CC oder To befindet.
Sehen Sie die zahlreichen Procmail Online-Ressourcen, Abschnitt 11.6, für genauere Beschreibungen und kompliziertere Recipes.
Da es von Sendmail, Postfix oder Fetchmail aufgerufen wird, wenn eine neue E-Mail eintrifft, kann Procmail als mächtiges Tool gegen Spam verwendet werden.
Dies trifft vor allem zu, wenn Procmail zusammen mit SpamAssassin verwendet wird. Zusammen, können diese beiden Applikationen Spam E-Mails schnell erkennen, und diese Aussortieren oder Vernichten.
SpamAssassin verwendet Header-Analysis, Text-Analysis, Blacklists, und eine Spam-Tracking Datenbank um Spam richtig zu identifizieren und entsprechend zu markieren.
Der einfachste Weg für einen lokalen Benutzer SpamAssassin zu verwenden, ist die folgende Zeile im oberen Bereich der Datei ~/.procmailrc einzufügen:
INCLUDERC=/etc/mail/spamassassin/spamassassin-default.rc |
Die Datei /etc/mail/spamassassin/spamassassin-default.rc enthält eine einfache Procmail-Regel, die SpamAssassin für alle eingehenden E-Mails aktiviert. Wird eine E-Mail als Spam erkannt, wird diese im Header entsprechend markiert, und dem Titel der E-Mail wird Folgendes vorangestellt:
*****SPAM***** |
Dem Body der Nachricht wird dies in den Abschnitten vorangestellt, die dazu geführt haben, dass diese E-Mail als Spam klassifiziert wurde.
Um als Spam markierte E-Mails abzulegen, kann eine Regel ähnlich der Folgenden verwendet werden:
:0 Hw * ^X-Spam-Status: Yes spam |
Diese Regel legt alle als Spam markierten E-Mails in eine Mailbox mit dem Namen spam.
Da SpamAssassin ein Perl-Skript ist, kann es auf überfüllten Servern notwending werden den binären SpamAssassin Daemon (spamd) und die Client-Applikation (spamc) zu verwenden. Ein solches Konfigurieren von SpamAssassin, erfordert allerdings Root-Zugriff zum Host.
Um den spamd Daemon zu starten, geben Sie folgenden Befehl als root ein:
/sbin/service spamassassin start |
Damit der SpamAssassin Daemon zur Bootzeit gestarten wird, müssen Sie mit einem Initscript-Utility, wie Services-Konfigurationstool (redhat-config-services), den Service spamassassin entsprechend einrichten. Sehen Sie Abschnitt 1.4.2 für weitere Informationen zu Initscript-Utilities.
Um Procmail für die Verwendung der SpamAssassin Client-Applikation anstelle des Perl-Skripts einzurichten, fügen Sie die folgende Zeile im oberen Bereich der Datei ~/.procmailrc hinzu, oder, für eine System-weite Konfiguration, in die Datei /etc/procmailrc:
INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc |
Zurück | Zum Anfang | Vor |
Mail Transport Agents | Zum Kapitelanfang | Mail User Agents |