View previous topic :: View next topic |
Author |
Message |
22decembre Guru
Joined: 08 May 2010 Posts: 308 Location: Paris, banlieue sud (Massy et alentours)
|
Posted: Sat Jul 17, 2010 8:06 pm Post subject: [SCRIPT] script de filtrage |
|
|
bonjour
Je voudrais créer un script pour entrainer mon filtre à spam.
J'aimerais lire un par un les mails dans le dossier ~/.mail/.inbox.spam/ et si le mot "spam" est absent (c'est qu'il est faux négatif) du mail, je passe le fichier dans bogofilter avec l'option "-u -Ns".
Pareil, si, dans les dossier .inbox.facebook/ .inbox.gentoo/ ... si le mot "spam" est présent (c'est qu'il est faux négatif), alors il faut passer le fichier dans bogofilter avec "-u -Sn".
Comment puis-je faire cela ? (Moi et le bash...) _________________ Portable Gentoo installé depuis ~fevrier 2010, kde4 ( doc : http://www.22decembre.eu/gentoo-portable/)
Serveur Maison Gentoo depuis ~avril 2010 (doc : http://www.22decembre.eu/gentoo-serveur/)
http://www.22decembre.eu |
|
Back to top |
|
|
truc Advocate
Joined: 25 Jul 2005 Posts: 3199
|
Posted: Sun Jul 18, 2010 11:10 am Post subject: |
|
|
Tiens, bizarre, je pensais avoir déjà répondu!?
Bref, il nous manque ta première tentative pour pouvoir gloser autour!
(tu peux commencer à regarder du côté de grep - notamment 'grep -q'- pour savoir si un fichier contient un mot ou pas) _________________ The End of the Internet! |
|
Back to top |
|
|
22decembre Guru
Joined: 08 May 2010 Posts: 308 Location: Paris, banlieue sud (Massy et alentours)
|
Posted: Mon Jul 19, 2010 6:39 pm Post subject: |
|
|
donc dans le dossier de spam je fais :
grep -L "spam" * (recherche tous ceux qui ne contiennent pas l'entente "spam" posée par bogofilter ou spamassassin, s'ils sont dans le dossier spam, c'est que l'utilisateur l'y a mis, c'est donc un faux négatif)
mais comment envoyer cette liste de fichier à bogofilter (pour réapprentissage) ? _________________ Portable Gentoo installé depuis ~fevrier 2010, kde4 ( doc : http://www.22decembre.eu/gentoo-portable/)
Serveur Maison Gentoo depuis ~avril 2010 (doc : http://www.22decembre.eu/gentoo-serveur/)
http://www.22decembre.eu |
|
Back to top |
|
|
truc Advocate
Joined: 25 Jul 2005 Posts: 3199
|
Posted: Mon Jul 19, 2010 8:33 pm Post subject: |
|
|
maiis bogofilter fonctionne comment? C'est une commande? qui prend un fichier en entrée? C'est une page web? C'est un utilisateur à qui il faut envoyer des messages? _________________ The End of the Internet! |
|
Back to top |
|
|
22decembre Guru
Joined: 08 May 2010 Posts: 308 Location: Paris, banlieue sud (Massy et alentours)
|
|
Back to top |
|
|
22decembre Guru
Joined: 08 May 2010 Posts: 308 Location: Paris, banlieue sud (Massy et alentours)
|
Posted: Tue Jul 20, 2010 5:01 am Post subject: |
|
|
j'ai l'impression que c'est :
Code: | grep -L "SPAM" *|bogofilter -Ns -d /var/lib/bogofilter" |
"cherche ceux qui contienne pas SPAM (pas classé par le premier filtre à l'entrée), et dis à bogofilter que c'est pas du ham (N) mais du spam (s) dans la base de données dans /var/lib/bogofilter" _________________ Portable Gentoo installé depuis ~fevrier 2010, kde4 ( doc : http://www.22decembre.eu/gentoo-portable/)
Serveur Maison Gentoo depuis ~avril 2010 (doc : http://www.22decembre.eu/gentoo-serveur/)
http://www.22decembre.eu |
|
Back to top |
|
|
truc Advocate
Joined: 25 Jul 2005 Posts: 3199
|
Posted: Tue Jul 20, 2010 5:26 am Post subject: |
|
|
si bogofilter est capable de lire la liste de fichier en entrée(à la sortie d'un pipe) au lieu de en argument, il semblerait que tu aies répondu toi même à ta question:)
Du coup, pour les faux négatifs, si j'ai bien compris, tu ferais:
Code: | for box in ~/.mail/.inbox.*; do
[ -d "$box" ] || continue;
echo "Entering $box"
if [ "${box##*.}" = "spam" ] ; then
cd "$box" && grep -L "SPAM" * | bogofilter -Ns -d /var/lib/bogofilter
else
cd "$box" && grep -l "SPAM" * | bogofilter -u -Sn -d /var/lib/bogofilter
fi
# nous jouons avec des chemins absolus, pas besoin normalement de revenir
# où nous étions avant
done |
Bon, par contre, es-tu bien sûr que c'est suffisant comme test pour savoir si c'est du spam ou non?
Par exemple, je ne sais pas comment cela fonctionne chez toi, mais, ne cherches-tu pas à savoir, par exemple, si le sujet du message contient SPAM plutôt que tout le message? La recherche doit-elle se restreindre à SPAM en majuscule?
Dans tous les cas, nous devrions pouvoir modifier le code ci-dessus pour l'améliorer _________________ The End of the Internet! |
|
Back to top |
|
|
22decembre Guru
Joined: 08 May 2010 Posts: 308 Location: Paris, banlieue sud (Massy et alentours)
|
Posted: Tue Jul 20, 2010 5:40 pm Post subject: |
|
|
je recherche en fait le motif "___SPAM___" qui est strictement l'entete de marquage réglé par moi-même dans bogofilter.
grep doit donc rechercher celui-ci exactement !
t'es sur(e) pour les déplacement dans les dossiers ? En l'occurrence, pour les maildir il s'agit de :
~/.mail/cur => boite de reception par défaut
~/.mail/.inbox.spam/cur => spam
~/.mail/.inbox.facebook/cur => facebook
et ainsi de suite.
~/.mail est un choix, le reste, non, c'est le format des dossier maildir (serveur imap) _________________ Portable Gentoo installé depuis ~fevrier 2010, kde4 ( doc : http://www.22decembre.eu/gentoo-portable/)
Serveur Maison Gentoo depuis ~avril 2010 (doc : http://www.22decembre.eu/gentoo-serveur/)
http://www.22decembre.eu |
|
Back to top |
|
|
truc Advocate
Joined: 25 Jul 2005 Posts: 3199
|
Posted: Tue Jul 20, 2010 9:42 pm Post subject: |
|
|
22decembre wrote: | t'es sur(e) pour les déplacement dans les dossiers ? |
Non, pas du tout, je ne me base que sur les informations que tu as données jusqu'ici:
fais ce test (qui ne modifie rien nul part)
Code: | for box in ~/.mail/cur ~/.mail/.inbox.*/cur; do
cd "$box" || continue
if [ "${PWD}" = "$HOME/.mail/.inbox.spam/cur" ]; then
echo "$box: this is the spam box"
# grep -L "___SPAM___" * | bogofilter -Ns -d /var/lib/bogofilter
else
echo "$box"
# grep -l "___SPAM___" * | bogofilter -u -Sn -d /var/lib/bogofilter
fi
done |
Ça va te permettre de vérifier si ce sont bien les répertoires que tu veux etc
Après, si c'est bon, tu pourras probablement juste décommenter les lignes qui effectuent le traitement et ce sera bon.
Mais avant, encore deux trois questions pour être bien sûr:
- Comment au juste les messages taggués avec ___SPAM___ arrivent quand même dans les dossiers autre que celui du spam?
- Ton 'antispam' ne les déplace pas tout seul? (attention, je ne connais pas du tout le produit que tu utilises, n'aies pas peur de dire des évidences!)
- Quasi même question mais sur les mails n'étant pas du spam mais arrivant quand même dans le dossier spam, pourquoi?
_________________ The End of the Internet! |
|
Back to top |
|
|
22decembre Guru
Joined: 08 May 2010 Posts: 308 Location: Paris, banlieue sud (Massy et alentours)
|
Posted: Wed Jul 21, 2010 5:48 am Post subject: |
|
|
encore une fois, bogofilter est le filtre de spam, il faut lui apprendre à le reconnaître ! Ok ?
J'ai un dossier "spam" dans mon client courriel qui correspond au dossier .inbx.spam. Tous les messages que j'y mets sont donc du spam.
J'ai passé ce dossier à bogofilter, et les autres dossiers, en disant que c'était du spam.
Maintenant, bogofilter a appris et peut donc classer les messages arrivant comme spam, et marque "___spam___" dans le header du courriel. Il pourrait aussi faire plein d'autres choses (un autre motif...).
Il passe le message à postfix, qui le mets dans ma boîte aux lettres. C'est le dernier intervenant, le deliver de dovecot qui pose le message dans le bon dossier. Ça s'appelle sieve, c'est un langage de filtres. J'ai ainsi un filtre sur facebook, un autre sur gentoo, et un sur le spam.
C'est donc bien un élément du serveur mail (deliver de dovecot, missionné par postfix) qui a mis le spam dans le dossier en suivant mes indications inscrites dans le filtre sieve.
Jusqu'ici, aucune intervention de ma part, sauf en tant qu'administrateur du serveur...
Si je veux faire ce script de filtrage, c'est parce que bogofilter a besoin d'un entrainement permanent, qu'il fait des erreurs et que c'est moi qui les corrige.
Il arrive donc qu'il pose un message non-sollicité dans une boîte "classique", auquel cas, je le rebalance dans la boîte "spam" et il doit apprendre que je trouve ce message "spam" => d'où la recherche d'absence du motif dans les messages du dossier "spam".
Inversement, il peut classer des messages "sollicités" comme du spam. Auquel cas, je les récupère de la boîte spam et les rebalance dans la boîte où ils devraient être. Bogofilter doit donc apprendre que ces messages taggués spam n'en sont pas !
Voila pour l'explication en full-HD... Le disque Blu-Ray viendra plus tard
Je te remercie de m'aider. C'est juste que tu as l'air de maîtriser le bash avec les "||continue;"... _________________ Portable Gentoo installé depuis ~fevrier 2010, kde4 ( doc : http://www.22decembre.eu/gentoo-portable/)
Serveur Maison Gentoo depuis ~avril 2010 (doc : http://www.22decembre.eu/gentoo-serveur/)
http://www.22decembre.eu |
|
Back to top |
|
|
truc Advocate
Joined: 25 Jul 2005 Posts: 3199
|
Posted: Wed Jul 21, 2010 10:19 am Post subject: |
|
|
Cool, un échange d'information bidirectionnel!
Bon, ce qui me manquait et qui maintenant me semble évident est que c'est toi qui manuellement a redéplacé les mails dans la boite kivabien pour relancer l'apprentissage...
Oui, bon... Mais avec tout ça, la solution semble te convenir, ou a t'elle encore un peu besoin d'amour?
_________________ The End of the Internet!
Last edited by truc on Wed Jul 21, 2010 7:18 pm; edited 1 time in total |
|
Back to top |
|
|
22decembre Guru
Joined: 08 May 2010 Posts: 308 Location: Paris, banlieue sud (Massy et alentours)
|
|
Back to top |
|
|
22decembre Guru
Joined: 08 May 2010 Posts: 308 Location: Paris, banlieue sud (Massy et alentours)
|
Posted: Wed Jul 21, 2010 9:01 pm Post subject: |
|
|
on dirait que ça marche...
j'ai légerement modifié le truc :
Code: | #!/bin/bash
for box in ~/.mail/cur ~/.mail/.INBOX.*/cur; do
cd "$box" || continue
if [[ "$box" == *spam* ]]
then
echo "$box: this is the spam box"
grep -L "___SPAM___" * | bogofilter -Ns -d /var/lib/bogofilter
else
echo "$box"
grep -l "___SPAM___" * | bogofilter -Sn -d /var/lib/bogofilter
fi
done
|
grep contient il une option sur l'age du fichier (du message) ? Parce que plus mes boîtes mail vont vieillir, plus elles vont grossir et rendre le traitement long et inutile puisque le même message ne peut être "appris" qu'une seule fois ! _________________ Portable Gentoo installé depuis ~fevrier 2010, kde4 ( doc : http://www.22decembre.eu/gentoo-portable/)
Serveur Maison Gentoo depuis ~avril 2010 (doc : http://www.22decembre.eu/gentoo-serveur/)
http://www.22decembre.eu |
|
Back to top |
|
|
truc Advocate
Joined: 25 Jul 2005 Posts: 3199
|
Posted: Wed Jul 21, 2010 9:52 pm Post subject: |
|
|
Pas que je sache, par contre, tu peux probablement t'en sortir avec 'find'
si ton script est executé tous les jours, tu peux probablement juste chercher les fichiers ayant été modifiés pendant cet interval de temps:
Code: | # dans un repertoire donné
find -mtime -1 -exec grep -l spam '{}' + | bogofilter -machin |
Bon, et puisque certains vont probablement bondir, si tu ne reçois pas des milliers de mail en l'espace d'une journée, cela est suffisant, mais si c'est le cas, tu regarderas de plus près la commande et les options de xargs que tu utiliseras au lieu du -exec de find _________________ The End of the Internet! |
|
Back to top |
|
|
22decembre Guru
Joined: 08 May 2010 Posts: 308 Location: Paris, banlieue sud (Massy et alentours)
|
Posted: Thu Jul 22, 2010 6:50 pm Post subject: |
|
|
je pensais lire les mails pas plus de 5 jours... en 5 jours, si il est pas passé c'est qu'il est un fantome !
Tu t'y connais bien en scripts on dirait ! T'aurais pas un truc aussi pour gerer le repertoire de portage par ex ? (je comptais lancer le sujet alors ...) _________________ Portable Gentoo installé depuis ~fevrier 2010, kde4 ( doc : http://www.22decembre.eu/gentoo-portable/)
Serveur Maison Gentoo depuis ~avril 2010 (doc : http://www.22decembre.eu/gentoo-serveur/)
http://www.22decembre.eu |
|
Back to top |
|
|
truc Advocate
Joined: 25 Jul 2005 Posts: 3199
|
Posted: Thu Jul 22, 2010 8:21 pm Post subject: |
|
|
Un ch'ti résolu et un autre thread si tu veux remettre le couvert!
Merci;)
EDIT: par contre, dans tes demandes faut vraiment que tu sois plus précis, j'suis vraiment allé à la pêche aux infos ici. On ne prendra pas forcément toujours le temps de faire ainsi et ton message risque de rester sans réponse... _________________ The End of the Internet! |
|
Back to top |
|
|
|