Diferencia entre revisiones de «SpamAssassin»

De Guifi.net - Wiki Hispano

(Página creada con «'''SpamAssassin''', o a veces abreviado '''SA''' es un servidor usado para filtrar correo electrónico no deseado (''spam'') basado en reglas de co...»)
 
Línea 146: Línea 146:
  
 
[[Categoría:Servidor]]
 
[[Categoría:Servidor]]
 
[[ca: SpamAssassin]]
 

Revisión de 02:44 4 dic 2013

SpamAssassin, o a veces abreviado SA es un servidor usado para filtrar correo electrónico no deseado (spam) basado en reglas de contenido.

Cuando un servidor de correo recibe un mensaje, se lo envía a SpamAssassin, quien procede a ejecutar una serie de tests sobre él. Cada uno de ellos añade o quita unas pocas milésimas de puntuación a dicho correo. Si la puntuación que asigna un test es positiva, es que tiene cierto parecido con el spam; por contra, si esa puntuación es negativa, es que tiene parecido con correo válido. Así, una vez pasados todos los tests, se suman todas las puntuaciones para hallar la puntuación total de dicho correo. Si esa puntuación está por encima de un margen, el mensaje podrá ser marcado como spam, si pasa por encima de un segundo límite, será directamente descartado.

Instalación de SpamAssassin

apt-get install spamassassin

Integración con Exim

En /etc/exim/exim.conf se añaden dos apartados; un trasporte spamcheck en la sección Transports:

spamcheck:
  driver = pipe
  command = /usr/sbin/exim -oMr spam-scanned -bS
  transport_filter = /usr/bin/spamc -s200000 -u${local_part}
  bsmtp = all
  home_directory = "/tmp"
  current_directory = "/tmp"
  user = mail
  group = mail
  return_path_add = false
  log_output = true
  return_fail_output = true
  prefix =
  suffix =

NOTA: En transport_filter el -s analiza el tope en bytes del tamaño de los mails a analizar.

y un director spamcheck_director en la sección Directors (es importante el orden en el que aparece en esta sección, porque los directors se ejecutan en el orden en que se encuentran en el archivo /etc/exim/exim.conf:

spamcheck_director:
  no_verify
  condition = "${if and { {!def:h_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}}
   {!eq {$received_protocol}{local}} }{1}{0}}"
  driver = localuser
  transport = spamcheck

Activación del chequeo de spam por usuaria

en la primera instalación: el análisis antispam se realiza por usuario, modificando el archivo .forward de su $HOME; el archivo estándar .forward que estamos usando es el siguiente:

# Exim filter <==DO NOT REMOVE!!
if error_message then finish endif
if
$h_X-Spam-Status: contains "Yes"
or
"${if def:h_X-Spam-Flag {def}{undef}}" is "def"
then
save $home/Maildir/.Spam/
finish
endif

como vemos, más o menos, chequea la cabeceras X-Spam-Status y X-Spam-Flag, y si el email está marcado como spam deja una copia en $HOME/Maildir/.Spam/ (un archivo por mensaje); esta es una cabecera modificada por SpamAssassin obtenida de un MTA en pruebas, con una puntuación de 7.4;

Received: from mail by orwell.blogmail.cc with spam-scanned (Exim 3.36 #1 (Debian))
       id 1FUzwf-0005Oc-00
       for <dev@blogmail.cc>; Sun, 16 Apr 2006 07:37:13 +0200
Received: from localhost by orwell.blogmail.cc
       with SpamAssassin (version 3.0.3);
       Sun, 16 Apr 2006 07:37:13 +0200
From: charmed_enigma25@yahoo.com
To: dev@blogmail.cc
Subject: Report
Date: Sat, 9 Jul 2005 22:49:07 +0800
Message-Id: <E1FUzwc-0005OZ-00@orwell.blogmail.cc>
X-Spam-Flag: YES
X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on orwell.blogmail.cc
X-Spam-Level: *******
X-Spam-Status: Yes, score=7.4 required=5.0 tests=DATE_IN_PAST_96_XX,
       FORGED_RCVD_HELO,FORGED_YAHOO_RCVD,FROM_ENDS_IN_NUMS,
       FROM_HAS_ULINE_NUMS,MIME_BOUND_NEXTPART,MISSING_MIMEOLE,
       MSGID_FROM_MTA_ID,NO_REAL_NAME,PRIORITY_NO_NAME autolearn=no
       version=3.0.3 
Content analysis details:   (7.4 points, 5.0 required)

en la instalación actual la interpretación de la cabecera se hace en bm-mail.php, llevándola a la categoría -1 si existe X-Spam-Flag: YES

Cambios en la configuración por defecto

  • archivo $HOME/.spamassassin/user_prefs.- es el archivo de la configuración personal de cada usuaria; de momento hemos bajado el umbral de puntuación para spam de 5.00 por defecto a 3.00 required_score a ver qué pasa; para cambiar el comportamiento de spamassassin, podemos activar o desactivar los test por defecto o cambiar su puntuación, añadiendo una línea en user_prefs con el nombre del test y su nueva valoración:
  • desactivar el test HTML_COMMENT_8BITS:
score HTML_COMMENT_8BITS      0
  • cambiar la puntuación del test MICROSOFT_EXECUTABLE a 1
score MICROSOFT_EXECUTABLE 1
  • última versión del archivo user_prefs (aún en pruebas)
# SpamAssassin user preferences file.  See 'perldoc Mail::SpamAssassin::Conf'
# for details of what can be tweaked.
###########################################################################
# How many points before a mail is considered spam.
# required_score                5
required_score          3
# Whitelist and blacklist addresses are now file-glob-style patterns, so
# "friend@somewhere.com", "*@isp.com", or "*.domain.net" will all work.
# whitelist_from        someone@somewhere.com
# Add your own customised scores for some tests below.  The default scores are
# read from the installed spamassassin rules files, but you can override them
# here.  To see the list of tests and their default scores, go to
# http://spamassassin.apache.org/tests.html .
#
# score SYMBOLIC_TEST_NAME n.nn
# Speakers of Asian languages, like Chinese, Japanese and Korean, will almost
# definitely want to uncomment the following lines.  They will switch off some
# rules that detect 8-bit characters, which commonly trigger on mails using CJK
# character sets, or that assume a western-style charset is in use.
#
# score HTML_COMMENT_8BITS      0
# score UPPERCASE_25_50         0
# score UPPERCASE_50_75         0
# score UPPERCASE_75_100        0


Aprendizaje en la clasificación de spam

SpamAssassin incluye utilidades para la gestión de su base de conocimiento sobre lo que es o no spam; principalmente sa-learn spamassassin-learn, que toma como entrada un archivo o una carpeta de archivos procedentes de correos electrónicos y los marca como spam;

Evaluación de la instalación - tareas pendientes

El aspecto más deficiente de la instalación actual es la interacción con la base de conocimientos de spamassassin; lo más importante es que tengamos un mecanismo desde la interfaz privada del webmail para decirle a SpamAssassin qué correos de los que ha considerado negativos son spam o ham en realidad;

Esquema actual del MTA

  • -> entra un email

Exim recorre secuencialmente los directors de su archivo de configuración, determinando el destino del mensaje primero y los filtros generales del mta después; en este punto (antes de spamcheck_director, por ejemplo, podríamos colocar los filtros de sistema y todo el procesado de mensajes para gestores, listas, etc.

  • -> spamckeck_director

Exim comprueba si está definido el flag X-Spam-Flag: en la cabecera del mensaje, si no, le pasa el email al transport spamcheck que lo chequea y lo marca con los flags X-Spam

  • -> filtro .forward por usuaria

exim consulta las condiciones del filtro .forward que encuentra en el $home del usuario; en nuestro caso ese filtro hace que los email con X-Spam-Status: Yes sean copiados en $home/Maildir/.Spam/ en vez de ser entregados al buzón del usuario; así, los email considerados spam no llegarán nunca al siguiente director de exim;

  • -> otros directors de exim ...

Filtros Spamassassin

rescatados del syslog de orwell

FORGED_RCVD_HELO
HTML_60_70
HTML_MESSAGE
MIME_HTML_ONLY
TRACKER_ID
INFO_TLD
RCVD_BY_IP

Conclusiones

códigoútil

  • usuarios con spamassassin activo (o sea, tienen archvo .forward)
find /home/user/ -name '.forward'
  • mandar spam de prueba (GTUBE):

desde una cuenta externa (preferiblemente) mandar un mail con el siguiente cuerpo:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Enlaces externos

  • Web oficial:

http://spamassassin.apache.org/

Herramientas personales