Table des matières
Le but de de court document est d'introduire le lecteur à l'utilisation possible de l'outil Procmail pour filtrer ses messages électroniques et éventuellement se prémunir des messages indésirables (aka, le SPAM).
Procmail est à la base un outil de traitement du courrier électronique. Il peut être utilisé par le MTA[1] pour déposer les messages dans la boîte aux lettres des utilisateurs, ou par ces derniers pour filtrer les messages suivant divers paramètres.
Dans le premier cas, le serveur de mail (Sendmail ou Postfix, par exemple) est configuré spécifiquement pour utiliser Procmail pour déposer les messages. Par exemple, pour Sendmail on peut retrouver un élément de configuration tel que le suivant dans le fichier de configuration sendmail.mc:
FEATURE(`local_procmail')dnl
Ou alors, pour Postfix, on peut ajouter dans le fichier de configuration main.cf une ligne:
mailbox_command = /usr/bin/procmail -a $EXTENSION
Si Procmail n'a pas été mis en place de cette manière par l'administrateur de la machine, il est toujours possible d'y faire appel pour gérer le courrier en mettant dans son fichier .forward une ligne tel que:
|/usr/bin/procmail
Une fois cette préparation terminée, il ne reste plus qu'à faire appel aux fonctionnalités réelles de Procmail, car par défaut celui-ci se contente juste de déposer les messages dans la boîte au lettre de base, mais peut faire du filtrage assez poussé.
Sans fichier de configuration, bien sûr, Procmail n'apporte pas grand chose. Il nous faut donc le créer. En temps normal il se nomme .procmailrc et doit être situé dans le répertoire d'accueil.
On peut distinguer 3 choses dans un fichier procmail:
Les commentaires. Ceux-ci sont introduits par le caractère # en début de ligne.
# Ceci est un commentaire
Les affectations de variables. Si on veut affecter à un nom plus générique certaines valeurs plus ou moins complexes. On écrira donc le nom de la variable, un signe égal et la valeur
nom=valeurLes règles de filtrage proprement dit. Nous verrons cela en détail un peu plus loin.
Avant toute chose, dans le fichier principal de configuration de procmail, nous allons définir les variables nécessaires aux traitements suivants; par exemple:
MAILDIR=$HOME/.gnus.in DEFAULT=$MAILDIR/spam LOGFILE=$HOME/.procmail/data/from LOCKFILE=$HOME/.lockmail COMSAT=no VERBOSE=no INCLUDEDIR=$HOME/.procmail
La première variable, MAILDIR définit le répertoire sur lequel on se basera pour ensuite répartir les mails filtrés. Attention à ne pas confondre ce nom avec un quelconque format de stockage de mail répandu. Ici, la valeur choisie correspond au répertoire d'entrée utilisé par Gnus (logiciel de messagerie de Emacs)
La variable DEFAULT définit le dossier utilisé par défaut pour déposer le mail. À noter qu'on part sur le principe qu'on a filtré tous les mails qui nous intéressent et que ce qui reste peut être considéré comme du spam.
Les autres variables sont optionnelles et servent au bon fonctionnemen de procmail.
Procmail permet de faire appel à d'autres fichiers en cours de route. Pour plus de clarté, nous allons donc grouper les règles de filtrage en fonction du but recherché. Le fichier principal .procmailrc servira donc essentiellement à définir notre environnement, certaines préférences et à inclure les uns après les autres nos suites de règles.
INCLUDEDIR=$HOME/.procmail
On définit tout d'abord le répertoire de base de nos inclusions. Ensuite, pour inclure chaque fichier à proprement parler on va affecter à une variable particulière le nom du fichier à inclure.
INCLUDERC=$INCLUDEDIR/listes INCLUDERC=$INCLUDEDIR/blacklist INCLUDERC=$INCLUDEDIR/whitelist INCLUDERC=$INCLUDEDIR/mail
Ici, donc, nous séparons notre configuration entre la gestion des mailing-lists, les listes blanches et noires de personnes et adresses et les messages qui nous sont explicitement destinés.
Le fichier s'occupant des listes de distribution est une suite de filtres permettant de répartir chacune des listes dans une dossier adapté.
Nous allons juste montrer quelques exemples de filtres à adapter en fonction des listes auxquelles vous êtes abonné et des logiciels que celles-ci utilisent (pour les entêtes générés).
:0 * ^List-Id: <mlfo@listes.linux-france.org> mlfo :0: * ^Sender: gcc-announce-owner@gcc.gnu.org annonces
On reprend le même principe des règles pour simplement mettre dans un dossier poubelle les messages qu'on ne souhaite vraiment pas recevoir (liste noire) et dans le dossier de mail normal (ou un spécifique) pour les gens dont on souhaite voir les messages en particulier (nottement si leurs messages devaient recevoir une mauvaise note par un filtre suivant)
:0 * ^Subject:.*Sujet abscons /dev/null :0 * ^From: <jerry.*@domaine.com> /dev/null
Voici pour les listes noires. Pour les listes blanches on utilisera donc la même manière de faire mais en changeant le dossier de destination.
La manière dont nous allons filtrer notre mail implique que nous soyons toujours mis en copie directe d'un message (les envois en Bcc passeront donc à travers), donc nous avons une liste de nos adresses. Nous souhaitons aussi filtrer les messages via le client SpamAssassin.
Voici donc ce que nous obtenons:
HOSTED_DOMAIN1=mondomaine1.com
HOSTED_DOMAIN2=mondomaine2.org
HOSTED_DOMAINS=((${HOSTED_DOMAIN1})|(${HOSTED_DOMAIN2}))
ALIASES=myusername
HOSTED_EMAILS=(${ALIASES}@${HOSTED_DOMAINS})Pour simplifier les règles, on utilise différentes variables pour désigner les différentes adresses qu'on peut utiliser.
:0
*$ ^TO_${HOSTED_EMAILS}
{On définit ensuite une règle qui portera sur les adresses qu'on a définies plus tôt. Au lieu de rentrer directement dans un dossier, on ouvre une nouvelle suite de règles qui ne seront utilisées que dans ce cas spécifique.
:0fw
| spamc
:0e
{
EXITCODE=$?
}
:0:
* ^Subject:.*\*\*\*\*SPAM\*\*\*\*
$DEFAULT
Ceci est un exemple d'utilisation de SpamAssassin qui va renvoyer un mail marqué dans le dossier par défaut (qu'on a définit précédemment comme étant la destination des spams.
:0
mail
}Enfin, on stocke les mails qui nous sont destinés et qui ne sont pas indésirables dans notre boîte aux lettres principale.