Red Hat Enterprise Linux enth�lt zwei prim�re MDAs, Procmail und mail. Beide Applikationen werden als LDAs (lokale Zustellungsagenten/Delivery Agents) betrachtet 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 mehrere verschiedene Arten aufgerufen werden. Immer wenn ein MTA ein E-Mail in der Haupt-Spool-Datei ablegt, wird Procmail gestartet. Procmail filtert sodann die Mails, legt sie beim MUA ab und beendet seine Funktion. Der MUA kann aber auch so konfiguriert werden, dass Procmail immer dann gestartet wird, wenn Mitteilungen eingehen, damit diese Mitteilungen jeweils in die korrekten Mailboxen geleitet werden. Standardm��ig wird Promail durch das Vorhandensein der /etc/procmailrc-Datei oder einer .procmailrc-Datei (auch rc-Datei genannt) im Homeverzeichnis des Benutzers aufgerufen, immer wenn der MTA eine neue E-Mail erh�lt.
Ob Procmail auf eine E-Mail reagiert, h�ngt davon ab, ob die E-Mail eine bestimmte Reihe von Regeln erf�llt oder recipes in der rc Datei. Wenn eine Nachricht mit den Erfordernissen �bereinstimmt, wird die E-Mail in einer bestimmten Datei abgelegt, gel�scht oder anderswertig bearbeitet.
Wenn Procmail startet, liest es die E-Mail und trennt die Hauptinformation von der Kopfzeilen-Information. Danach sucht Procmail standardm��ig im ganzen System nach den /etc/procmailrc-und den rc-Dateien im /etc/procmailrcs-Verzeichnis und nach Umgebungsvariablen und Erfordernissen. Anschlie�end sucht Procmail nach einer.procmailrc-Datei im Homeverzeichnis des Benutzers. Viele Benutzer erstellen auch eigene zus�tzliche rc-Dateien f�r Procmail, auf die innerhalb der .procmailrc-Dateien in deren Homeverzeichnissen hingewiesen wird.
Standardm��ig gibt es keine systemweiten rc-Dateien im /etc-Verzeichnis und auch keine .procmailrc-Dateien im Homeverzeichnis eines Benutzers. Deswegen muss jeder Benutzer eine .procmailrc- Datei mit speziellen Umgebungsvariablen und Erfordernissen erstellen.
11.4.1. Konfiguration von Procmail
Die Konfigurationsdatei von Procmail enth�lt wichtige Umgebungsvariablen. Diese Variablen geben an, welche Mitteilungen sortiert werden sollen und wie mit den Mitteilungen verfahren werden soll, die nicht mit den Erfordernissen �bereinstimmen.
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 wichtigeren Umgebungsvariablen sind bereits standardm��ig eingestellt. Meistens werden folgende Variablen verwendet:
DEFAULT — Stellt die Standard-Mailbox ein, in der Mitteilungen, die kein Erfordernis erf�llen, abgelegt werden.
Der standardm��ige DEFAULT-Wert und $ORGMAIL stimmen �berein.
INCLUDERC — Bestimmt zus�tzliche rc-Dateien, die weitere Erfordernisse enthalten, die mit Mitteilungen verglichen werden m�ssen. Dadurch kann die Liste der Erfordernisse f�r Procmail in verschiedene Dateien aufgeteilt werden, die unterschiedliche Aufgaben �bernehmen, wie z.B. das Blockieren von SPAM-Mail und die Verwaltung von E-Mail-Listen, die dann mit bestimmten Kommentierungszeichen in der Benutzerdatei .procmailrc ein- oder ausgeschaltet werden k�nnen.
Zwei Zeilen in einer .procmailrc-Benutzerdatei sehen z.B. wie folgt aus:
Wenn der Benutzer das Filtern seiner E-Mai-Listen ausschalten will, die SPAM-Mail-Kontrolle aber weiterhin aktiviert bleiben soll, kann er die erste INCLUDERC-Zeile ganz einfach mit dem [#]-Zeichen auskommentieren.
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 in Sekunden ein, die nach der letzten Modifizierung einer Sperrdatei vergehen muss, bis Procmail davon ausgeht, dass sie alt ist und gel�scht werden kann. Standardm��ig sind 1024 Sekunden eingestellt.
LOGFILE — Die Datei, in die alle Informationen �ber Procmail sowie Fehlermeldungen geschrieben werden.
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 einen anderen Ort fest, an dem Mitteilungen abgelegt werden, wenn sie nicht an der standardm��igen Stelle oder gem�� den Erfordernissen platziert werden k�nnen.
Standardm��ig wird ein Wert von /var/spool/mail/$LOGNAME verwendet.
SUSPEND — Legt die Zeit in Sekunden fest, nach der Procmail pausiert, 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 Erfordernisse enth�lt. �hnlich wie die INCLUDERC-Option, au�er, dass die Konfigurationsdatei eigentlich nicht �berpr�ft wird und nur die Erfordernisse, die in der SWITCHRC-spezifischen Datei festgelegt sind, angewendet werden.
VERBOSE — Weist Procmail an, mehr Informationen zu protokollieren. Diese Option eignet sich gut f�r die Entfernung von Viren.
Weitere wichtige Umgebungsvariablen k�nnen Sie Ihrer Shell entnehmen, z.B. LOGNAME, das ist 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.
11.4.2. Procmail Recipes
Neue Benutzer empfinden den Aufbau der Recipes (Erfordernisse) oft als den schwierigsten Teil im Umgang mit Procmail. Das ist irgendwie verst�ndlich, da die Mitteilungen anhand von regul�ren Ausdr�cken mit den Recipes verglichen werden. Dies ist ein besonderes Format, das die Bedingungen f�r einen passenden String festlegt. Regul�re Ausdr�cke sind jedoch weder schwer zu erstellen noch schwer zu verstehen. Abgesehen von den regul�ren Ausdr�cken ist es aufgrund der Best�ndigkeit, mit der Procmail Recipes geschrieben sind, einfach, die Handhabe mit Hilfe von Beispielen zu lernen. Beispiele f�r Procmail Recipes finden Sieunter Abschnitt 11.4.2.5.
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, wie Procmail dieses Recipe bearbeitet. Ein Doppelpunkt nach dem Abschnitt <Flags> bestimmt, dass f�r diese Mitteilung eine Sperrdatei erstellt wird. Wenn eine Sperrdatei erstellt wird, k�nnen Sie deren Namen in das <Sperrdatei-Name>-Feld eintragen.
Ein Recipe kann verschiedene Bedingungen f�r die �berpr�fung einer Mitteilung enthalten. Sind keine Bedingungen enthalten, wird jede Mitteilung vom Recipe genehmigt. Zur Vereinfachung eines Vergleichs mit einer Mitteilung werden in einigen Bedingungen regul�re Ausdr�cke platziert. Wenn viele Bedingungen verwendet werden, m�ssen sie alle passen, bevor eine Aktion ausgef�hrt wird. Die Bedingungen werden auf der Grundlage der Flags �berpr�ft, die in der ersten Zeile der Recipes eingestellt wurden. Spezielle, wahlweise platzierte Zeichen nach dem *-Zeichen k�nnen die Bedingung erweitert kontrollieren.
Die Option <action-to-perform> 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 hierbei der Name der Mailbox verwendet, um die Mitteilungen in diese Datei weiterzuleiten, wodurch die E-Mails tats�chlich sortiert werden. Es k�nnen auch spezielle Zeichen f�r die jeweilige Aktion verwendet werden, bevor diese festgelegt wird. Zus�tzliche Information �ber spezielle Zeichen f�r Aktionen finden Sie unter Abschnitt 11.4.2.4.
11.4.2.1. Delivering und Non-Delivering Recipes
Die Aktion, die ein Recipe beim Vergleichen einer bestimmten Mitteilung durchf�hrt, unterscheidet Delivering Recipes und Non-delivering Recipes. Ein Delivering Recipe enth�lt eine Aktion, die eine Mitteilung in eine Datei schreibt, sie 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. Nesting-Block. Ein Nesting-Block ist eine in Klammern enthaltene Reihe von Aktionen{}, die auf Mitteilungen angewandt werden, die die Bedingungen des Recipes erf�llen. Nesting Blocks k�nnen ineinander verschachtelt werden und bieten dadurch eine bessere Kontrolle zum Identifizieren und Ausf�hren von Aktionen bei Mitteilungen.
Wenn Nachrichten dem Vergleich mit einem Delivering Recipe standhalten, f�hrt Procmail die festgesetzte Aktion aus und vergleicht die Nachricht mit keinen anderen Recipes mehr. Nachrichten, die dem Vergleich mit einem Non-delivering Recipe standhalten, werden weiter mit anderen Recipes verglichen.
11.4.2.2. Flags
Flags sind sehr wichtig, um festzulegen, wie oder 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 mit dieser Mitteilung �bereinstimmt.
a — Legt fest, dass dieses Recipe nur verwendet wird, wenn das vorherige Recipe mit einem A- oder a-Flag mit der Mitteilung �bereinstimmt und erfolgreich beendet wurde.
B — Analysiert den Hauptteil der Mitteilung und sucht nach �bereinstimmenden Bedingungen.
b — Verwendet den Hauptteil der Mitteilung bei allen resultierenden Aktionen, wie z.B. das Scheiben der Mitteilung in eine Datei oder das Weiterleiten der Mitteilung. Dies ist die standardm��ige Vorgangsweise.
c — Erstellt eine Kopie der E-Mail. Dies ist f�r die zuliefernden Recipes hilfreich, da die erforderlichen Aktionen bei der Mitteilung ausgef�hrt werden k�nnen und die Kopie weiterhin in den rc-Dateien verarbeitet werden kann.
D — Macht den egrep Vergleich von Gro�- und Kleinschreibung abh�ngig. 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, wenn die Mitteilung mit dem unmittelbar vorherigen Recipe ohne E-Flag nicht �bereinstimmt. Dies ist vergleichbar mit der else-Aktion.
e — Das Recipe wird nur dann mit der Nachricht verglichen, wenn die im unmittelbar vorherigen Recipe festgesetzte Aktion gescheitert ist.
f — Verwendet die Pipe als Filter.
H — Analysiert die Kopfzeile der Mitteilung und sucht nach �bereinstimmenden Bedingungen. Dies wird standardm��ig ausgef�hrt.
h — Verwendet die Kopfzeile bei einer resultiereden Aktion. Dies wird standardm��ig ausgef�hrt.
w — Weist Procmail an, auf das Beenden eines bestimmten Filters oder eines Programmes zu warten, und meldet, ob dies erfolgreich war, bevor die Mitteilung als gefiltert betrachtet wird.
W — Ist identisch mit w au�er dass "Program failure"-Mitteilungen unterdr�ckt werden.
Eine detaillierte Liste zus�tzlicher Flags finden Sie auf der procmailrc Hauptseite.
11.4.2.3. Festlegen einer lokalen Sperrdatei
Sperrdateien sind bei 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 lokale Sperrdatei erstellt, die auf dem Namen der Zieldatei und den individuellen Einstellungen der LOCKEXT globalen Umgebungsvariable basiert.
Alternativ k�nnen Sie auch festlegen, dass der Name der lokalen Sperrdatei mit diesem Recipe nach dem Doppelpunkt verwendet wird.
11.4.2.4. Besondere Bedingungen und Aktionen
Spezielle 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:
! — Dieses Zeichen kehrt die Bedingungen in der Zeile mit den Bedingungen um und verursacht damit, dass nur nur dann eine �bereinstimmung auftritt, wenn die Bedingung mit der Nachricht nicht �bereinstimmt.
< — Pr�ft, ob die Mitteilung unter der festgelegten Anzahl an Bytes liegt.
> — Pr�ft, ob die Mitteilung eine festgesetzte Byte-Zahl �berschreitet.
Folgende Zeichen werden verwendet, um spezielle Aktionen durchzuf�hren:
! — Dieses Zeichen weist Procmail in der Aktionszeile an, die Mitteilung an die festgelegten E-Mail-Adressen weiterzuleiten.
$ — Verweist auf eine vorher in der rc-Datei eingestellte Variable. Dieses Zeichen wird �blicherweise verwendet, um eine allgemeine Mailbox einzustellen, auf die sich verschiedene Recipes beziehen.
| — Startet ein festgelegtes Programm, um die Nachricht zu verarbeiten.
{ and } — Erstellt einen Nesting-Block, der weitere Recipes zum Vergleichen mit �bereinstimmenden Mitteilungen enth�lt.
Wenn am Beginn der Aktionszeile kein spezielles Zeichen verwendet wird, geht Procmail davon aus, dass die Aktionszeile die Mailbox bezeichnet, in die die Mitteilung geschrieben werden soll.
11.4.2.5. Recipe Beispiele
Procmail ist ein �u�erst flexibles Programm. Als Resultat dieser Flexibilit�t kann das Neuerstellen von Procmail Recipes f�r unerfahrene Benutzer schwierig sein.
Der beste Weg zur Entwicklung der F�higkeiten, die f�r das Erstellen von Procmail-Recipes-Bedingungen wichtig sind, ist ein grundlegendes Verst�ndnis f�r regul�re Ausdr�cke kombiniert mit dem Ansehen von vielen Beispielen, die von anderen erstellt wurden. Eine tiefgehende Erkl�rung der regul�ren Ausdr�cke w�rde �ber den Rahmen dieses Abschnittes hinausgehen. Die Struktur von Procmail Recipes und hilfreiche Beispiele k�nnen auf verschiedenen Internetseiten gefunden werden (z.B. https://www.iki.fi/era/procmail/links.html). Die korrekte Verwendung und Anpassung der regul�ren Ausdr�cke kann erreicht werden, wenn Sie sich diese Recipe-Beispiele ansehen. In der grep-man-Seite finden Sie zus�tzlich einf�hrende Informationen �ber grundlegende Regeln der regul�ren Ausdr�cke.
Die folgenden einfachen Beispiele zeigen die Grundstrukturen von Procmail-Recipes und k�nnen die Grundlage f�r aufwendigere Konstruktionen bilden.
Wie im folgenden Beispiel gezeigt, enthalten die meisten einfachen Recipes keine Bedingungen:
:0:
new-mail.spool
Die erste Zeile legt fest, dass eine lokale Sperrdatei erstellt werden muss, ohne den Namen dabei festzulegen. Procmail verwendet den Namen der Zieldatei und die LOCKEXT-Umgebungsvariable zur Benennung der Datei. Es sind keine Bedingungen festgelegt, so dass jede Mitteilung mit diesem Recipe �bereinstimmt und in der einzigen Spooldatei new-mail.spool abgelegt wird, die sich in dem Verzeichnis befindet, das von der Umgebungsvariable MAILDIR festgelegt wird. Ein E-Mail-Client kann die Nachrichten in dieser Datei dann ansehen.
Ein einfaches Recipe wie dieses kann an das Ende aller rc-Dateien gestellt werden, um Nachrichten an einen Standardort zu leiten.
In diesem Beispiel wurden Nachrichten von einer bestimmten E-Mail-Adresse �berpr�ft und weggeworfen.
In diesem Beispiel werden alle von [email protected] verschickten Mitteilungen an /dev/null weitergeleitet und somit gel�scht.
Achtung
Vergewissern Sie sich bei jeder Regel, dass sie richtig funktioniert, bevor Mitteilungen an /dev/null weitergeleitet werden, wo sie endg�ltig gel�scht werden. Wenn ein Recipe unbeabsichtigt Mitteilungen abf�ngt, verschwinden diese Mitteilungen und es wird daher schwierig, die Regel zu berichtigen.
Es ist besser, wenn sich die Aktionen des Recipes auf eine spezielle Mailbox richten, die Sie von Zeit zu Zeit �berpr�fen und dort nach falsch abgelehnten Nachrichten suchen k�nnen. Wenn Sie feststellen, dass keine Nachrichten aus Versehen �berpr�ft wurden, k�nnen Sie die Mailbox l�schen und eine Aktion anweisen, die die Nachrichten an /dev/null sendet.
Das folgende Recipe sammelt E-Mails, die von einer bestimmten Sendeliste gesendet wurden und legt sie in einem festgelegten Ordner ab.
:0:
* ^(From|CC|To).*tux-lug
tuxlug
Jede Mitteilung, die von der [email protected]-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 darauf �berpr�ft, ob sich die E-Mail-Adresse der Mailing-Liste in den Zeilen From, CC oder To befindet.
Ausf�hrlichere und kompetentere Recipes finden Sie in den zahlreichen Procmail Online-Quellen, Abschnitt 11.6.
11.4.2.6. Spam Filter
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 Kopfzeilen-Analyse, Text-Analyse, Blacklists, eine Spam-Tracking Datenbank und eine selbstlernende Bayesische Spam-Analyse, 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:
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 beim Hochfahren des Systems gestartet wird, m�ssen Sie ein Initscript-Utility, wie Services Configuration Tool (redhat-config-services) verwenden, um den Service spamassassin einzuschalten. Siehe 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. F�r eine Konfiguration im ganzen System platzieren Sie die Zeile in der Datei /etc/procmailrc: