Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

13.4. Agents de remise de courrier (« Mail Delivery Agents »)

Red Hat Enterprise Linux inclut deux MDA principaux, Procmail et mail. Ces deux applications sont considérées comme des LDA et déplacent le courrier depuis le fichier spool du MTA dans la boîte aux lettre de l'utilisateur. Cependant, Procmail offre un système de filtrage robuste.
Cette section détaille uniquement Procmail. Pour obtenir des informations sur la commande mail, veuillez consulter sa page man (man mail).
Procmail remet et filtre le courrier car il se trouve dans le fichier spool du courrier de l'hôte local. Il est puissant, léger pour les ressources système, et est largement utilisé. Procmail peut jouer un rôle critique dans la remise du courrier pour lecture par les applications client de courrier.
Procmail peut être invoqué de différentes manières. Lorsqu'un MTA place un courrier dans le fichier spool du courrier, Procmail est lancé. Puis, Procmail filtre et archive le courrier pour le MUA et quitte. Sinon, le MUA peut être configuré pour exécuter Procmail à chaque fois qu'un message est reçu de façon à ce que les messages soient déplacés dans la boîte aux lettres qui convient. Par défaut, la présence d'un fichier /etc/procmailrc ou ~/.procmailrc (également appelé un fichier rc) dans le répertoire personnel de l'utilisateur invoque Procmail chaque fois qu'un MTA reçoit un nouveau message.
Par défaut, aucun fichier rc global n'existe dans le répertoire /etc et aucun fichier .procmailrc n'existe dans les répertoires de base d'aucun utilisateur. Ainsi, pour utiliser Procmail, chaque utilisateur doit construire un fichier .procmailrc avec des variables et des règles d'environnement spécifiques.
La réaction de Procmail à la réception d'un courrier électronique dépend de si le message correspond à un ensemble spécifié de conditions ou de recettes (« recipes ») dans le fichier rc. Si un message correspond à une recette, alors le courrier est placé dans un fichier spécifié, supprimé, ou traité autrement.
Lorsque Procmail démarre, il lit le courrier et sépare le corps des informations de l'en-tête. Puis, Procmail recherche des variables et recettes d'environnement Procmail globales par défaut dans le fichier /etc/procmailrc et les fichiers rc du répertoire /etc/procmailrcs/. Procmail recherche ensuite un fichier .procmailrc dans le répertoire personnel de l'utilisateur. De nombreux utilisateurs créent également des fichiers rc supplémentaires pour Procmail auxquels il est fait référence dans le fichier .procmailrc de leur répertoire personnel.

13.4.1. Configuration Procmail

Le fichier de configuration Procmail contient des variables d'environnement importantes. Ces variables spécifient certaines choses, comme les messages à trier ou que faire avec les messages qui ne correspondent à aucune recette.
Ces variables d'environnement apparaissent habituellement au début du fichier ~/.procmailrc sous le format suivant :
env-variable="value"
Dans cet exemple, env-variable est le nom de la variable et value définit la variable.
De nombreuses variables d'environnement n'étaient pas utilisées par la plupart des utilisateurs Procmail et nombre des variables d'environnement plus importantes sont déjà définies par une valeur par défaut. La plupart du temps, les variables suivantes sont utilisées :
  • DEFAULT — définit la boîte aux lettres par défaut où sont placés les messages ne correspondant à aucune recette.
    La valeur par défaut DEFAULT est la même que la valeur $ORGMAIL.
  • INCLUDERC — spécifie des fichiers rc supplémentaires contenant davantage de recettes avec lesquelles vérifier les messages. Ceci divise les listes des recettes Procmail en fichiers individuels qui remplissent différents rôles, comme bloquer le courrier indésirable et gérer les listes de courrier électronique, qui peuvent également être activés ou désactivés en utilisant les caractères de mise en commentaire dans le fichier de l'utilisateur ~/.procmailrc.
    Par exemple, les lignes du fichier ~/.procmailrc d'un utilisateur pourraient ressembler à celles-ci :
    MAILDIR=$HOME/Msgs
    INCLUDERC=$MAILDIR/lists.rc
    INCLUDERC=$MAILDIR/spam.rc
    Pour désactiver le filtrage Procmail des listes de courrier électronique tout en laissant le contrôle du courrier indésirable en place, veuillez mettre en commentaire la première ligne INCLUDERC avec le caractère dièse (#). Remarquez que des chemins relatifs au répertoire actuel sont utilisés.
  • LOCKSLEEP — définit la durée, en secondes, qui doit s'écouler entre chaque tentative d'utilisation d'un fichier lockfile particulier par Procmail. La valeur par défaut s'élève à 8 secondes.
  • LOCKTIMEOUT — définit la durée, en secondes, qui doit s'écouler après la modification d'un fichier lockfile avant que Procmail considère que ce fichier lockfileest trop ancien et doit être supprimé. La valeur par défaut s'élève à 1024 secondes.
  • LOGFILE — fichier sur lequel toutes les informations et tous les messages d'erreur Procmail sont écrits.
  • MAILDIR — définit le répertoire de travail actuel de Procmail. Si défini, tous les autres chemins Procmail seront relatifs à ce répertoire.
  • ORGMAIL — spécifie la boîte aux lettres d'origine, ou un autre endroit où placer les messages s'ils ne peuvent pas être mis dans l'emplacement par défaut ou l'emplacement 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, pendant laquelle Procmail fait une pause si une ressource importante, 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 similaires à l'option INCLUDERC, sauf que la vérification de recette s'arrête sur le fichier de configuration reférant et seules les recettes se trouvant sur le fichier spécifié par SWITCHRC sont utilisées.
  • VERBOSE — amène Procmail à journaliser davantage d'information. Cette option est utile pour le débogage.
D'autres variables d'environnement importantes sont récupérées du shell, comme LOGNAME, le nom de connexion ; HOME, l'emplacement du répertoire personnel ; et SHELL, le shell par défaut.
Une explication complète de toutes les variables d'environnement et de leurs valeurs par défaut est disponible sur la page man de procmailrc.

13.4.2. Recettes Procmail

Les nouveaux utilisateurs trouvent fréquemment que la construction de recettes est la partie la plus difficile lors de l'apprentissage de l'utilisation de Procmail. Cette difficulté est souvent attribuée aux recettes qui font correspondre des messages en utilisant des expressions régulières utilisées pour spécifier des critères de correspondance de chaîne. Cependant, les expressions régulières ne sont pas très difficiles à construire, et encore moins difficiles à comprendre lorsqu'elles sont lues. En outre, la cohérence d'écriture des recettes Procmail, peu importe les expressions régulières , facilite l'apprentissage à l'aide d'exemples. Pour afficher des exemples de recettes Procmail, veuillez consulter la Section 13.4.2.5, « Exemples de recettes ».
Les recettes Procmail sont sous la forme suivante :
:0 [flags] [: lockfile-name ]
* [ condition_1_special-condition-character condition_1_regular_expression ]
* [ condition_2_special-condition-character condition-2_regular_expression ]
* [ condition_N_special-condition-character condition-N_regular_expression ]
        special-action-character
        action-to-perform
Les deux premiers caractères d'une recette Procmail sont deux points suivis d'un zéro. Divers marqueurs peuvent être placés après le zéro pour contrôler la manière par laquelle Procmail traite la recette. Les deux points suivant la section flags indiquent qu'un fichier lockfile est créé pour ce message. Si un ficier lockfile est créé, le nom peut être spécifié en remplaçant lockfile-name.
Une recette peut contenir plusieurs conditions pour correspondre aux messages. S'il n'y a aucune condition, chaque message correspond à la recette. Les expressions régulières sont placées dans certaines conditions pour faciliter la correspondance de messages. Si de multiples conditions sont utilisées, elles doivent toutes correspondre pour que l'action soit appliquée. Les conditions sont vérifiées en se basant sur les marqueurs paramétrés dans la première ligne du destinataire. Des caractères spéciaux optionnels sont placés après l'astérisque (*).
L'argument action-to-perform spécifie l'action effectuée lorsque le message correspond à l'une des conditions. Il ne peut y avoir qu'une seule action par recette. Dans de nombreux cas, le nom d'une boîte aux lettres est utilisé pour diriger les messages correspondants vers ce fichier, triant ainsi le courrier électronique. Les caractères d'action spéciaux peuvent également être utilisés avant que l'action ne soit spécifiée. Veuillez consulter la Section 13.4.2.4, « Conditions et actions spéciales » pour obtenir davantage d'informations.

13.4.2.1. Recettes de remise vs. Recettes de non-remise

L'action utilisée si la recette correspond à un message particulier détermine s'il s'agit d'une recette de remise (« delivering recipe ») ou d'une recette de non-remise (« non-delivering »). Une recette de remise contient une action qui écrit le message sur un fichier, envoie le message à un autre programme, ou transfère le message sur une autre adresse électronique. Une recette de non-remise couvre toutes les autres actions, comme un bloc imbriqué (« nesting block »). Un bloc imbriqué est un ensemble d'actions, entre crochets { }, qui sont effectuées sur les messages correspondants aux conditions de la recette. Les blocs imbriqués peuvent être imbriqués à l'intérieur les uns des autres, offrant ainsi un meilleur contrôle pour identifier et effectuer des actions sur les messages.
Lorsque des messages correspondent à une recette de remise, Procmail effectue l'action spécifiée et arrête de comparer le message à d'autres recettes. Les messages qui correspondent aux recettes de non-remise continuent d'être comparées aux autres recettes.

13.4.2.2. Marqueurs

Les marqueurs sont essentiels pour déterminer si les conditions d'une recette sont comparées à un message et de quelle manière cela est fait. L'utilitaire egrep est utilisé de manière interne pour faire correspondre les conditions. Les marqueurs suivants sont couramment utilisés :
  • A — spécifie que cette recette est uniquement utilisée si la recette précédente sans marqueur A ou a correspondait également à ce message.
  • a — spécifie que cette recette est uniquement utilisée si la recette précédente avec un marqueur A ou a correspondait également à ce message et a été appliquée.
  • B — analyse le corps du message et recherche des conditions correpondantes.
  • b — utilise le corps dans toute action résultante, comme l'écriture du message sur un fichier ou son transfert. Il s'agit du comportement par défaut.
  • c — génère une copie carbone du courrier électronique. Ceci est utile avec les recettes de remise, car l'action requise peut être effectuée sur le message et une copie du message peut toujours être en cours de traitement dans les fichiers rc.
  • D — fait respecter la casse à la comparaison egrep. Par défaut, le processus de comparaison ne respecte pas la casse.
  • E — malgré des similarités avec le marqueur A, les conditions de la recette sont uniquement comparées au message si la recette la précédant immédiatement sans marqeur E ne correspondait pas. Ceci est comparable à une action else.
  • e — la recette est comparée au message uniquement si l'action spécifiée dans la recette la précédant immédiatement échoue.
  • f — utilise le tube (« pipe ») en tant que filtre.
  • H — analyse l'en-tête du message et recherche des conditions correspondantes. Ceci est le comportement par défaut.
  • h — utilise l'en-tête dans une action résultante. Ceci est le comportement par défaut.
  • w — ordonne à Procmail d'attendre que le filtre ou programme spécifié se termine, et rapporte si celui-ci a réussi ou non avant de considérer le message comme filtré.
  • W — est identique à w, sauf que les messages « Échec du programme » sont supprimés.
Pour une liste détaillée de marqueurs supplémentaires, veuillez consulter la page man de procmailrc.

13.4.2.3. Spécifier un fichier lockfile local

Les fichiers lockfiles sont très utiles avec Procmail pour vous assurer que plusieurs processus ne tentent pas d'altérer un message simultanément. Spécifiez un lockfile local en plaçant un caractère Deux-points (:) après tout marqueur se trouvant sur la première ligne d'une recette. Ceci crée un fichier lockfile local basé sur le nom du fichier destinataire plus ce qui a été défini dans la variable globale d'environnement LOCKEXT.
Alternativement, veuillez spécifier le nom du fichier lockfile local à utiliser avec cette recette après le caractère des deux-points.

13.4.2.4. Conditions et actions spéciales

Les caractères spéciaux utilisés avant les conditions et actions des recettes Procmail modifient la manière par laquelle celles-ci sont interprétées.
Les caractères suivants peuvent être utilisés après un astérisque (*) au début de la ligne de condition d'une recette :
  • ! — dans la ligne de condition, ce caractère inverse la condition. Ainsi, une correspondance ne se produira que si la condition ne correspond pas au message.
  • < — vérifie si le message fait moins qu'un nombre d'octets spécifié.
  • > — vérifie si le message fait plus qu'un nombre d'octets spécifié.
Les caractères suivants sont utilisés pour effectuer des actions spéciales :
  • ! — dans la ligne de l'action, ce caractère ordonne à Procmail de transférer le message vers les adresses électroniques spécifiées.
  • $ — fait référence à une variable précédemment définie dans le fichier rc. Souvent utilisé pour définir une boîte aux lettres commune à laquelle diverses recettes font référence.
  • | — lance un programme spécifié pour traiter le message.
  • { and } — permet de construire un bloc imbriqué, utilisé pour contenir des recettes supplémentaires pour appliquer des messages correspondants.
Si aucun caractère spécial n'est utilisé au début de la ligne de l'action, Procmail supposera que la ligne d'action spécifie la boîte aux lettre dans laquelle écrire le message.

13.4.2.5. Exemples de recettes

Procmail est un programme extrêmement flexible, mais cette flexibilité rend la composition de recettes Procmail difficile pour les nouveaux utilisateurs.
La meilleure manière de développer les compétences requises pour créer des conditions de recettes Procmail vient d'une bonne compréhension des expressions régulières combiné à un regard objectif sur les nombreux exemples produits par d'autres personnes. L'explication détaillée des expressions régulières est au-delà de l'étendue de cette section. La structure des recettes Procmail et des exemples de recettes Procmail utiles peuvent être trouvés sur internet. L'utilisation et l'adaptation correcte d'expressiosn régulière peuvent être dérivées de l'observation minutieuse de ces exemples de recettes. En outre, des informations d'introduction auxr règles des expressions régulières de base sont situées dans la page man de grep(1).
Les simples exemples suivants démontrent la structure de base des recettes Procmail et peuvent servir de fondation pour des constructions plus complexes.
Une recette de base peut même ne pas contenir de conditions, comme illustré dans l'exemple suivant :
:0:
new-mail.spool
La première ligne spécifie qu'un lockfile local doit être créé mais ne spécifie pas de nom, Procmail utilise donc le nom du fichier destinataire et ajoute la valeur spécifiée dans la variable d'environnement LOCKEXT. Aucune condition n'est spécifiée, donc chaque message correspond à cette recette et est placé dans l'unique fichier spool nommé new-mail.spool, qui est situé dans un répertoire spécifié par la variable d'environnement MAILDIR. Un MUA peut ensuite afficher les messages dans ce fichier.
Une recette de base, comme celle-ci, peut être placée à la fin de tous les fichiers rc pour diriger les messages vers un emplacement par défaut.
L'exemple suivant faisait correspondre des messages d'une adresse électronique spécifique puis les jettait.
:0
* ^From: spammer@domain.com
/dev/null
Dans cet exemple, tout message envoyé par spammer@domain.com est envoyé sur le périphérique /dev/null, qui les supprime.

Avertissement

Assurez-vous que les règles fonctionnent comme prévu avant d'envoyer des messages sur /dev/null pour une suppression permanente. Si une recette obtient des messages de manière non-intentionnelle et que ces messages disparaissent, il sera difficile de résoudre le problème de la règle.
Une meilleure solution consisterait à pointer l'action de la recette vers une boîte aux lettres spéciale, qui pourra être vérifiée de temps en temps pour chercher des faux positifs. Une fois que vous serez satisfait qu'aucun message ne sera accidentellement mis en correspondance, veuillez supprimer la boîte aux lettres et dirigez l'action pour que les messages soit envoyés dans /dev/null.
La recette suivante récupère le courrier électronique envoyé à partir d'une liste de diffusion particulière et le place dans un dossier spécifié.
:0:
* ^(From|Cc|To).*tux-lug
tuxlug
Tout message envoyé à partir de la liste de diffusion tux-lug@domain.com est automatiquement placé dans la boîte aux lettres tuxlug pour le MUA. Veuillez remarquer que la condition dans cet exemple correspond au message si l'adresse de la liste de diffusion se trouve sur la ligne De (« From »), Cc, ou À (« To »).
Veuillez consulter les nombreuses ressources Procmail en ligne, disponibles dans la Section 13.6, « Ressources supplémentaires » pour obtenir des recettes plus détaillées et plus puissantes.

13.4.2.6. Filtres du courrier indésirable

Comme il est appelé par Sendmail, Postfix, et Fetchmail lors de la réception de nouveaux courriers électroniques, Procmail peut être utilisé comme outil puissant pour combattre le courrier indésirable.
Ceci est particulièrement vrai lorsque Procmail est utilisé en conjonction avec SpamAssassin. Lorsqu'utilisées ensemble, ces deux applications peuvent rapidement identifier le courrier indésirable et le trier ou le détruire.
SpamAssassin utilise des analyses d'en-tête, des analyses de texte, des listes noires, une base de données de suivi de courrier indésirable, et une analyse de courrier indésirable bayésienne pour identifier et baliser le courrier indésirable rapidement et précisément.

Note

Pour utiliser SpamAssassin, veuillez commencer par vous assurer que le paquet spamassassin est installé sur votre système en exécutant la commande suivante en tant qu'utilisateur root :
~]# yum install spamassassin
Pour obtenir davantage d'informations sur l'installation de paquets avec Yum, veuillez consulter la Section 8.2.4, « Installation de paquets ».
Pour un utilisateur local, la manière la plus simple d'utiliser SpamAssassin consiste à placer la ligne suivante vers le haut du fichier ~/.procmailrc :
INCLUDERC=/etc/mail/spamassassin/spamassassin-default.rc
Le fichier /etc/mail/spamassassin/spamassassin-default.rc contient une règle Procmail simple qui active SpamAssassin pour le courrier entrant. Si un courrier électronique est déterminé comme étant un courrier indésirable, son en-tête est balisé comme tel et le modèle suivant est ajouté au début de son titre :
*****SPAM*****
Le contenu du message commence par un décompte des éléments qui le qualifient comme étant un courier indésirable.
Pour archiver le courrier marqué comme indésirable, une règle similaire à la suivante peut être utilisée :
:0 Hw * ^X-Spam-Status: Yes spam
Cette règle dépose tous les messages dont l'en-tête est balisé comme courrier indésirable dans une boîte aux lettre nommée spam.
Comme SpamAssassin est un script Perl, il pourrait être nécessaire d'utiliser le démon binaire SpamAssassin (spamd) et l'application cliente (spamc) sur des serveurs occupés. Cependant, la configuration de SpamAssassin de cette manière, requiert un accès root à l'hôte.
Pour lancer le démon spamd, veuillez saisir la commande suivante :
~]# systemctl start spamassassin
Pour lancer le démon SpamAssassin lorsque le système est démarré, veuillez exécuter :
systemctl enable spamassassin.service
Veuillez consulter le Chapitre 9, Gérer les services avec systemd pour obtenir davantage d'informations sur le lancement et l'arrêt des services.
Pour configurer Procmail de manière à utiliser l'application cliente SpamAssassin au lieu du script Perl, veuillez placer la ligne suivante vers le haut du fichier ~/.procmailrc. Pour une configuration globale, veuillez la placer dans /etc/procmailrc :
INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc