Usando Bogofilter con mutt
Thursday, 10 December 1389
Inicio | Documentacion | Software | Acerca de

Documentación y Software
Inicio
Documentacion
Software
Acerca de


Si el SPAM se ha convertido en un suplicio para ti, este pequeño articulo te puede ayudar. Veamos cómo podemos configurar bogofilter+mutt para que el SPAM desaparezca de nuestras vidas ;)

Las páginas web de los programas que vamos a explicar son las siguientes:

Bogofilter: http://bogofilter.sourceforge.net
Procmail: http://www.procmail.org
Mutt: http://www.mutt.org

Doy por supuesto que tu cliente de correo es el mutt, y que ya tienes el procmail funcionando. Cualquier otra cosa se sale fuera del objetivo de este documento.

Bogofilter es un sistema de detección de SPAM, basado en algoritmos bayesianos. Los algoritmos bayesianos se basan en unas reglas que identifican el SPAM según las palabras (o "tokens") que aparecen en los mensajes. Estas reglas son específicas y las define el usuario final. Es decir, que cada uno puede "entrenar" a su bogofilter para que sea más efectivo en la detección.

Para realizar el entrenamiento del bogofilter, antes de ponerlo a funcionar, debemos enseñarle cuales son los mensajes que nosotros consideramos SPAM y cuales no. Para ello debemos disponer de una base de mensajes de cada tipo. La base de mensajes de SPAM podemos cojerla por ejemplo de http://www.spamarchive.org y la base de mensajes buenos podemos pillarla de nuestros mensajes personales, por ejemplo.

1.- Instalación

Para instalar el bogofilter tan solo tendremos que ejecutar este comando como root:

# apt-get install bogofilter


La versión que me instala es la 0.14.2-1

2.- Entrenamiento

2.1.- Mensajes válidos

Para que bogofilter sepa cuales son los mensajes válidos ejecutaremos como usuario la orden

$ bogofilter -n < mails_validos


"mails_validos" es una base de mensajes en formato "mbox". Si ya estais usando "mutt" como lector de correo, los mensajes están almacenados en el directorio que especifique la variable "set folder" de vuestro .muttrc. En mi caso será ~/mail. Tambien puedes incluir los mensajes que tengas en /var/mail/, en caso de que tengas alguno.

2.2.- Mensajes SPAM

Ahora vamos a enseñarle cuales son los mensajes de SPAM. Para ello necesitamos uno o varios de los ficheros que bajamos de spamarchive.org, cuantos más mejor. Como usuario, ejecutaremos la orden:

$ zcat fichero_spams.txt.gz | bogofilter -s


Si da algun error de "flex scanner" posiblemente es que el fichero esté en mal estado. A mi me ha pasado esto haciendo un download con el prozilla y con el links. Con el wget o con el comando ftp me ha funcionado bien.

2.3.- Comprobación

Una vez que hemos "alimentado" al bogofilter, veremos que se ha creado un directorio ~/.bogofilter, con el fichero que contiene las palabras o "tokens".

Para ver la cantidad de mensajes que hay almacenados en la base de datos podemos ejecutar el siguiente comando:

$ bogoutil -w ~/.bogofilter .MSG_COUNT


3.- Configurando procmail

Pasamos ahora a configurar el procmail. Procmail es un sistema de procesamiento de mensajes. Podriamos decir que procmail coge los mensajes del servidor SMTP, los procesa, y los deja disponibles para el lector de correo, en nuestro caso, el mutt.

Añadiremos estas reglas las primeras, antes de cualquier otra:

:0fw
| bogofilter -f -p -u -l -e
:0e
{
EXITCODE=75
HOST
}
:0c:
* ^X-Bogosity: (Spam|Yes)
spams
:0:
* ^X-Spam-Status: Yes
spams

Con estas reglas lo que hacemos es pasar todos los mensajes a través del bogofilter, y si éste detecta que son SPAM, los dejará en una carpeta llamada "spams".

4.- Configurando mutt

La configuración de mutt es muy sencilla. Tan solo efectuaremos unos pequeños cambios para que desde el mutt podamos seguir enseñando a bogofilter dia tras dia. Para ello solo tendremos que añadir estas lineas al fichero ~/.muttrc

(aqui aparecen cortadas, pero todas las lineas deben empezar con macro)

set pipe_decode=no
macro index s "<enter-command>unset wait_key\n<pipe-entry>bogofilter -S -n\n<enter-command>set wait_key\n<save-entry>"
macro pager s "<enter-command>unset wait_key\n<pipe-entry>bogofilter -S -n\n<enter-command>set wait_key\n<save-entry>"
macro index r "<enter-command>unset wait_key\n<pipe-entry>bogofilter -S -n\n<enter-command>set wait_key\n<reply>"
macro pager r "<enter-command>unset wait_key\n<pipe-entry>bogofilter -S -n\n<enter-command>set wait_key\n<reply>"
macro index g "<enter-command>unset wait_key\n<pipe-entry>bogofilter -S -n\n<enter-command>set wait_key\n<group-reply>"
macro pager g "<enter-command>unset wait_key\n<pipe-entry>bogofilter -S -n\n<enter-command>set wait_key\n<group-reply>"
macro index l "<enter-command>unset wait_key\n<pipe-entry>bogofilter -S -n\n<enter-command>set wait_key\n<list-reply>"
macro pager l "<enter-command>unset wait_key\n<pipe-entry>bogofilter -S -n\n<enter-command>set wait_key\n<list-reply>"
macro index X "<enter-command>unset wait_key\n<pipe-entry>bogofilter -N -s\n<enter-command>set wait_key\n<delete-message>"
macro pager X "<enter-command>unset wait_key\n<pipe-entry>bogofilter -N -s\n<enter-command>set wait_key\n<delete-message>"

Paso a explicar qué hacen estas lineas.

Cuando estás leyendo un mensaje, y quieres responder, pulsas la "r" si el mensaje es para el remitente, la "g" para cuando el mensaje tenia varios destinatarios (Cc:) y quieres responder a todos, o la "l" si quieres responder a una lista de correo. Cada vez que pulses una tecla de estas, estarás pasando el mensaje a través del bogofilter, y le estarás especificando que el mensaje debe ser incluido en la lista de palabras aceptadas. La "s" sirve para cuando quieres guardar (mover) el mensaje a otro buzón (esto por ejemplo es cuando bogofilter pone en el buzón "spams" un mensaje que no lo era). Por último, la "X" (mayúscula) especifica al bogofilter que el mensaje es SPAM, así que analiza el mensaje, guarda los "tokens" y por último el mutt marca el mensaje para borrarlo.

(c) 2003 Paco Brufal
  Last modified: Thu, 22 December 2016  Contenidos © ServiTux Servicios Informáticos