Master SAR 2006-2007, Université Pierre & Marie Curie. Alexandre Duret-Lutz. [retour à l'index des TD]

Administration et Architecture des Systèmes, TD 6

Procmail, SMTP

1   Le format mbox

Téléchargez le fichier mbox  qui nous servira d'exemple pour la première partie de ce TD. mbox est le format tradionel de stockage de courrier electronique sous Unix (man mbox pour tous les details). Sur un serveur de mail, chaque utilisateur possède alors un fichier dont le nom ressemble à /var/spool/mail/LOGIN et qui accumule tous les mails reçus par cet utilisateur.

Comme presque tous les formats sous Unix, ce fichier ne contient que du texte et peux être consulté ou édité avec votre logiciel préféré. Le début de chaque mail y est repéré par le mot From suivi d'un espace, de l'adresse du dernier émetteur (pas forcément l'expéditeur original si le mail arrive par des chemins détournés, par exemple via une liste de diffusion), suivi enfin de la date de réception. Cette première ligne est appelée ligne de cachet.

Note

Vous pouvez lire n'importe quel fichier au format mbox facilement avec la commande mutt -f mbox.

Question

Exécutez une commande pour afficher toutes les lignes de cachet du fichier mbox.

Trouvez une commande pour afficher le nombre de mails contentus dans ce fichier.

Question

En utilisant la commande formail, ou bien sed, créez un fichier mail1 contenant le premier mail de mbox.

2   Procmail

Procmail (mail processor) est un outil qui lit un mail sur son entrée standard, et y réagit en fonction de règles indiquées dans le fichier ~/.procmailrc. Sa documentation est découpée en trois pages de man : procmail(1) pour la commande elle-même, procmailrc(5) pour le format de ~/.procmailrc, et enfin procmailex(5) montre des exemples de règles.

Voici un exemple de fichier ~/.procmailrc.

:0
* ^Subject: \[VIRUS FOUND AND REMOVED\]
/dev/null

:0 c
* ^To: adl\+spotcvs
* ^Subject: spot .*ChangeLog
spot-cvs

:0
allmail

Avec cette configuration, Procmail jette tous les mails dont la ligne sujet est exactement Subject: [VIRUS FOUND AND REMOVED]. et stocke tous les autres dans le fichier allmail.

Une copie (c'est le petit c qui l'indique) des mails dont le sujet commence par spot et se termine par ChangeLog, et dont le destinataire est``adl+spotcvs``, sont déposés dans le fichier spot-cvs.

Question

Écrivez un ~/.procmailrc pour que les mails destinés à une adresse se terminant par @lip6.fr soit stockés dans le fichier mail.lip6, et pour que tous les autres mails soient envoyés dans mail.divers.

Testez votre configuration sur un seul mail avec

procmail -m ~/.procmailrc < mail1

puis testez-le sur tous les mails contenus dans mbox avec

formail -s procmail -m ~/.procmailrc < mbox

Vous devriez avoir 9 mails dans mail.lip6 et 7 dans mail.divers si ces fichiers étaient vides avant cette dernière commande.

3   Spamassassin

La commande spamassassin lit un mail sur son entrée standard, et l'affiche sur sa sortie standard avec quelques champs supplémentaires dans les entêtes. Ces champs indiquent la probabilité que le mail en question soit un spam.

Question

Utilisez diff pour observer les différences entre l'entrée et la sortie de spamassassin sur un mail d'exemple.

La seule entête qui nous intéresse ici est:

X-Spam-Level: ****

elle peut être suivie d'un certain nombre d'étoiles. Plus il y a d'étoiles plus la probabilité que le mail soit un spam est forte. On considérera pour notre part qu'à partir de 5 étoiles, il s'agit d'un spam.

Question

Ajoutez les lignes suivantes au début de votre .procmailrc

:0fw: spamassassin.lock
* < 256000
| spamassassin

afin que tous les mails soient étiquetés par spamassassin.

Ajoutez ensuite une autre règle pour envoyer dans le fichier mail.spam tous les mails étiquetés par 5 étoiles ou plus. Testez vos règles sur mbox.

Question

Vérifiez que les fichiers mail.lip6 et mail.divers ne contiennent aucun Spam, tandis que mail.spam ne contient que du Spam, puis utilisez sa-learn pour entraîner les filtres bayesiens de SpamAssassin sur ces deux types de mails.

4   SMTP

Question

Avec la commande shell mail, envoyez vous un mail sur une adresse extérieure. En explorant les en-têtes du mail reçu, déduisez-en un serveur SMTP (différent de votre machine) accessible depuis les machines de l'ARI.

Question

Utilisez telnet pour vous connecter au serveur SMTP que vous venez de trouver. Puis envoyez-vous un mail en utilisant le protocole SMTP (cf. RFC821).