Antiguo y abandonado blog de Ricardo Galli :-(

Thursday 15/9/2005

Imap, courier y limpiar los spams

Filed under: Trucos — gallir @ 3:09

Ayer al final hice una de las cosas que tenía pendiente, migrar todo el sistema de correo de este servidor a Maildir e instalar un servidor imap que dé la talla en estos tiempos. Elegí el courier después de liarme con el cyrus. Ahora tengo todos mis mensajes centralizados en el servidor (antes iba vía pop en casa y gmail fuera en el trabajo, tengo unas reglas del procmail y forwarding en gmail para mantenerlos sincronizados). Pero además aproveché y automaticé el sistema de limpiar los spams y entrenar al Spamassassin.

Cree tres carpetas desde el imap:

Carpetas spams

  1. La principal, Spam, para mover allí manualmente los spams que no fueron filtrados. Antes la tenía en casa y tenía que copiarlas antes a este servidor y luego ejecutar el sa-learn. Esta carpeta se almacena en el directorio ~/Maildir/.Spam

  2. Una subcarpeta llamada “Alto”, donde el procmail deja los spams con un puntaje elevado. Su directorio es el ~/Maildir/.Spam.Alto.

  3. Otra subcarpeta llamada “Borde” que son las que tienen un puntaje bajo y prefiero mirarlas antes. Su directorio es el ~/Maildir/.Spam.Borde.

Como está todo en el servidor puedo hacer la clasificación desde cualquier ordenador y programa con acceso imap, incluso desde el mutt, que con unos macros lo dejé muy cómodo.

Lo que quería hacer es un pequeño script para poner en el crontab que cada X horas (ahora lo hago cada hora) entrenase al Spamassassin con los mensajes en Spam y en Alto y luego los borrase. Para los mensajes en Bajo quería que sólo los haga si los ficheros tienen más de 7 días. El script que me hace eso es:

#! /bin/bash

DIRS=".Spam .Spam.Alto"
BORDER=".Spam.Borde"

cd $HOME/Maildir
for maildir in $DIRS
do
        for subdir in cur new tmp
        do
                sa-learn --no-sync --spam $maildir/$subdir
                rm -f $maildir/$subdir/*
        done
done

for maildir in $BORDER
do
        for subdir in cur new tmp
        do
                files=`find $maildir/$subdir -type f -mtime +7`
                for file in $files
                do
                        sa-learn --no-sync --spam $file
                        rm -f $file
                done
        done
done

sa-learn --sync

Nota: las opciones --no-sync y el --sync al final son sólo para acelerar un poco al sa-learn. Creo que es autoexplicativa, se trata de no forzar la escritura de la base de datos y hacerla sólo una vez al final.

Es una tontería, pero me facilitó muchísimo el tema de mantener al Spamassassin bien entrenado y no guardar basura por mucho tiempo, como me pasaba antes.

Por si a alguien le interesa, el umbral que le puse al Spamassassin es 2.1, me funciona perfecto, hace meses que no veo un falso positivo y muy pocos falsos negativos (una cada dos o tres días).

Las reglas del procmail que uso para clasificarlos son:

:0
* ^X-Spam-Flag: YES
{

        :0
        * ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*
        /dev/null

        :0:
        * ^X-Spam-Level: \*\*\*\*\*\*
        .Spam.Alto/

        :0:
        * ^X-Spam-Level: \*\*
        .Spam.Borde/
}

Veréis que los que tienen puntaje muy elevado, 10 o más, los envío directamente al agujero negro. Los de 6 o más como “Alto” y los restantes a “Borde”.

PS: Kiko Piris escribió hace tiempo y en algún lugar un script para hacer algo similar pero a nivel corpotarivo. Lo usa en su empresa. No sé cómo recuperar el URL, si alguien lo sabe…

8 Comments

  1. Lo del script lo arreglé con varias líneas en el crontab, una para cada directorio (yo sólo uso falsos positivos y falsos negativos). Son muy sencillas (ahora no las tengo delante) y si esta tarde no te las ha puesto nadie te las pego.

    En cuento al servidor SMTP, me cansé de courier por el problema de los namespaces. Los programadores dicen que cumplen el estándar, pero el caso es que no encontré ningún MUA que te coja el .INBOX como prefijo y cada vez que configuras la cuenta se lo tienes que poner.

    Así que cambié a dovecot-imapd. Pruébalo, está muy muy bien y lleva “de serie” la posiblidad de autenticar LDAP, SQL… etc. La Debian lo deja bastante bien asi como lo pone por defecto, sólo hay que indicarle la ruta al Maildir en el fichero de configuración.

    Si lo tienes bien configurado en courier, no tendrás que tocar casi nada.

    Ah! Y si pones webmail, échale un ojo a ilohamail, sencillo rápido y completito :-)

    Comment by Paco Ros — Thursday 15/9/2005 @ 10:55

  2. Esa solución la llevo usando ya algún tiempo, más que nada porque en casa uso un cliente, y desde otro lado el mutt. Lo que buscaba era que usara lo que usara siempre fuera igual, vamos que los correos estuviesen dónde debían.

    A mayores me he instalado un ldap para los contactos.

    Además ahora con el antispam de gmail, pues tengo el doble de antispam. Yo al final solo ejecuto una vez el sa-learn, y es cuando inicio la máquina.

    Taluek!

    Comment by Teleyinex — Thursday 15/9/2005 @ 11:55

  3. Vaya, eso se parece bastante a lo que uso en casa :-) . Solo comentar que ahora que tienes maildirs, unison funciona muy bien por si quieres/necesitas tener el correo repartido entre varios ordenadores y bajar el correo indistintamente en cualquiera de ellos :P

    (Y así te evitas problemas de estos :-P)

    Comment by kyle — Thursday 15/9/2005 @ 12:33

  4. Había pensado lo del unison, de hecho lo uso para tener una copia de seguridad, pero desde casa verifico el correo cada dos minutos (sí, además de que gran parte de mi trabajo lo hago vía email, soy un un adicto) y el unison/rsync no sirve para eso: consume mucho ancho de banda y CPU (demasiada para ejecutarlo tan frecuentemente) comparado con el imap.

    Comment by gallir — Thursday 15/9/2005 @ 14:56

  5. Paco… gracias, instalé el ilohamail y parece genial, muy rápido además.

    El dovecot no me acabó de ir bien, hice lo que explica en la migración, el kmail me funcionó directamente pero el thunderbird no ve las subcarpetas ni las subscripciones. Ya seguiré probando.

    Comment by gallir — Thursday 15/9/2005 @ 15:39

  6. si si… yo hablaba de a parte de sincronizar los emails de vez en cuando en tus diferentes máquinas, acceder a ellos via imap a localhost - yo hago eso siempre porque al final acabo usando 3 ó 4 clientes de correo distintos y lo del imap me la pone dura ® :-P

    Comment by kyle — Friday 16/9/2005 @ 1:39

  7. > lo del imap me la pone dura

    Joooooooder, se nota que eres joven y soltero :-P

    Comment by gallir — Friday 16/9/2005 @ 1:40

  8. Buenas,

    “por alusiones” voy a comentar lo del script para hacer esto “a nivel corporativo” :)

    De hecho no llegué ha hacer ningún script, simplemente monté un par de cuentas imap en el servidor del trabajo y le dije a un par de usuarios “de fiar” que metieran en cada una de ellas los falsos negativos y los falsos positivos.

    Aunque el spamassassin és tan cojonudo que me podría haber ahorrado perfectamente la de falsos positivos (para uno o dos que han llegado a poner…).

    Cada 2 ó 3 dias le pego un repaso a la de falsos negativos (a veces, equivocadamente, meten mensajes legítimos que a ellos les parecen spam). Quito los que “sobran” y le paso el sa-learn al directorio del maildir directamente.

    Esto es todo.

    El spam que es clasificado adecuadamente por el spamassassin no suelo retroalimentarlo nunca con el sa-learn. Confio en que el autolearn haga su función. A nivel corporativo pasa tanto correo por el servidor que la bd. bayesiana “se mantiene sola”.

    Para esto último ayuda mucho “filtrar” también el correo saliente de la empresa. Porque “no sólo de spam vive la bd. bayesiana del spamassassin” :).

    Comment by Kiko Piris — Sunday 18/9/2005 @ 23:51

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress