SpamAssassin
De Guifi.net - Wiki Hispano
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.
Contenido
- 1 Instalación de SpamAssassin
- 2 Integración con Exim
- 3 Activación del chequeo de spam por usuaria
- 4 Cambios en la configuración por defecto
- 5 Aprendizaje en la clasificación de spam
- 6 Evaluación de la instalación - tareas pendientes
- 7 Esquema actual del MTA
- 8 Filtros Spamassassin
- 9 Conclusiones
- 10 Enlaces externos
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: