La Gaceta de Linux ... ¡ haciendo a Linux un poco más divertido !

Puesta a punto de SpamAssassin

Por Neil Youngman

Traducción al español por Victor Reyes
el día 18 de Abril de 2005, para La Gaceta de Linux

SpamAssassin, como la mayoría de nuestros lectores sabrá, es un popular clasificador del correo indeseado [spam] en Linux. Este artículo asume que ya tienes SpamAssassin instalado y trabajando, si estás interesado en correr SpamAssassin, pero todavía no lo has instalado, hay una introducción útil en http://linux.org.mt/article/killspam.

Cuando instalé SpamAssassin en Mandrake 9,2, llego a identificar cerca del 100% de mi correo indeseado. Pasado el tiempo sin embargo, muchas de las personas que envían correo indeseado [spammers] han encontrado la forma de mejorar su correo indeseado y evitar ser detectados por el conjunto de reglas predeterminadas. Veo que todavía la instalación predeterminada identifica por lo menos la mitad del correo indeseado, quizá dos tercios en un buen día, bueno pero mucho logra filtrarse. Si la gente que crean los mensajes no deseados los están mejorando, creo que la única cosa que hay que hacer es mejorar mi marcación. Hay por lo menos 8 maneras posibles de mejorar la tasa de impacto de SpamAssassin.

  1. Poner a los delincuentes conocidos en una lista negra [blacklisting]
  2. Lista de bloqueo de DNS [DNS blocklisting]
  3. Habilitar la filtración con el modelo bayesiano.[Bayesian]
  4. Reducir el punto de entrada para el correo indeseado
  5. Incrementar la marcación en las reglas existentes
  6. Actualizar SpamAssassin a la ultima versión
  7. Instalar más reglas
  8. Escribir tus propias reglas

Configuración de SpamAssassin

La puesta a punto de SpamAssassin es hecha por supuesto con la apropiada edición a el archivo de configuración. Si los cambios son solamente para tu cuenta entonces edita ~/.spamassassin/user_prefs. Si estás realizando cambios globales, entran en /etc/mail/spamassassin/local.cf (y se requiere el acceso de root.) Recomiendo fuertemente probar los cambios en tu configuración local antes de cambiar la configuración global.

Las opciones disponibles en tu archivo de configuración se enumeran en http://spamassassin.org/doc/Mail_SpamAssassin_Conf.html, así como también en las paginas importantes del manual [manpage] (véase "man Mail::SpamAssassin::Conf".)

Mecanismo de marcación de SpamAssassin

En principio, el mecanismo de marcación de SpamAssassin es simple. Hay conjunto de reglas para identificar el correo indeseado, las marcaciones asociadas con esas reglas y una marcación total del punto de entrada. Si la marcación total para todas las reglas accionadas por un mensaje alcanza el punto máximo, ese mensaje será marcado como correo indeseado [Spam].

La mayoría de la complejidad está en las reglas, pero es raramente necesario mover tus propias reglas de SpamAssassin. El ajuste del punto máximo y de las marcaciones asociados a reglas existentes es mucho más simple y puede ser muy eficaz, si esto no basta, hay también reglas adicionales disponibles para su descarga, por supuesto, si crees que escribir tus propias reglas suena divertido he incluido un indicador abajo para que inicies.

La mayoría de las reglas están listadas en http://spamassassin.org/tests.html junto con sus marcaciones asociadas, pero las marcaciones listadas no coinciden con la de mis archivos de configuración. Eran probablemente de una liberación mas nueva, encontrarás probablemente las marcaciones por defecto para tu configuración en /usr/share/spamassassin/50_scores.cf donde hay 4 marcaciones asociadas a cada regla. La regla elegida depende de si el análisis del método bayesiano [Bayesian] (véase abajo) y las pruebas de la red son habilitadas. Donde se provee solamente una marcación, esa marcación se utiliza siempre. Otras opciones, tales como marcaciones relativas se describen en la documentación ya mencionada.

Positivos falsos, listas blancas [whitelisting], y listas negras [blacklisting]

Ningún filtro de correo indeseado identifica todo correcto siempre y hay 2 tipos de errores. Los Negativos Falsos son malos, porque significa que un correo no deseado fue omitido y logro escaparse a través de la red. Los Positivos Falsos, son sin embargo peores, porque puedes omitir algo que deberías haber visto, que se ha marcado con la etiqueta de correo indeseado. Ningún filtro del correo indeseado debe ser configurado para ser eliminado automáticamente sin la revisión humana. El correo indeseado se debe enviar siempre a un área de cuarentena, que se debe revisar frecuentemente para asegurarse de que el correo genuinos no se pierda.

Las revisiones frecuentes son aún más importantes ya que vayas mejorando tus configuraciones. No importa que tan cuidadoso seas, no hay garantía que cualquier cambio a las configuraciones no causarán algún daño colateral. Incluso con la configuración predeterminada, verás algunos Positivos Falsos, por ejemplo los boletines de noticias de The National Trust y The Royal Opera House son marcados como correo indeseado, así es que una parte clave de la administración de tu correo no deseado especialmente en el principio implica el repasar los impactos y determinar qué remitentes necesitas agregar a la "lista blanca" [whitelist].

Las listas blancas [whitelisting] se hacen generalmente con el la configuración de whitelist_from y el whitelist_to. Éstos se pueden repetir las veces que quieras. Los patrones globales simples (véase "man bash" y busca "Patter Matching" para una descripción) se utilizan para especificar las coincidencias de comodín. Por ejemplo '?' coincide un solo carácter y '*' coincide cualquier número de caracteres (cero incluyendo.) el whitelist_from y el whitelist_to restan 100 puntos de la marcación, haciendo muy rara la coincidencia para que los correos alcancen el punto del máximo de correo indeseado.

whitelist_from nice.but_clueless@example.net
whitelist_from *@importantclient.example.com
Están también disponibles las opciones more_spam_to, all_spam_to. Según la documentación, "hay tres niveles para hacer las listas blancas, whitelist_to, more_spam_to y all_spam_to. Los usuarios en el primer nivel pueden obtener el bloqueo de algunos correos indeseados, pero el en all_spam_to nunca deben obtener correo bloqueado."

Debes considerar usar all_spam_to para las direcciones de postmaster. Es muy molesto si alguien intenta reportar un mensaje de correo no deseado y su reporte es bloqueado o rechazado como correo indeseado.

Puedes ver a veces una gran cantidad de correo escaparse a través de un remitente en particular. Generalmente la identificación del remitente es falsificada y se elige aleatoriamente. No hay mucha razón para poner en una lista negra a la mayoría de los remitentes, pero a veces puede valer la pena. Una opción más útil es la lista negra [blacklisting] basada en los destinatarios. Si tu dirección de correo electrónico es a.white@example.com puedes ver muchos correos indeseados con direcciones algo parecidas, tales como a.wharton@example.com y a.winter@example.com en la lista del cc y estos destinatarios pueden ser agregados a la lista negra.

Según la documentación la lista negra se hace con la configuración de blacklist_from y el blacklist_to, pero puedes encontrar que blacklist_to no trabaja en versiones de SpamAssassin anteriores a 2,6,0.

blacklist_from *@evilspammers.example.org
blacklist_to a.wharton@example.com
blacklist_to *.wi*@example.com
Hay un número de otras configuraciones para hacer las listas negras y las listas blancas. Las configuraciones globales se pueden eliminar localmente por el unwhitelist_from, el unwhitelist_to, el unblacklist_from y el unblacklist_to. Lee por favor la documentación para saber más sobre éstas y otras configuraciones disponibles.

Lista de bloqueo de DNS

La lista de bloqueo de DNS[DNS Blocklists] es otra forma de hacer una lista negra. Las listas son mantenidas externamente por servidores del correo que se han identificado como fuentes del correo indeseado o transmisiones abiertas. A esto se refieren a veces como RBL's (Listas negras en tiempo real [Realtime Blackhole Lists]).

SpamAssassin comprueba los encabezados de los mensajes para ver si el correo se ha retransmitido a través de cualquier anfitrión [host] con los que coincidan en ciertas listas de bloqueo. Esto es sabido que no trabaja con varias configuraciones porque comprueba solamente la primera entrada del DNS en resolv.conf; si esto no apunta a un servidor de DNS que este funcionando, no funcionara. Esto es un problema conocido bajo Mandrake 9,2.

La lista de bloqueo de DNS se puede inhabilitar con la opción de skip_rbl_checks.

Habilitar la filtración con el modelo bayesiano.[Bayesian]

El análisis con el modelo bayesiano es una técnica de estadística en la cual la frecuencia de palabras en los correos se analiza, según la frecuencia cómo aparezcan en los mensajes de correos indeseados y cómo aparezcan a menudo en otros correos. El contenido de los correos entrantes es entonces analizado para asignar una probabilidad del correo indeseado.

El análisis bayesiano es una característica de versiones mas recientes de SpamAssassin y la encuentro muy eficaz. Se requiere de algo de trabajo crear y mantener la base de datos, pero vale la pena un pequeño esfuerzo.

Para configurar SpamAssassin para utilizar el análisis bayesiano agrega la línea

use_bayes	1
a tu archivo de user_prefs.

No verás ninguna coincidencia para el análisis bayesiano todavía. El algoritmo requiere por lo menos 200 correos indeseados en la base de datos antes de que asigne cualquier probabilidad a tus correos. Para llegar a este punto almacena tus correos indeseados en un buzón de correos separados y ejecuta

sa-learn --spam --mbox ~/Mail/spamtrap 
Vas a ver frecuentemente que el número de correos que ha aprendido a analizar es menor a el número que aparecen en el buzón de donde esta aprendiendo, esto es porque ha detectado que algunos correos son duplicados de correos que ha visto antes.

También debes darle su "exageración" en tus correos para que aprendan usando el comando

 
 $ sa-learn --ham --mbox ~/Mail/inbox
Una vez que haya aprendido de más de 200 correos indeseados vas a empezar a ver las coincidencias en los encabezados como
BAYES_90           (4.5 points)  BODY: El clasificador Bayesiano dice que tienes
una probabilidad de correo indeseado de 90 a 99%
No detengas la alimentación de los datos cuando comiencen a trabajar. Entre más datos tengas más exacto debe ser. Si estas limitado en el espacio de disco, debes considerar que la base de datos puede crecer realmente grande. Mi espacio es alrededor de 10MB.

Si en cualquier momento clasificas accidentalmente un mensaje incorrectamente se puede corregir. Mueve el mensaje a un directorio temporal, después utiliza el comando

sa-learn --forget --mbox ~/Mail/temp 
después lo tienes regresar a el directorio correcto y clasificarlo como de costumbre.

Reducir el punto de entrada para el correo indeseado

El enfoque más simple para escoger más correos indeseado es nada mas reducir los puntos de entrada. Estos pueden ser absolutamente eficaces. Por defecto es marcar el mensaje como correo indeseado cuando marcan 5 puntos o más. La reducción de esto detendrá mucho más el correo indeseado, pero también aumentará el riesgo de Positivos Falsos.

En mi experiencia un máximo de 3,0 o 3,5 aumentará la cantidad de captura de correo indeseado dramáticamente, pero no producirá considerablemente más Positivos Falsos. Esto se logra simplemente cambiando o agregando la configuración a los required_hits, por ejemplo.

required_hits	3.5
Si has estado utilizando SpamAssassin por algún tiempo puedes utilizar el grep para determinar el nivel en el cual es puedes probablemente ver un aumento significativo en positivos falsos. Esto es hecho buscando sus directorios de correo por las líneas del encabezado co X-Spam-Status con diferentes marcaciones
$ grep 'X-Spam-Status: .* hits=[5-9]\.' ~/Mail/inbox | wc -l
      1
$ grep 'X-Spam-Status: .* hits=[34]\.' ~/Mail/inbox | wc -l
      4
$ grep 'X-Spam-Status: .* hits=2\.' ~/Mail/inbox | wc -l
     10
$
El primer comando demuestra que hay solamente 1 correo en mi buzón que se ha marcado entre 5,0 y 9,9 puntos. El segundo que hay 4 correos que marcaron entre 3,0 y 4,9 puntos y el tercero que 10 correos se marcaron entre 2,0 y 2,9 puntos. Debe ser considerado que esto omite todos los correos antes de la creación de SpamAssassin y de todos los correos que has suprimido desde esa vez.

Incrementar la marcación en las reglas existentes

Después de que tengas funcionando el análisis bayesiano y decidido sobre el punto máximo apropiado para ti, no hay duda que seguirás recibiendo correo indeseado. Pero es hora de profundizar en los encabezados y encontrar que reglas necesitan una marcación mas alta.

Antes de que comencemos, debo decir que se han mejorado las marcaciones por defecto usando un galgoritmo genético ¿Debes confiar en tu juicio en contra de ese algoritmo? Mi opinión es que el correo indeseado está evolucionando. Prueban muchos de ellos probados con las reglas predeterminadas de SpamAssassin y son mejoradas hasta que pasan. También cada problema de correo indeseado es diferente. Estadísticamente, lo que funciona para una gran base de datos de correo indeseado posiblemente hace años puede no funcionar para mejorar el problema de correo indeseado actual. Si encuentras que tus esfuerzos por mejorar hace peor el problema puedes regresar a la configuración predeterminada.

Los mensajes entrantes deben tener algunos encabezados que indiquen qué reglas fueron accionadas. Se ven así:

X-Spam-Status: No, hits=3.0 required=3.5 tests=BAYES_50,USER_AGENT
	version=2.55
Normalmente estos encabezados no serán mostrados, pero cualquier cliente de correo decente tendrá una opción para mostrar todos los encabezados. En kmail esta opción es Vista-> Encabezados->Todo.

Si no ves estos encabezados cuando tienes la opción de ver todos los encabezados, echa un vistazo a "otras opciones" al final de este articulo para la opción del control de encabezados.

Viendo las coincidencias dadas arriba, el análisis bayesiano ha dado a el correo una probabilidad de 50-60% de ser correo indeseado. Tengo la suficiente confianza en el análisis bayesiano para hacer cualquier cosa con una probabilidad de 50% o más de correo indeseado, así que configuro las marcaciones para esas reglas a mi máximo actual de 3.5.

Aquí está otro que se escabullo bajo el radar.

X-Spam-Status: No, hits=1.6 required=3.5
        tests=HTML_20_30,MIME_HTML_ONLY,USER_AGENT
        version=2.55
La regla de USER_AGENT no es muy interesante. La mayoría del correo tiene un encabezado para el encabezado del agente de usuario y marca 0,001. Dejaremos eso en paz. Las otras pruebas parecen contradecirse, uno diciendo al parecer este mensaje esta todo en HTML y el otro que es HTML 20-30%. Pensaría que el 20-30% es la proporción de las etiquetas de HTML al texto, así que puede ser todo en HTML, pero no todas las etiquetas.

¿Así pues, cómo debemos mejorar nuestra marcación? HTML_20_30 coincide 6 veces en 8 meses de correo legítimo, pero coincide un tercio del correo actualmente en mi carpeta del correo indeseado, así que debe ser marcado como muy probable, pero no lo suficiente para ser definitivo por el mismo. Parece ser marcado en 1.46 el cual puede ser un poco bajo pero no esta tan mal. MIME_HTML_ONLY identifica 1 correo legítimo pero identifica el 95% de mi correo indeseado. Raramente es marcado solamente 0.1. Voy a tratarlo como casi definitivo y marcarlo en 3.0 requiriendo solamente otro 0.5 puntos para accionar la identificación en mi punto máximo de 3.5.

Otro correo electronico pudo pasar con estas identificaciones:

X-Spam-Status: No, hits=1.5 required=3.5
        tests=GET_IT_NOW,HTML_10_20
        version=2.55
Observando mi correo encuentro que HTML_10_20 identifica mucho de mi correo legitimo así como también el correo indeseado y GET_IT_NOW solamente identifica 1 correo indeseado.
$ grep HTML_10_20 ~/Mail/spamtrap | wc -l
     19
$ grep HTML_10_20 ~/Mail/inbox ~/Mail/mailing-lists | wc -l
      8
$ grep GET_IT_NOW ~/Mail/inbox ~/Mail/mailing-lists | wc -l
      0
$ grep GET_IT_NOW ~/Mail/spamtrap  | wc -l
      1
$
En este caso no puedo justificar el cambio a la marcación para cualquier regla.

Actualizar SpamAssassin a la ultima versión

Si como yo, no estás corriendo la distribución mas reciente puedes encontrar que estas un poco atrasado. Las reglas estándares están evolucionando siempre y solamente corriendo la versión mas reciente puede ayudarte a atrapar mas correo indeseado.

Mientras escribo la versión mas reciente y estable de SpamAssassin es 2.63 y 3.00 esta bajo desarrollo. La versión mas reciente puede ser descargada de http://spamassassin.apache.org/downloads.html.

Install more rulesets

Hay reglas personalilzadas disponibles en the SpamAssassin Wiki, the SpamAssassin Rules Emporium (SARE) y otros lugares.

No he instalado ninguna de estas reglas y no estoy recomendando ninguna de estas. Debes leer la documentación y evaluar cuidadosamente la que mas se ajuste a tus necesidades antes de instalar y supervisar los resultados una vez que hayan sido instaladas.

Escribir tus propias reglas

Agregar tus propias reglas de SpamAssassin es probable que sea de poco interés pero creo que para algunos de nuestros lectores será de interés. Si notas un patrón en tu correo indeseado y no parece haber una regla para este terminas siendo curioso entonces lee "Una guía sencilla para escribir tus propias reglas", por Matt Kettler.

Otras Opciones

Así como el ajuste de marcación, hay una gama de opciones con las cuales puedes modificar varios aspectos del comportamiento de SpamAssassin. Aquí están algunas de las descripciones de la documentación de algunas que considero útil.
    rewrite_subject { 0 | 1 } (Predeterminado: 0)
        Por defecto, las líneas del asunto de correo indeseado sospechoso no serán marcadas.
        Esto puede ser habilitado aquí.

    always_add_headers { 0 | 1 } (Predeterminado: 1)
        Por defecto, X-Spam-Status, X-Spam-Checker-Version, (y opcionalmente X-Spam-Level)
        será agregado a todos los mensajes analizados por SpamAssassin.
        Si no deseas agregar los encabezados a ningún correo indeseado, configura este valor a 0.
        Observa también el always_add_report.

    always_add_report { 0 | 1 } (Predeterminado: 0)
        Por defecto, el correo marcado como correo indeseado incluye un reporte,
        ya sea en los encabezados o en un archivo adjunto (reporte seguro).  Si
        configuras esta opción a 1, el reporte será incluido en el encabezado del
        X-Spam-Report, incluso si el mensaje no se marca con etiqueta como correo
        indeseado.  Observa que el texto del reporte siempre informa que el correo es
        indeseado, puesto que normalmente el reporte se agrega solamente si el correo es
        indeseado.

        Esto puede ser útil si deseas saber qué reglas accionó el correo, y porqué no
        fue marcado con la etiqueta de correo indeseado. Observa también los
        always_add_headers.

    spam_level_stars { 0 | 1 } (Predeterminado: 1)
        Por defecto, un campo del encabezado llamado "X-Spam-Level" será agregado al
        mensaje, con el valor a un número de asteriscos iguales a la marcación del
        mensaje.  Es decir para un mensaje que es marcado con 7,2 puntos:

        X-Spam-Level: *******

        Esto puede ser útil para la creación de la regla de MUA.

    spam_level_char { x (algún carácter, sin comillas) } (Predeterminado: *)
        Por defecto, el encabezado del "X-Spam-Level" utilizará ' * ' un carácter con su
        longitud igual a la marcación del mensaje.  A algunos no les gusta escaparse * s
        sin embargo, así que puedes configurar el carácter que sea con esta opción.

        Es decir, para un mensaje que se marca con 7,2 puntos con esta opción configurada a .

        X-Spam-Level: .......

Información Adicional

Para descubrir más de SpamAssassin revisa the SpamAssassin web site y FAQ.

 


[BIO]

Neil es programador, especializándose en C++ en Unix y Linux. Tiene títulos en informática y Next Generation Computing.

Neil ha trabajado en una amplia gama de sistemas desde el sistema de control para la red de suministro de gas británica hasta los servidores de video para un servicio bajo petición de Home Choice. Inicio programando computadoras en 1980 con su clases de estudios generales en la escuela, que fue permitido el acceso a una macrocomputadora a el instituto nacional de oceanografía, programada en FORTRAN con tarjetas perforadas.

Un titulo de Informática que siguió en la universidad Queen Mary College, Londres, después Neil trabajado para Lógica por 3 años antes de tomar una Maestría en la New Generation Computing (Nueva Generación de Computo) en la universidad de Exeter.

Los siguientes 5 años Neil vio la investigación de algoritmos paralelos en la Royal Signals and Radar Establishment, inicialmente en transputers y en SPARC posteriormente sistemas basados en paralelo. Una vez que dejo RSRE, Neil ha trabajado sobre todo independiente en las alimentaciones financieras de datos, servidores de video y proxies escáners de virus.

Neil utilizó por primera vez Unix en la universidad en 1982 y comenzó a trabajar en Linux en 1996.

En la fecha de mayo del 2004, Neil está trabajando para Wirefast a compañía de mensajería global.

Fuera del computo, Neil está en el deporte del motor, particularmente fórmula 1, World Rally Championship y el British Touring Car Championship. El no compite. Si vieras a Neil manejando entenderías porque.

Copyright © 2004, Neil Youngman. Publicado bajo los términos de la Open Publication License

Publicado en el número 105 de Linux Gazette, Agosto 2004