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.

Solution

% grep '^From ' mbox
From owner-tout-src@lip6.fr  Wed Oct 18 16:45:09 2006
From nusmv-users-owner@irst.itc.it  Wed Oct 18 16:48:34 2006
From skipperuzr@hotmail.com  Wed Oct 18 19:37:50 2006
From choreographyboreas@rotter.cz  Wed Oct 18 22:46:34 2006
From zmeorx@newcastletriton.asn.au  Wed Oct 18 23:56:42 2006
From oky@graveleyfc.co.uk  Thu Oct 19 03:59:35 2006
From 14chic@imrworldwide.com  Thu Oct 19 05:03:15 2006
From tromey@redhat.com  Thu Oct 19 06:32:40 2006
From contestantdereference@rottw.ru  Thu Oct 19 07:53:34 2006
From owner-tout-lip6@lip6.fr  Thu Oct 19 10:10:25 2006
From owner-tout-lip6@lip6.fr  Thu Oct 19 10:13:48 2006
From ybwode@kichimail.com  Thu Oct 19 10:55:41 2006
From thesards-owner@poleia.lip6.fr  Thu Oct 19 11:37:46 2006
From bklein@us-concrete.com  Thu Oct 19 11:45:17 2006
From ksayue@grassrootsbaseball.com  Thu Oct 19 14:29:37 2006
From petrinet-bounces@informatik.uni-hamburg.de  Thu Oct 19 15:35:45 2006
% grep '^From ' mbox | wc -l
16

Question

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

Solution

formail -1 -s < mbox > mail1

ou bien

sed '1n;/^From /Q' < mbox > mail1

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.

Solution

:0
* ^To:.*@lip6.fr
mail.lip6

:0
mail.divers

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.

Solution

% spamassassin mail1 > mail2
% diff -u mail1 mail2
--- mail1       2006-10-19 17:41:29.726098000 +0200
+++ mail2       2006-10-19 17:52:14.766018000 +0200
@@ -29,6 +29,10 @@
 X-Loop: adl@src.lip6.fr
 Content-Length: 271
 Lines: 14
+X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on poseidon.lip6.fr
+X-Spam-Level:
+X-Spam-Status: No, score=0.2 required=5.0 tests=NO_REAL_NAME autolearn=no
+       version=3.0.4

Bonjour,

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.

Solution

:0:
* ^X-Spam-Level: \*\*\*\*\*
mail.spam

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.

Solution

sa-learn --ham mail.lip6 mail.divers
sa-learn --spam mail.spam

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.

Solution

% mail adl@src.lip6.fr -s test </dev/null

Le message reçu ressemble à

From duret@infop6.jussieu.fr  Tue Oct 31 17:20:47 2006
Return-Path: duret@infop6.jussieu.fr
Received: from osiris.lip6.fr (osiris.lip6.fr [132.227.60.30])
          by src.lip6.fr (8.12.9-20030917/jtpda-5.4+victor) with ESMTP id k9VGKlOR012904
          for <adl@src.lip6.fr>; Tue, 31 Oct 2006 17:20:47 +0100
Received: from maya.infop6.jussieu.fr (maya.infop6.jussieu.fr [134.157.116.124])
          by osiris.lip6.fr (8.13.5.20060614/lip6) with ESMTP id k9VGKlil015945
          for <adl@src.lip6.fr>; Tue, 31 Oct 2006 17:20:47 +0100 (CET)
Received: from ari-31-208-03.infop6.jussieu.fr (ari-31-208-03.infop6.jussieu.fr [132.227.112.99])
          by maya.infop6.jussieu.fr (8.13.4/jtpda-5.3.2+victor) with ESMTP id k9VGKlU7024251
          for <adl@src.lip6.fr>; Tue, 31 Oct 2006 17:20:47 +0100
X-pt: maya.infop6.jussieu.fr
Received: (from duret@localhost)
        by ari-31-208-03.infop6.jussieu.fr (8.13.7/8.12.11/Submit) id k9VGKlVF010556
        for adl@src.lip6.fr; Tue, 31 Oct 2006 17:20:47 +0100
Date: Tue, 31 Oct 2006 17:20:47 +0100
From: Alexandre Duret-Luiz <duret@infop6.jussieu.fr>
Message-Id: <200610311620.k9VGKlVF010556@ari-31-208-03.infop6.jussieu.fr>
To: adl@src.lip6.fr
Subject: test
X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-2.1.2 (osiris.lip6.fr [132.227.60.30]); Tue, 31 Oct 2006 17:20:47 +0100 (CET)
X-Scanned-By: MIMEDefang 2.56 on 132.227.60.30
X-Loop: adl@src.lip6.fr

On y voit que notre mail a été d'abord reçu par le serveur SMTP de la machine où la commande mail a été lancée (ari-31-208-03.infop6.jussieu.fr), avant d'être transmis à maya.infop6.jussieu.fr, puis à osiris.lip6.fr, etc.

Le serveur que l'on cherche est donc maya.infop6.jussieu.fr.

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

Solution

% telnet maya smtp
Trying 134.157.116.124...
Connected to maya.infop6.jussieu.fr (134.157.116.124).
Escape character is '^]'.
220 maya.infop6.jussieu.fr ESMTP Sendmail 8.13.4/jtpda-5.3.2+victor ready at Tue, 31 Oct 2006 17:27:58 +0100
HELO ari-31-208-03.infop6.jussieu.fr
250 maya.infop6.jussieu.fr Hello ari-31-208-03.infop6.jussieu.fr [132.227.112.99], pleased to meet you
MAIL FROM: <adl@src.lip6.fr>
250 2.1.0 <adl@src.lip6.fr>... Sender ok
RCPT TO: <adl@src.lip6.fr>
250 2.1.5 <adl@src.lip6.fr>... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Subject: Test

Coucou
.
250 2.0.0 k9VGRwKD024459 Message accepted for delivery
QUIT
221 2.0.0 maya.infop6.jussieu.fr closing connection
Connection closed by foreign host.