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