Spamassassin marcó algo como spam que no es spam. ¿Cómo lo digo así?

14

Esta es una especie de pregunta general sobre el entrenamiento de spamassassin. Tengo un servidor de correo recién configurado que filtra el correo entrante a través de spamassassin. Recientemente recibí una reserva de vuelo marcada como spam (puntaje 5) y me gustaría decirle a spamassassin que no es spam. (¿Quizás hacer esto también volvería a enviar el correo sin los encabezados de spamassassin modificados?)

He intentado buscar y solo encuentro cosas sobre conseguir que spamassassin marque mensajes como spam (y no sobre corregir falsos positivos), o sobre personas que escriben correos electrónicos: cómo no ser marcado como spam.

Entonces, en lo que respecta a dar retroalimentación de spamassassin sobre llamadas incorrectas:

  1. ¿Hay alguna manera de hacerlo desde un cliente de correo electrónico (por ejemplo: Thunderbird)

  2. ¿Hay alguna manera de hacer esto a través de la línea de comandos en el servidor de correo?

Me gustaría hacer que el proceso sea lo más fluido posible, pero lo que sea que haga el trabajo.

Detalles de SpamAssassin con respecto al correo electrónico:

 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

Claramente, los principales culpables son la línea de asunto de mayúsculas SUBJ_ALL_CAPS y el MIME_HTML_ONLY (supongo, no hay alternativa de texto).

El correo electrónico era para una confirmación de reserva de vuelo y el asunto se veía así:

 Subject: JENNINGS/NICHOLAS KOSSOW MR 24 JAN MOF DPS

Encabezados:

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
fuente
El primer paso debe ser preguntar por qué se marcó como spam. Sin eso, podemos hacer sugerencias generales, mostrarle cómo ajustar el motor bayesiano para jamón, pero no podemos ayudar a abordar específicamente las reglas que fallaron. Agregue a su pregunta las primeras líneas del cuerpo del correo electrónico y todos los encabezados .
MadHatter
@MadHatter gracias por las sugerencias, actualizó la pregunta en consecuencia.
Nick Jennings
No dices qué puntaje bayesiano obtuvo. ¿Estás utilizando el motor bayesiano?
MadHatter
La puntuación fue de 5.0 ... se inserta en el tema: ***** SPAM 5.0 *****
Nick Jennings
1
Ese es el puntaje total de SA, no el puntaje bayesiano contribuyente. Pero no se preocupe, por el resto de lo que escribió, parece que su motor bayesiano no está funcionando porque nunca lo ha entrenado, ¡y tiene la intención de abordar eso!
MadHatter

Respuestas:

22

Hay consejos específicos y generales que pueden ser útiles en este caso.

Específico

El problema subyacente aquí es que Garuda Airlines, bendito sea sus pequeños calcetines de algodón, está enviando correos electrónicos de confirmación que tienen muchas de las características del correo no deseado. La línea de asunto es MUY GRANDE, envían correos electrónicos solo en HTML que contienen muchas imágenes y muy poco texto, el sobre-remitente ( [email protected]) es claramente un nonce construido por máquina, y el proveedor de correo electrónico para su sistema de confirmación (subcontratado) (amadeus.com) tiene un registro SPF inútil (a pesar de todos nuestros consejos en sentido contrario , algunas personas piensan erróneamente que hay un valor en un registro que enumera algunos de sus sistemas de envío y fines ~all).

No hay mucho que puedas hacer sobre la mayoría de esto. Si desea estar seguro de que esto se transmita , una línea en su ~/.spamassassin/user_prefsque dice le whitelist_from *@amadeus.comenviará estos mensajes. Ir más allá y alterar el peso de las reglas que se activaron es probablemente una mala idea. El conjunto de reglas SpamAssassin (SA) se crea al filtrar una gran cantidad de correo no deseado y determinar qué características se aplican a la mayoría de ellos; es probable que abra su INBOX a mucho más que solo correos electrónicos de confirmación de Garuda al desactivar esas reglas.

General

Este es exactamente el tipo de situación que el motor bayesiano maneja bien. Está diseñado para filtrar el correo electrónico que no activa las otras reglas pero contiene cosas que no desea leer, mientras que ayuda a través del correo electrónico que activa esas reglas pero contiene cosas que desea leer.

IIRC, el motor no hará nada si no lo estás entrenando. La forma más fácil de entrenarlo es mantener dos carpetas, llamadas (digamos) spamy ham. Pones spamcopias de correo electrónico que llegaron a tu INBOX pero no querías; en hamponer copias de correos electrónicos que caían falta de SA, pero que quería, como este correo electrónico de confirmación.

Luego, todas las noches (más o menos) tienes un trabajo cron que dice

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

modificando los caminos en consecuencia. Con el tiempo, esto le enseñará al motor lo que hace y no le gusta leer. Dado que un puntaje Bayesiano alto puede agregar +4.0 puntos al puntaje SA de un correo electrónico, mientras que uno bajo puede restar 1.9, un motor bien entrenado realmente puede ayudar a SA a distinguir lo que quiere leer de lo que no, pero tiene que pon el esfuerzo en enseñarlo .

MadHatter
fuente
1
Eso suena razonable. Voy a probar ese flujo de correo no deseado / ham. ¡Gracias!
Nick Jennings
1
"bendiga sus calcetines de algodón"
Alex Reinking
@MadHatter sigue con esto. Traté de arrastrar el correo electrónico SPAM que Spamassassin alteró a la carpeta Ham y cuando ejecuté el sa-learn --ham ...comando, dice que encontró 0 correos electrónicos para aprender: Learned tokens from 0 message(s) (0 message(s) examined)... Traté de capturar el .emlarchivo adjunto en el que SpamAsssasin puso el correo electrónico original, en la carpeta Ham directamente en el servidor, pero aún así, dice que encuentra 0 mensajes al proceso ...
Nick Jennings
Debo agregar que estoy tratando con el correo electrónico original como un archivo adjunto según la report_safe 1configuración.
Nick Jennings
@NickJennings, entonces probablemente tendrá que usar un cliente con capacidad MIME para eliminar el correo electrónico original y alimentarlo sa-learn. Si eso es demasiado doloroso, apáguelo report_safe. Es una buena idea entrenar al aprendiz de jamón con otras cosas además de cosas que fueron identificadas erróneamente como spam, ya que las suposiciones del filtro bayesiano están separadas de las SA en su conjunto. Alimento al mío todo el correo personal que recibo, ya que eso es lo que más quiero leer.
MadHatter
7

Parece que estás usando palomar. He pasado algunas semanas tratando de encontrar una integración fluida, que permita a los usuarios entrenar fácilmente los filtros de spam del lado del servidor sin tener que copiar correos.

La parte clave es el complemento Antispam Dovecot. El antispam plugin de disparadores en movimiento operaciones entre tres grupos de carpetas: trash, unsurey spam. Específicamente, cuando se detecta una transición de cualquier cosa (pero spam) a spam, se activa una acción de aprendizaje de spam y cuando se detecta una transición de spama unsure, se activa una acción de aprendizaje de jamón.

Es compatible con diferentes backends de entrenamiento. Una simple es mailtrain, que simplemente ejecuta un comando y pone el correo en la entrada estándar. Una configuración para eso podría verse así:

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
}

Junto con /usr/local/bin/sa-learn-stdin.sh:

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

La configuración dice "Para aprender como spam, ejecuta /usr/local/bin/sa-learn-stdin.sh -L spamy para aprender como ham, ejecuta /usr/local/bin/sa-learn-stdin.sh -L ham". Los argumentos están configurados por antispam_mail_spam, antispam_mail_notspamy antispam_mail_sendmail_args.

Esto ya es bastante bueno. Si puede configurar su cliente para mover los correos que marca como spam a la carpeta de spam, esto ya es una integración bastante automática entre el cliente y el servidor. Del mismo modo, si configura el servidor para almacenar correos clasificados como spam en la carpeta de correo no deseado en el momento de la entrega (por ejemplo, utilizando Sieve), el mensaje se aprenderá como jamón cuando el usuario lo retire de la carpeta Spam.


Para mejorar la integración con Thunderbird y KMail, escribí un parche para antispam , que desafortunadamente no recibió ningún comentario de parte de arriba; use bajo su propio riesgo .

Agrega una opción de configuración al antispam, que simplemente se puede agregar a la pluginsección en la configuración de palomar:

   antispam_spam_flags = "Junk;$JUNK"

(Las citas son importantes para evitar que $hagan algo gracioso).

Con el parche, el antispam también activará una acción de aprendizaje si un mensaje recibe una bandera de spam o pierde todas sus banderas de spam. Las banderas son una función IMAP y las usan los clientes para almacenar bits de información del lado del servidor. Resulta que Thunderbird y KMail usan estas banderas para almacenar el estado de los mensajes basura / spam.

El Junkindicador está establecido por Thunderbird cuando se marca un mensaje como no deseado. Del mismo modo para la $JUNKbandera un KMail. Por lo tanto, con esta configuración, puede desencadenar el aprendizaje del lado del servidor marcando el correo como basura / no basura en Thunderbird en KMail.

Otros clientes, como K9-Mail, siguen jugando muy bien, porque el valor predeterminado es mover basura en la carpeta Spam, que también se activará antispam.


Puede implementar la misma funcionalidad, creo, en IMAPSieve . Esto está en mi TODO, pero desafortunadamente actualmente no tengo un entorno listo para pruebas con un palomar suficientemente reciente.

Jonas Schäfer
fuente
Esto parece interesante, definitivamente lo investigará.
Nick Jennings