Spamassassin a signalé quelque chose comme spam qui n'est pas du spam. Comment puis-je le dire?

14

C'est en quelque sorte une question générale sur la formation de spamassassin. J'ai un serveur de messagerie nouvellement configuré qui filtre le courrier entrant via spamassassin. J'ai récemment obtenu une réservation de vol marquée comme spam (score 5) et je voudrais dire à spamassassin que ce n'est pas du spam. (Peut-être que cela enverrait également le courrier sans les en-têtes spamassassin modifiés?)

J'ai essayé de chercher autour de moi et je ne trouve que des choses sur l'obtention de spamassassin pour marquer les messages comme spam (et non sur la correction des faux positifs), ou pour les personnes écrivant des e-mails - comment ne pas être signalé comme spam.

Donc, en ce qui concerne les commentaires de spamassassin sur les mauvais appels:

  1. Existe-t-il un moyen de le faire à partir d'un client de messagerie (par exemple: Thunderbird)

  2. Existe-t-il un moyen de le faire via la ligne de commande sur le serveur de messagerie?

J'aimerais rendre le processus aussi fluide que possible, mais peu importe ce qui fait le travail.

Détails de SpamAssassin concernant l'e-mail:

 0.0 FSL_HELO_NON_FQDN_1    No description available.
 0.6 HK_RANDOM_ENVFROM      Envelope sender username looks random
-0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at http://www.dnswl.org/, no trust [82.150.225.129 listed in list.dnswl.org]
-0.0 RCVD_IN_MSPIKE_H3      RBL: Good reputation (+3) [82.150.225.129 listed in wl.mailspike.net]
 0.0 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different
 1.0 SPF_SOFTFAIL           SPF: sender does not match SPF record (softfail)
 1.6 SUBJ_ALL_CAPS          Subject is all capitals
 1.1 MIME_HTML_ONLY         BODY: Message only has text/html MIME parts
 0.7 HTML_IMAGE_ONLY_20     BODY: HTML: images with 1600-2000 bytes of words
 0.0 HTML_MESSAGE           BODY: HTML included in message
-0.0 RCVD_IN_MSPIKE_WL      Mailspike good senders
 0.0 UNPARSEABLE_RELAY      Informational: message has unparseable relay lines
 0.0 T_REMOTE_IMAGE         Message contains an external image

De toute évidence, les principaux coupables sont la ligne d'objet en majuscules SUBJ_ALL_CAPS et le MIME_HTML_ONLY (je suppose, pas d'alternative textuelle).

L'email était pour une confirmation de réservation de vol et le sujet ressemblait à ceci:

 Subject: JENNINGS/NICHOLAS KOSSOW MR 24 JAN MOF DPS

En-têtes:

X-Envelope-From: <[email protected]>
X-Envelope-To: <[email protected]>
Received: from mail1.amadeus.net (unknown)
    by 147-49-15-51.rev.cloud.scaleway.com(Postfix 3.1.0/8.13.0) with SMTP id unknown
    Fri, 20 Jan 2017 07:55:10 +0000
    (envelope-from <[email protected]>
Received: from obeap115 (nat-dns-mnp.amadeus.net [82.150.225.129])
    by mail1.amadeus.net (Postfix) with ESMTP id 3F7A9200042
    for <[email protected]>; Fri, 20 Jan 2017 07:55:10 +0000 (GMT)
From: [email protected]
TO: [email protected]
Message-ID: <CTS/GA/C50D54421A07/[email protected]>
FND-Request-ID: <CTS/GA/C50D54421A07/[email protected]>
Job-ID: 1
Subject: JENNINGS/NICHOLAS KOSSOW MR 24 JAN MOF DPS
Date: Fri, 20 Jan 2017 07:55:09 +0000
Content-Type: multipart/mixed; 
    boundary="----=_Part_191904_1900935199.1484898909762"
MIME-Version: 1.0
Nick Jennings
la source
La première étape doit être de demander pourquoi il a été signalé comme spam. Sans cela, nous pouvons faire des suggestions générales, vous montrer comment modifier le moteur bayésien pour le jambon, mais nous ne pouvons pas aider spécifiquement à résoudre les règles qui ont échoué. Veuillez ajouter à votre question les premières lignes du corps de l'e-mail et tous les en-têtes .
MadHatter
@MadHatter merci pour les suggestions, a mis à jour la question en conséquence.
Nick Jennings
Vous ne dites pas quel score bayésien il a obtenu. Utilisez-vous le moteur bayésien?
MadHatter
Le score était de 5,0 .. il est inséré dans le sujet: ***** SPAM 5.0 *****
Nick Jennings
1
C'est le score SA total, pas le score bayésien contributif. Mais ne vous inquiétez pas, d'après le reste de ce que vous avez écrit, il semble que votre moteur bayésien ne démarre pas parce que vous ne l'avez jamais entraîné, et vous avez l'intention de résoudre ce problème!
MadHatter

Réponses:

22

Il existe à la fois des conseils spécifiques et généraux qui peuvent être utiles dans ce cas.

Spécifique

Le problème sous-jacent ici est que Garuda Airlines, bénissez leurs petites chaussettes en coton, envoie des e-mails de confirmation qui portent la plupart des caractéristiques du spam. La ligne d'objet est TRÈS SHOUTY, ils envoient des e-mails HTML uniquement contenant beaucoup d'images et très peu de texte, l'enveloppe-expéditeur ( [email protected]) est assez clairement un nonce construit par machine, et le fournisseur de messagerie pour leur système de confirmation (externalisé) (amadeus.com) a un enregistrement SPF inutile (malgré tous nos conseils contraires , certaines personnes pensent à tort qu'il y a de la valeur dans un enregistrement qui répertorie certains de leurs systèmes d'envoi et se termine ~all).

Il n'y a pas grand-chose que vous puissiez faire à ce sujet. Si vous voulez être sûr ~/.spamassassin/user_prefsque whitelist_from *@amadeus.comces messages passent , une ligne dans votre qui dit vous fera parvenir ces messages. Aller plus loin et altérer les poids des règles qui ont été déclenchées est probablement une mauvaise idée. L'ensemble de règles SpamAssassin (SA) est créé en filtrant un énorme poids de spam et en déterminant les caractéristiques qui s'appliquent à la plupart d'entre elles; vous êtes susceptible d'ouvrir votre INBOX à bien plus que des e-mails de confirmation Garuda en désactivant ces règles.

Général

C'est exactement le genre de situation que le moteur bayésien gère bien. Il est conçu pour filtrer le courrier qui ne déclenche pas les autres règles , mais contient des choses que vous ne voulez pas lire, tout en aidant par courrier électronique qui ne déclenche ces règles , mais contient des choses que vous ne voulez lire.

IIRC, le moteur ne fera rien si vous ne l'entraînez pas. La façon la plus simple de le former est de maintenir deux dossiers, appelés (disons) spamet ham. Dans spamvous mettez des copies de courriels qui l'ont fait dans votre boîte de réception mais vous ne vouliez pas; en hamvous mettez des copies des e - mails qui sont tombés sous le coup de SA , mais vous avez besoin, comme cet e - mail de confirmation.

Ensuite, tous les soirs (ou presque), vous avez un travail cron qui dit

sa-learn --spam --mbox mail/spam
sa-learn --ham  --mbox mail/ham

modifier les chemins en conséquence. Au fil du temps, cela apprendra au moteur ce que vous faites et ce que vous n'aimez pas lire. Étant donné qu'un score bayésien élevé peut ajouter +4,0 points au score SA d'un e-mail, tandis qu'un score bas peut soustraire 1,9, un moteur bien formé peut vraiment aider SA à distinguer ce que vous voulez lire de ce que vous ne faites pas - mais vous devez mettre l'effort pour l'enseigner .

Chapelier Fou
la source
1
Cela semble raisonnable. Je vais essayer ce flux de boîte aux lettres spam / ham. Merci!
Nick Jennings
1
"bénissez leurs petites chaussettes en coton"
Alex Reinking
@MadHatter fait le suivi. J'ai essayé de faire glisser l'e - mail de SPAM qui SpamAssassin modifié dans le dossier Ham et quand je courais la sa-learn --ham ...commande, il dit qu'il a trouvé 0 e - mails à apprendre: Learned tokens from 0 message(s) (0 message(s) examined)... J'ai essayé Taillage la .emlpièce jointe qui SpamAsssasin a mis l'e - mail original, dans le dossier Ham directement sur le serveur, mais toujours, dit qu'il ne trouve aucun message à traiter ...
Nick Jennings
Je dois ajouter que je traite l'e-mail d'origine en tant que pièce jointe conformément au report_safe 1paramètre.
Nick Jennings
@NickJennings, alors vous devrez probablement utiliser un client compatible MIME pour supprimer l'e-mail d'origine, pour y accéder sa-learn. Si c'est trop pénible, éteignez-le report_safe. C'est une bonne idée de former l'apprenant au jambon avec autre chose que des choses qui ont été identifiées à tort comme spam, car les hypothèses du filtre bayésien sont distinctes de celles de SA dans leur ensemble. Je nourris le mien de tout le courrier personnel que je reçois, car c'est ce que je veux le plus lire.
MadHatter
7

Vous semblez utiliser pigeonnier. J'ai passé quelques semaines à essayer de comprendre une intégration en douceur, qui permet aux utilisateurs de former facilement les filtres anti-spam côté serveur sans avoir à copier les e- mails.

La partie clé est le plugin Antispam Dovecot. Le plugin anti - spam sur les déclencheurs déplacer les opérations entre les trois groupes de dossiers: trash, unsureet spam. Plus précisément, lorsqu'une transition de quoi que ce soit (mais spam) à spamest détectée, une action d'apprentissage de spam est déclenchée et lorsqu'une transition de spamà unsureest détectée, une action d'apprentissage de jambon est déclenchée.

Il prend en charge différents backends de formation. Un simple est mailtrain, qui exécute simplement une commande et place le courrier sur une entrée standard. Une configuration pour cela pourrait ressembler à ceci:

plugin {
   antispam_backend = mailtrain
   antispam_mail_sendmail = /usr/local/bin/sa-learn-stdin.sh
   antispam_mail_spam = spam
   antispam_mail_notspam = ham
   antispam_mail_sendmail_args = -L
   antispam_spam = Junk;INBOX.Junk
   antispam_trash = Trash;INBOX.Trash
   antispam_allow_append_to_spam = no
}

Avec /usr/local/bin/sa-learn-stdin.sh:

#!/bin/bash
/usr/bin/spamc "$@" >> /tmp/sa-learn-log
exit 0

La configuration indique "Pour apprendre en tant que spam, exécutez /usr/local/bin/sa-learn-stdin.sh -L spamet pour apprendre en tant que jambon, exécutez /usr/local/bin/sa-learn-stdin.sh -L ham." Les arguments sont configurés par antispam_mail_spam, antispam_mail_notspamet antispam_mail_sendmail_args.

C'est déjà assez sympa. Si vous pouvez configurer votre client pour déplacer les courriers que vous marquez comme spam dans le dossier spam, il s'agit déjà d'une intégration assez automatique entre le client et le serveur. De même, si vous configurez le serveur pour stocker les e-mails classés comme spam dans le dossier spam à la livraison (par exemple à l'aide de Sieve), le message sera appris en tant que jambon lorsque l'utilisateur le sortira du dossier Spam.


Pour améliorer l'intégration avec Thunderbird et KMail, j'ai écrit un patch pour antispam , qui n'a malheureusement pas reçu de retour d'information en amont; utiliser à vos risques et périls .

Il ajoute une option de configuration à antispam, qui peut simplement être ajoutée à la pluginsection dans la configuration de pigeonnier:

   antispam_spam_flags = "Junk;$JUNK"

(Les citations sont importantes pour éviter $de faire quelque chose de drôle.)

Avec le correctif, l'antispam déclenchera également une action d'apprentissage si un message obtient un indicateur de spam ou perd tous ses indicateurs de spam. Les indicateurs sont une fonctionnalité IMAP et utilisés par les clients pour stocker des bits d'informations côté serveur. Il s'avère que Thunderbird et KMail utilisent ces drapeaux pour stocker le statut indésirable / spam des messages.

Le Junkdrapeau est défini par Thunderbird lorsque vous marquez un message comme indésirable. De même pour le $JUNKdrapeau un KMail. Ainsi, avec cette configuration, vous pouvez déclencher l'apprentissage côté serveur en signalant le courrier comme indésirable / non indésirable dans Thunderbird dans KMail.

D'autres clients, tels que K9-Mail, fonctionnent toujours bien, car la valeur par défaut est de déplacer les fichiers indésirables dans le dossier Spam, lequel antispam se déclenchera également.


Vous pouvez implémenter la même fonctionnalité, je pense, dans IMAPSieve . C'est sur mon TODO, mais malheureusement je n'ai pas actuellement un environnement prêt à tester avec un pigeonnier suffisamment récent.

Jonas Schäfer
la source
Cela semble intéressant, va certainement y réfléchir.
Nick Jennings