Red Hat Enterprise Linux 3: Referenzhandbuch | ||
---|---|---|
Zurück | Kapitel 11. E-Mail | Nach vorne |
Red Hat Enterprise Linux enthält zwei primäre MDAs, Procmail und mail. Beide Applikationen werden als 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-Datei im Homeverzeichnis 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.
Die Konfigurationsdateien von Procmail enthalten 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:
MAILDIR=$HOME/Msgs INCLUDERC=$MAILDIR/lists.rc INCLUDERC=$MAILDIR/spam.rc |
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
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.
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.
Procmail Recipes sehen 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, 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 <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 diese Datei weiterzuleiten, wodurch die E-Mails tatsächlich sortiert werden. Es können auch spezielle Zeichen für die Aktion verwendet werden, bevor diese festgelegt wird. Zusätzliche Information über spezielle Zeichen für Aktionen finden Sie unter Abschnitt 11.4.2.4
Die Aktion, die ein Recipe beim Vergleichen einer bestimmten Mitteilung durchführt, unterscheidet zuliefernde Recipes und nicht lieferndeRecipes. Ein zulieferndes 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 nicht lieferndesRecipe 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 zuliefernden Recipe standhalten, führt Procmail die festgesetzte Aktion aus und vergleicht die Nachricht mit keinen anderen Recipes mehr. Nachrichten, die dem Vergleich mit einem nicht-zuliefernden Recipe standhalten, werden weiter mit anderen Recipes verglichen.
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 und erfolgreich verglichen 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.
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 LOCKEXTallgemeinen Umgebungsvariablen basiert.
Alternativ können Sie auch festlegen, dass der Name der lokalen Sperrdatei mit diesem Recipe nach dem Doppelpunkt verwendet wird.
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 die festgelegten Byte-Zahl unterschreitet.
> — 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.
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 Prokmail Recipes und hilfreiche Beispiele können auf verschiedenen Internetseiten gefunden werden (z.B. http://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 simple Strukturen von Procmail- Recipes und können die Grundlage für kompliziertere 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 Umgebungsvariablen 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.
:0 * ^From: spammer@domain.com /dev/null |
In diesem Beispiel werden alle von spammer@domain.com 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 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 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.
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:
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 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:
INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc |
Zurück | Zum Anfang | Nach vorne |
Mail Transport Agents | Nach oben | Mail User Agents |