Red Hat Linux inclut deux ADC primaire, à savoir Procmail et mail. Ces deux applications sont considérées comme des agents de distribution de courrier (ou ADC) locaux et toutes les deux transmettent le courrier électronique du fichier spoule d'un ADC à la boîte à lettres de l'utilisateur. Toutefois, Procmail fournit un système de filtrage robuste.
Cette section examine seulement Procmail de façon détaillée. Pour toute information sur la commande mail, consultez la page de manuel qui lui est dédié.
Procmail distribue et filtre le courrier électronique du moment où il est placé dans le fichier spoule de messagerie de l'hôte local. Il est puissant, peu exigeant en matière de ressources de système et très utilisé. Procmail peut jouer un rôle critique dans la distribution du courrier qui sera lu par les applications client de messagerie.
Il existe différentes façons d'invoquer Procmail. Dès qu'un ACT dépose un message dans le fichier spoule de messagerie Procmail est lancé. Ce dernier filtre et classe le courrier de manière à ce que l'ACT puisse le trouver et quitte. L'ACT peut également être configuré de sorte qu'il exécute Procmail chaque fois qu'un message est reçu afin que le courrier soit acheminé vers les boîtes à lettres appropriées. Par défaut, la présence d'un fichier .procmailrc dans le répertoire personnel d'un utilisateur invoquera Procmail dès qu'un ACT reçoit un nouveau message.
Les actions effectuées sur un message électronique par Procmail dépendent des instructions de recettes particulières, ou règles, par rapport auxquelles les messages sont comparés. Si un message correspond à la recette, il peut alors être placé dans un fichier donné, supprimé ou traité d'une autre façon.
Lorsque Procmail est lancé, il lit les messages électroniques et sépare le corps de message des informations d'en-tête. Ensuite, Procmail cherche les fichiers /etc/procmailrc et rc dans le répertoire /etc/procmailrcs pour trouver les variables d'environnement Procmail, d'ensemble et par défaut, ainsi que les recettes. Procmail cherche alors un fichier .procmailrc dans le répertoire personnel de l'utilisateur pour trouver des règles spécifiques à cet utilisateur. De nombreux utilisateurs créent des fichiers rc supplémentaires pour Procmail, qui sont référencés par leur fichier .procmailrc mais peuvent être activés ou désactivés rapidement en cas de problème lors de la filtration de messages.
Par défaut, aucun fichier rc pour l'ensemble du système n'existe dans le répertoire /etc et aucun fichier utilisateur .procmailrc n'existe. Pour commencer à utiliser Procmail, créez un fichier .procmailrc contenant des variables d'environnement et des règles spécifiques pour certains types de messages.
Dans la plupart des configurations, la décision de lancer Procmail et de tenter de filtrer le courrier est basée sur l'existence d'un fichier utilisateur .procmailrc. Pour désactiver Procmail, mais enregistrer votre travail dans le fichier .procmailrc, déplacez-le vers un nom de fichier similaire à l'aide de la commande mv ~/.procmailrc ~/.procmailrcSAVE. Lorsque vous êtes prêt à tester Procmail de nouveau, redonnez au fichier son nom original, soit .procmailrc. Procmail recommencera à fonctionner immédiatement.
Fichiers de configuration de Procmail, mieux connus comme étant les fichiers utilisateur .procmailrc, contiennent d'importantes variables d'environnement. Celles-ci indiquent à Procmail quels messages trier, quoi faire avec les messages qui ne correspondent à aucune recette, etc.
Ces variables d'environnement se trouvent généralement au début du fichier .procmailrc au format suivant:
<variable-env>="<valeur>" |
Dans cet exemple,<variable-env> représente le nom de la variable et la section <valeur> définit la variable.
La plupart des utilisateurs de Procmail se servent d'un petit nombre de variables et la plupart des variables d'environnement les plus importantes sont déjà définies à l'aide d'une valeur par défaut. Généralement, les variables suivantes seront utilisées:
DEFAULT — Définit la boîte à lettres où seront placés les messages qui ne correspondent à aucune recette.
La valeur DEFAULT par défaut est la même que $ORGMAIL.
INCLUDERC — Spécifie des fichiers rc supplémentaires qui contiennent d'autres recettes servant à comparer les messages. Ceci permet de diviser vos listes de recettes Procmail en fichiers individuels qui jouent différents rôles, tels que le blocage de spams et la gestion de listes d'adresses électroniques, qui peuvent ensuite être activés ou désactivés à l'aide de caractères de commentaire dans le fichier .procmailrc de l'utilisateur.
Par exemple, des lignes dans un fichier .procmailrc de l'utilisateur peuvent ressembler à l'extrait suivant:
MAILDIR=$HOME/Msgs INCLUDERC=$MAILDIR/lists.rc INCLUDERC=$MAILDIR/spam.rc |
Si l'utilisateur souhaite désactiver la filtration Procmail
de ses listes d'adresses, mais désire laisser le contrôle
des spams en place, il n'a qu'à commenter la première
ligne INCLUDERC avec le symbole dièse (
LOCKSLEEP — Définit la durée, en secondes, entre les tentatives de Procmail d'utiliser un fichier de verrouillage donné. La valeur par défaut est 8 secondes.
LOCKTIMEOUT — Définit la durée, en secondes, qui doit s'écouler après la dernière modification d'un fichier de verrouillage avant que Procmail ne considère le fichier de verrouillage comme étant vieux et pouvant par conséquent être supprimé. La valeur par défaut est 1024 secondes.
LOGFILE — L'emplacement et le fichier devant contenir tout message d'erreur ou d'information Procmail.
MAILDIR — Règle le répertoire de travail en cours pour Procmail. S'il est réglé, tous les autres chemins Procmail sont relatifs à ce répertoire.
ORGMAIL — Spécifie la boîte à lettres originale ou un autre endroit où placer les messages s'ils ne peuvent être placés à l'emplacement par défaut ou requis par la recette.
Par défaut, une valeur de /var/spool/mail/$LOGNAME est utilisée.
SUSPEND — Définit la durée, en secondes, de pause de Procmail si une ressource nécessaire, telle que l'espace swap, n'est pas disponible.
SWITCHRC — Permet à un utilisateur de spécifier un fichier externe contenant des recettes Procmail supplémentaires; plus ou moins comme l'option INCLUDERC, sauf que la vérification des recettes est arrêtée sur le fichier de configuration traitant et seules les recettes sur le fichier spécifié avec SWITCHRC sont utilisées.
VERBOSE — Fait en sorte que Procmail journalise beaucoup plus d'informations. Cette option est pratique pour le débogage.
D'autres variables d'environnement importantes sont obtenues depuis le shell, comme LOGNAME, qui est le nom de connexion; HOME, qui est l'emplacement du répertoire personnel; et SHELL, qui est le shell par défaut.
Consultez la page de manuel relative à procmailrc pour obtenir des explications exhaustives sur les variables d'environnement, de même que leurs valeurs par défaut.
Les nouveaux utilisateurs trouvent généralement que les recettes constituent l'élément le plus difficile de l'apprentissage d'utilisation de Procmail. Ce sentiment est compréhensible, jusqu'à un certain point, étant donné que les recettes procèdent à la comparaison avec les messages à l'aide d'expressions régulières, qui est un format particulier utilisé pour spécifier des qualifications de concordance de chaînes. Ceci étant, les expressions régulières ne sont pas très compliquées à créer et le sont encore moins à comprendre et à lire. De plus, la cohérence avec laquelle les recettes Procmail sont écrites, sans tenir compte des expressions régulières, permet de comprendre facilement ce qui se passe.
L'explication exhaustive des expressions régulières va au-delà de la portée de ce chapitre. La structure des recettes Procmail est plus importante et des exemples pratiques de recettes Procmail figurent à différents endroits sur Internet (notamment http://www.iki.fi/era/procmail/links.html). Le bon usage et l'adaptation des expressions régulières qui se trouvent dans ces exemples de recettes dépendent de la compréhension de la structure des recettes Procmail. Des informations d'introduction spécifiques aux règles d'expressions régulières de base se trouvent dans la page de manuel relative à grep man page.
Une recette Procmail a la forme suivante:
:0<indicateurs>: <nom-fichier-verrouillage> * <caractère-condition-spéciale> <condition-1> * <caractère-condition-spéciale> <condition-2> * <caractère-condition-spéciale> <condition-N> <caractère-action-spéciale><action-à-exécuter> |
Les deux premiers caractères d'une recette Procmail sont le symbole des deux-points et un zéro. Divers indicateurs (flags) peuvent être placés après le zéro pour contrôler ce que fait Procmail lors du traitement de cette recette. Un deux-points placé après la section <indicateurs> spécifie qu'un fichier de verrouillage sera créé pour ce message. Si un fichier de verrouillage doit être créé, spécifiez son nom dans l'espace <nom-fichier-verrouillage>.
Une recette peut contenir plusieurs conditions servant à vérifier la concordance d'un message. S'il n'y a aucune condition, tous les messages auront une concordance positive avec la recette. Les expressions régulières sont placées dans certaines conditions de façon à faciliter la concordance avec les messages. Si l'on utilise des conditions multiples, elles doivent toutes obtenir la concordance pour qu'une action soit exécutée. Les conditions sont vérifiées sur la base des indicateurs spécifiés à la première ligne de la recette. Des caractères spéciaux facultatifs placés après le caractère * permettent de contrôler ultérieurement la condition.
<action-à-exécuter> spécifie ce qui arrive aux messages qui correspondent à l'une des conditions. Il ne peut y avoir qu'une action par recette. Dans de nombreux cas, le nom d'une boîte à lettres est utilisé à cet endroit pour envoyer les messages dans ce fichier, ce qui permet en fait de trier le courrier. Des caractères d'action spéciale peuvent également être utilisés avant que l'action ne soit spécifiée.
L'action utilisée si la recette correspond à un message donné détermine si la recette est considérée comme étant de distribution ou de non-distribution. Une recette de distribution contient une action qui écrit le message dans un fichier, envoie le message à un autre programme ou réachemine le message vers une autre adresse électronique. Une recette de non-distribution couvre toutes les autres actions, telles que l'utilisation d'un bloc d'imbrication. Un bloc d'imbrication est une action contenue entre accolades ({ }) et désignant des actions supplémentaires devant être exécutées sur les messages qui correspondent aux conditions de la recette. Les blocs d'imbrication peuvent être emboîtés, offrant ainsi plus de contrôle pour l'identification et l'exécution d'actions sur les messages.
Les recettes de distribution qui correspondent à des messages font en sorte que Procmail exécute l'action spécifiée et cesse de comparer les messages en question aux autres recettes. Les messages qui correspondent aux conditions de recettes de non-distribution continuent d'être comparés aux autres recettes dans les fichiers rc courant et suivants. En d'autres termes, les recettes de non-distribution font en sorte que les messages continuent vers les autres recettes après l'exécution d'une action sur eux.
Les indicateurs sont très importants pour déterminer la façon dont les conditions d'une recette sont comparées à un message et pour décider si elles doivent l'être ou non. Les indicateurs suivants sont couramment utilisés:
A — Spécifie que cette recette ne sera utilisée que si la recette précédente sans indicateur A ou a a également obtenu la concordance avec ce message.
Pour vous assurer que l'action sur cette dernière recette précédente correspondante a bel et bien été complétée avant d'accorder la concordance à la recette actuelle, utilisez plutôt l'indicateur a.
B — Analyse le corps du message et recherche des conditions de concordance.
b — Utilise le corps de message pour toute action résultante, telle que l'écriture du message dans un fichier ou son réacheminement. Il s'agit du comportement par défaut.
c — Génère une copie conforme du message électronique. Ceci peut être pratique avec les recettes de distribution, étant donné que l'action requise peut être exécutée sur le message et que la copie du message peut continuer d'être traitée dans les fichiers rc files.
D — Rend la comparaison egrep sensible à la casse. Par défaut, le processus de comparaison n'est pas sensible à la casse.
E — Semblable à l'indicateur A sauf que les conditions dans cette recette ne sont comparées aux messages que si la recette immédiatement précédente sans indicateur E n'a pas obtenu la concordance. Cette action ressemble à une action else.
Utilisez l'indicateur e si cette recette est vérifiée uniquement lorsque la recette précédente a obtenu une concordance, mais que l'action a échoué.
f — Utilise le tube comme filtre.
H — Analyse l'en-tête du message et recherche des conditions de concordance. Cela se fait par défaut.
h — Utilise l'en-tête dans une action résultante. Cela est le comportement par défaut.
w — Indique à Procmail d'attendre que le filtre ou le programme spécifiés aient terminé leurs opérations et fait son rapport, que l'opération précédente soit réussie ou non, avant de considérer le message comme étant filtré.
Si vous voulez ignorer les messages "Program failure" lors de la décision du succès d'un filtre ou d'une action, utilisez l'option W à la place.
D'autres indicateurs sont expliqués dans la page de manuel procmailrc.
Les fichiers de verrouillage sont très utiles avec Procmail pour garantir que seul un processus qui essaie de modifier un certain message à un moment donné. Vous pouvez spécifier un fichier de verrouillage local en plaçant le symbole des deux points (:) après chaque indicateur sur la première ligne d'une recette. Ce faisant, un fichier de verrouillage local est créé en fonction du nom de fichier de destination et de toute valeur contenue dans la variable d'environnement globale LOCKEXT.
Vous pouvez aussi spécifier le nom du fichier de verrouillage local à utiliser avec cette recette après le symbole des deux points (:).
Des caractères particuliers utilisés devant les conditions et les actions des recettes Procmail modifient la façon dont elles sont interprétées.
Les caractères suivants peuvent être utilisés après le symbole *, au début d'une ligne de condition d'une recette:
! — Dans la ligne de condition, ce caractère inverse la condition, de sorte que la concordance ne sera désormais établie que si la condition ne correspond pas au message.
< — Vérifie si la taille du message est inférieure au nombre d'octets spécifié.
> — Vérifie si la taille du message est supérieure au nombre d'octets spécifié.
Les caractères suivants sont utilisés pour exécuter des actions spéciales:
! — Dans la ligne d'action, ce caractère indique à Procmail de réacheminer le message vers les adresses électroniques spécifiées.
$ — Renvoie à une variable réglée précédemment dans le fichier rc. Ceci est généralement utilisé pour définir une boîte à lettres commune à laquelle diverses recettes feront référence.
| — Le caractère de tube indique à Procmail de lancer un programme spécifique pour traiter ce message.
{ and } — Construit un bloc d'imbrication, utilisé pour contenir des recettes supplémentaires à appliquer aux messages comparés.
Si aucun caractère spécial n'est utilisé au début de la ligne d'action, Procmail considère alors que la ligne d'action spécifie une boîte à lettres où les messages devraient être écrits.
Procmail est un programme extrêmement flexible, vous permettant de comparer des messages sur la base de conditions très spécifiques et ensuite d'exécuter des actions détaillées sur ces derniers. Toutefois, pour les nouveaux utilisateurs, cette flexibilité peut rendre difficile la création d'une recette Procmail de toutes pièces visant à atteindre un objectif bien précis.
La meilleure façon de développer vos aptitudes en matière de création de recettes Procmail consiste à bien comprendre les expressions régulières et à examiner attentivement de nombreux exemples de recettes créées par d'autres utilisateurs. Les quelques exemples simples suivants ont pour but de vous montrer la structure des recettes Procmail et peuvent servir de base pour la construction de structures plus complexes.
Une recette élémentaire ne contient pas forcément de conditions, comme le montre l'exemple ci-dessous:
:0: new-mail.spool |
La première ligne commence la recette en spécifiant qu'un fichier de verrouillage local doit être créé, mais n'indique aucun nom, laissant Procmail utiliser le nom de fichier de la destination et LOCKEXT le nommer. Étant donné qu'aucune condition n'est spécifiée, tous les messages correspondent à cette recette et sont par conséquent placés dans le fichier spoule unique appelé new-mail.spool, situé dans le répertoire spécifié par la variable d'environnement MAILDIR. Un AGC peut ensuite visualiser les messages dans ce fichier.
Cette recette de base pourrait être placée à la fin de tous les fichiers rc afin d'acheminer les messages vers un emplacement par défaut. Un exemple plus complexe pourrait prendre des messages provenant d'une adresse électronique donnée et les supprimer, comme le montre ce exemple.
:0 * ^From: spammer@domain.com /dev/null |
Dans le cas de cet exemple, tout message envoyé par spammer@domain.com est automatiquement déplacé vers /dev/null, qui le supprime.
![]() | Attention |
---|---|
Soyez très prudent lorsque vous effectuez ce genre d'opération et assurez-vous que la règle fonctionne correctement avant de déplacer les messages qui y correspondent vers /dev/null, car ils y seront supprimés de façon permanente. Si les conditions de votre recette attrapent accidentellement des messages qui ne devraient pas l'être, ils disparaissent sans laisser de trace. Dans de telles conditions, il est difficile de résoudre des problèmes au niveau de la règle. Une solution plus appropriée serait de pointer l'action de la recette vers une boîte aux lettres spéciale que vous pouvez vérifier de temps en temps, afin de voir s'il s'y trouve de fausses concordances ou des messages qui correspondent par accident aux conditions. Après un examen méticuleux donnant l'assurance qu'aucun message ne fait l'objet d'une concordance accidentelle, supprimer la boîte à lettres et diriger l'action de façon à envoyer les messages vers /dev/null. |
Procmail est avant tout un filtre de courrier électronique, qui place automatiquement le courrier au bon endroit pour vous éviter de le trier manuellement. La recette ci-dessous prend les messages envoyés par une liste d'adresses donnée et les met dans le dossier approprié.
:0: * ^(From|CC|To).*tux-lug tuxlug |
Tout message envoyé depuis la liste d'adresses tux-lug@domain.com sera automatiquement placé dans la boîte à lettres tuxlug pour le AGC. Notez que la condition dans cet exemple permettra d'obtenir une concordance avec des messages si des adresses électroniques de la liste d'adresses se trouvent sur l'une des lignes suivantes: From, CC ou To.
Pour obtenir des informations sur des recettes plus détaillées et puissantes, consultez l'une des nombreuses ressources en ligne sur Procmail disponibles dans Section 11.6 Ressources supplémentaires.
Puisque Procmail est appelé par Sendmail, Postfix et Fetchmail lors de la réception de nouveaux messages, il peut être utilisé comme un outil puissant pour combattre le pourriel.
Le combat contre le pourriel est encore plus efficace lorsque Procmail est utilisé de concert avec SpamAssassin. En effet, grâce à une double action ces deux applications peuvent rapidement identifier des messages-pourriel, de les trier et de les détruire.
SpamAssassin recours à une analyse de l'en-tête et du texte, à des listes noires et à des bases de données de localisation de spam pour identifier et étiqueter tout pourriel.
Pour un utilisateur local, la meilleure façon d'utiliser SpamAssassin consiste à insérer la ligne suivante vers le haut du fichier ~/.procmailrc:
INCLUDERC=/etc/mail/spamassassin/spamassassin-default.rc |
Le programme /etc/mail/spamassassin/spamassassin-default.rc contient une simple règle Procmail permettant d'activer SpamAssassin pour tout courrier électronique reçu. Si un message est reconnu comme étant un pourriel, il est étiqueté en tant que tel dans l'en-tête et le titre se voit inclure la mention suivante:
*****SPAM***** |
Le corps du message de l'email est précédé d'un compte rendu des éléments ayant justifié le diagnostic de spam.
Pour classer les emails étiquetés en tant que pourriel, il est possible d'utiliser une règle semblable à celle reproduite ci-dessous:
:0 Hw * ^X-Spam-Status: Yes spam |
Selon cette règle, tous les messages étiquetés en tant que spam dans l'en-tête sont rangés dans une boîte à lettres nommée spam.
Étant donne que SpamAssassin est un script Perl, il faudra peut-être nécessaire, d'utiliser le démon binaire SpamAssassin (spamd) et l'application client (spamc) sur les serveur très sollicités. Pour configurer SpamAssassin de la sorte, l'accès super-utilisateur à l'hôte est nécessaire.
Pour lancer le démon spamd, tapez la commande suivante en étant connecté en tant que super-utilisateur (ou root):
/sbin/service spamassassin start |
Pour que le démon SpamAssassin puisse être lancé lors du démarrage du système, utilisez un utilitaire 'initscript', comme l'Outil de configuration des services (redhat-config-services), pour activer le service spamassassin. Reportez-vous à Section 1.4.2 Utilitaires de niveaux d'exécution pour de plus amples informations sur les utilitaires initscript.
Pour configurer Procmail afin qu'il utilise l'application client SpamAssassin au lieu du script Perl, placez le ligne suivante vers le haut du fichier ~/.procmailrc ou, pour une configuration du système en général, placez-la dans /etc/procmailrc:
INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc |