AntiSPAM con SpamAssassin : Mover mensajes a la carpeta de correo basura

Hasta ahora tenemos una forma de marcar los mensajes dando al usuario la responsabilidad de eliminar los mensajes de su bandeja de entrada. Pero algunos usuarios no quieren verlos, no quieren crear filtros en el cliente de correo (o no pueden hacerlo), entonces ¿qué podemos hacer? Vamos a crear una carpeta IMAP llamada Junk para el correo basura. Si nuestro usuario es amigo@mylittlecloud.com haremos lo siguiente (recordemos que el usuario de administración de Cyrus es cloud):

$ cyradm -u cloud localhost
localhost> cm user/friend/Junk@mylittlecloud.com
localhost> mboxcfg user/friend/Junk@mylittlecloud.com expire 20
localhost> info user/friend/Junk@mylittlecloud.com
{user/friend/Junk@mylittlecloud.com}:
  duplicatedeliver: false
  expire: 20
  lastpop:  
  lastupdate: 23-Jun-2013 00:32:40 +0000
  partition: default
  pop3newuidl: true
  sharedseen: false
  size: 0

Ahora estamos haciendo que automáticamente caduquen los correos basura de la carpeta a los 20 días, por lo tanto el usuario tiene tiempo para ver de vez en cuando el SPAM y vigilar si hay falsos positivos.
Ahora tenemos que mover todos los correos basura a esa carpeta, para ello, vamos a crear un script de sieve, en el que vigilemos el asunto del mensaje, y si detectamos que este es *****SPAM***** lo movamos a la carpeta Junk.
El script llamado moveToJunk.sieve contendrá lo siguiente:

require ["fileinto", "reject"];

if header :matches "Subject" ["*****SPAM*****"] {
fileinto "INBOX/Junk";
}
else {
keep;
}

Ahora nos identificamos en sieveshell como el usuario en el que queremos ejecutar los scripts, pero desde nuestra cuenta de administración (normalmente no conocemos las contraseñas de los usuarios). Ahí instalamos el script y lo activamos de la siguiente manera:
<blockquote><pre>$ sieveshell --user=friend@mylittlecloud.com --realm cloud localhost
> put moveToJunk.sieve
> activate moveToJunk.sieve
> ls    
moveToJunk.sieve
> quit</pre></blockquote>

Y ya lo tenemos, ahora tenemos que hacerlo en todos los usuarios de nuestro sistema. El siguiente script puede ayudar:

USERS=`cat /etc/postfix/vmailbox | cut -d' ' -f1`
for user in $USERS
do
     NAME=`echo $user | cut -d'@' -f1`
     DOMAIN=`echo $user | cut -d'@' -f2`
     echo "NAME: $NAME ; DOMAIN: $DOMAIN"
done

Con este script cogemos la lista de usuarios de /etc/postfix/vmailbox y extraemos el nombre y el dominio de cada uno de los usuarios, por lo tanto cuando creemos la carpeta Junk, esta tendrá la forma:

user/$NAME/Junk@$DOMAIN

Y la instalación del script de sieve es la misma para todos los usuarios. El siguiente script no está muy optimizado y puede tardar, pero hace su trabajo con todos los usuarios que tenemos en el sistema:

CYRADM_PASSWORD="XXXXX"
USERS=`cat /etc/postfix/vmailbox | cut -d' ' -f1`
for user in $USERS
do
     NAME=`echo $user | cut -d'@' -f1`
     DOMAIN=`echo $user | cut -d'@' -f2`
     echo "cm user/$NAME/Junk@DOMAIN" | cyradm -u cloud -w $CYRADM_PASSWORD localhost
     echo -e "put moveToJunk.sieve\nactivate moveToJunk.sieve" | sieveshell --user=$user --realm cloud --password=$CYRADM_PASSWORD localhost
done

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *