• Aucun résultat trouvé

Courrier électronique

11.4. Agent de distribution de courrier (ADC)

11.4.2. Recettes Procmail

Les nouveaux utilisateurs trouvent généralement que les recettes constituent l’élément le plus diffi-cile 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 àgrepman 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 condi-tions. 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.

11.4.2.1. Recettes de distribution et de non-distribution

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. Unerecette de distributioncontient 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. Unerecette de non-distributioncouvre toutes les autres actions, telles que l’utilisation d’un bloc d’imbrication. Unbloc d’imbricationest 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 fichiersrccourants 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.

11.4.2.2. Indicateurs

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 indicateurAouaa é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’indicateura.

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 fichiersrcfiles.

D— Rend la comparaisonegrepsensible à la casse. Par défaut, le processus de comparaison n’est pas sensible à la casse.

E— Semblable à l’indicateurAsauf que les conditions dans cette recette ne sont comparées aux messages que si la recette immédiatement précédente sans indicateurEn’a pas obtenu la concor-dance. Cette action ressemble à une actionelse.

Utilisez l’indicateuresi 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’optionWà la place.

D’autres indicateurs sont expliqués dans la page de manuelprocmailrc.

11.4.2.3. Spécification d’un fichier de verrouillage local

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 ver-rouillage 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 globaleLOCKEXT. Vous pouvez aussi spécifier le nom du fichier de verrouillage local à utiliser avec cette recette après le symbole des deux points (:).

11.4.2.4. Conditions et actions spéciales

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 fichierrc. 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.

11.4.2.5. Exemples de recettes

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 etLOCKEXT 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’environnementMAILDIR. Un AGC peut ensuite visualiser les messages dans ce fichier.

Cette recette de base pourrait être placée à la fin de tous les fichiersrcafin 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é parspammer@domain.comest 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 fonc-tionne 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 accidentelle-ment 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 defausses concordancesou 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’adressestux-lug@domain.comsera automatiquement placé dans la boîte à lettrestuxlugpour 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,CCouTo.

Pour obtenir des informations sur des recettes plus détaillées et puissantes, consultez l’une des nom-breuses ressources en ligne sur Procmail disponibles dans la Section 11.6.

11.4.2.6. Filtres de spam

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.rccontient 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éespam.

É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émonspamd, 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 utili-taire ’initscript’, comme l’Outil de configuration des services(redhat-config-services), pour activer le servicespamassassin. Reportez-vous à la Section 1.4.2 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~/.procmailrcou, pour une configuration du système en général, placez-la dans/etc/procmailrc:

INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc