Se llama spam o correo basura a los mensajes no solicitados, no deseados o de remitente desconocido, habitualmente de tipo publicitario, enviados en grandes cantidades (incluso masivas) que perjudican de alguna o varias maneras al receptor.
El spam se puede convertir en una incidencia de seguridad por varias razones:
- ocupa espacio en las bandejas de entrada de los receptores. En los casos de cuentas con tamaño limitado esto es un problema.
- en sistemas vulnerables, el spam suele llegar también acompañado de scripts perniciosos, a ejecutar en el sistema receptor, o un link engañoso para infectar la máquina cliente.
- también puede incluir información engañosa con la cual realizar un robo de información confidencial, engañando al usuario incauto
Sin embargo, los servidores de correo también cuentan con protección extra ante esta problemática. En nuestro caso, vamos a configurar Spambayes como detector de spam. Existen muchos otros programas que realizan funciones similares, el más famoso es Spamassasin. Sin embargo en este tutorial nos enfocaremos en Spambayes.
Instalación
Spambayes se puede descargar desde su sitio oficial, o puede instalarse con la distribución. En Debian el paquete se llama spambayes.
Configuración
Spambayes es una serie de scripts en Python que utilizan algoritmos de probabilidad para clasificar el correo, si es spam (correo no deseado), ham (correo seguro) o inseguro (no se sabe si es o no spam). Debe entrenarse constantemente la red bayesiana en la que se basa el software para refinar cada vez más su comportamiento.
En la sección del MDA (Procmail) ya creamos los subdirectorios necesarios para que funcione Spambayes, así que continuaremos con la configuración. Como parte de la configuración, es necesario configurar Spambayes, pero también Procmail para que sepa dónde colocar los correos identificados, y además mutt para agregar unas cuantas utilidades que pueden servir para tratar con los distintos tipos de mensajes.
1) Spambayes
- El subdirectorio ~/Mail contendrá nuestro correo seguro.
- El subdirectorio ~/.CaughtSpam contendrá el correo que Procmail defina como Spam de acuerdo a lo que Spambayes le indique.
- El subdirectorio ~/.Unsure contendrá correo que Spambayes no sepa clasificar.
- Para propósitos de entrenamiento, en ~/Mail/.MissedHam y ~/Mail/.MissedSpam iremos colocando correos que lleguen a las bandejas equivocadas, de forma que a la siguiente ronda de entrenamiento de Spambayes, sepa en adelante como clasificar dichos correos.
El script de entrenamiento es el siguiente: ~/Mail/train_spambayes
#!/bin/sh
# Script to copy mail missed spam and ham into correct folders
# and run sb_mboxtrain.py to train spambayes
# Training will be done only on missed spam and ham
# Files we saved or bounced may be in the new directory
# We want them in cur for training
mv /home/usuario/Mail/.MissedSpam/new/* \
/home/usuario/Mail/.MissedSpam/cur 2>/dev/null
mv /home/usuario/Mail/.MissedHam/new/* \
/home/usuario/Mail/.MissedHam/cur 2>/dev/null
/usr/bin/sb_mboxtrain.py -d /home/usuario/.hammie.db \
-g /home/usuario/Mail/.MissedHam \
-s /home/usuario/Mail/.MissedSpam
Obviamente, hay que editarlo según la cuenta de usuario y directorios usados en el servidor. Este script debe ser ejecutable:Además hay que crear la base de datos en donde Spambayes se entrenará:$ chmod +x ~/Mail/train_spambayes
lo cual creará el archivo .hammie.db$ /usr/bin/sb_filter.py -d $HOME/.hammie.db -n
Por último, será útil que el servidor se dedique automáticamente a entrenar la red bayesiana cada cierto tiempo sin intervención del usuario, para lo que creamos un cronjob con
y colocamos el cronjob:$ crontab -e
que entrenará a las 3:21am de todos los días.21 3 * * * ~/Mail/train_spambayes
2) ProcmailAhora hay que decirle a Procmail que, dependiendo lo que diga la base de datos con la red bayesiana entrenada, clasifique los correos entrantes en los subdirectorios que creamos previamente. Editar .procmailrc para que quede así (editarlo para que coincida con los directorios y usuario en el servidor):
SHELL=/bin/sh
MAILDIR=$HOME/Mail
DEFAULT=$HOME/Mail/
CAUGHT_SPAM=$MAILDIR/.CaughtSpam/
UNSURE=$MAILDIR/.Unsure/
#Spambayes process
:0fw:hamlock
| /usr/bin/sb_filter.py -d /home/usuario/.hammie.db
:0
* ^X-Spambayes-Classification: spam
${CAUGHT_SPAM}
:0
* ^X-Spambayes-Classification: unsure
${UNSURE}
# Catches everything else.
# Anything left over goes into the DEFAULT folder
:0:
${DEFAULT}
Lo que hicimos fue decirle a Procmail que con el script sb_filter.py clasifique el correo, y lo mande a los directorios de CaughtSpam, Unsure o el Default (~/Mail).3) muttPor último, si observamos la bandeja de entrada con mutt, es probable que encontremos correo que deseemos clasificar como Spam. La opción manual sería mover manualmente estos correos a los directorios creados, a través de los comandos de mutt.
Sin embargo, esto no es funcional, por lo que editaremos el archivo .muttrc para agregar un poco de automatización que facilite este proceso.Editarlo para que quede así:
set editor="emacs" set folder = /home/usuario/Mail set signature="~/.signature" my_hdr From: Nombre Usuario # Don't ask to move read message set move=no # Header control h displays header when in pager # I want to only see the unignored by default ignore * # weed out all headers unignored date from: to cc subject organization # now show me these... # Setting these macros is going to save us all of that time I was # talking about. Now instead of having to type all of those # characters to move the mail around we will can just tag the messages # and, for the instance of spam in your inbox, hit 'S'. # Move mail to correct directories macro index S ";s~/Mail/.MissedSpam\r\r$\r" macro pager S ";s~/Mail/.MissedSpam\r\r$\r" macro index H ";C~/Mail/.MissedHam\r\r;s~/Mail\r\r$\r" macro pager H ";C~/Mail/.MissedHam\r\r;s~/Mail\r\r$\r" macro index M ";s~/Mail/\r" macro pager M ";s~/Mail/\r" # This is how we are going to move around to the different # mailboxes. Hitting 'alt-1' will take us to our inbox # 'alt-2' and we are looking at the mail Spambayes classified # as spam. etc. # The extra mailboxes I have in here are for mailing lists I am on. # I will show the procmail recipe that automatically puts # the mailing list mail into its correct mailbox further down. # Move to mailboxes quickly macro index1 "c~/Maildir\r" macro pager1 "c~/Maildir\r" macro index2 "c~/Maildir/.CaughtSpam\r" macro pager2 "c~/Maildir/.CaughtSpam\r" macro index3 "c~/Maildir/.Unsure\r" macro pager3 "c~/Maildir/.Unsure\r" # Training Maildirs for Spam and Ham macro index8 "c~/Maildir/.MissedSpam\r" macro pager8 "c~/Maildir/.MissedSpam\r" macro index9 "c~/Maildir/.MissedHam\r" macro pager9 "c~/Maildir/.MissedHam\r" # Setting these colors makes it easy to tell which emails # Spambayes has missed. # Turn spam red and unsure green color index red default "~h '^X-Spambayes-Classification: spam'" color index green default "~h '^X-Spambayes-Classification: unsure'" # Turn gmail mail brightblue # (My regular expression is not correct here. I think that it # is looking anywhere in the header for my gmail address # instead of what I wanted.. Just in the 'To:'. # It still works for the most part) color index brightblue default "~h '(^)*my_name@gmail.com' # Lets set more colors to make things look beautiful. Judging by # my title for this section I must have had bad feelings towards # colors when I added this. #Color crap color index brightwhite default ~N # color for new messages color status black yellow color attachment brightyellow default # file attachments color search brightred default # search matches color quoted brightyellow default # quoted text in replies color quoted1 magenta default # quoted text in replies color body cyan default "((ftp|http|https)://|news:)[^ >)\"\t]+" # URLs color body cyan default "[-a-z_0-9.+]+@[-a-z_0-9.]+" # email
Si estamos ante un mensaje que debió clasificarse como Spam y no lo fue (en la bandeja de entrada o en Unsure), tecleando 'S' se mueve a los directorios correctos (CaughtSpam y MissedSpam) en espera del siguiente entrenamiento. Si estamos ante un mensaje que debió clasificarse como Ham y no lo fue (en la bandeja de Spam o en Unsure), tecleando 'H' se mueve a los directorios correcots (bandeja de entrada y MissedHam) en espera del siguiente entrenamiento. Podemos seleccionar varios mensajes a la vez con el comando 't'. Esc + 1 nos lleva directamente a la bandeja de entrada. Esc + 2 al spam Esc + 3 a Unsure Esc + 8 a MissedSpam Esc + 9 a MissedHam Además, dependiendo el tipo de correo, mutt utilizará colores (si la consola los soporta) para mostrar los distintos tipos de mensajes.
Levantar un servidor de correos que pueda usar en una organización, a través de una LAN o internet, es cuestión que debe configurarse en Postfix. La documentación del sitio oficial de este programa ofrece varios escenarios para lograr distintas configuraciones deseadas. Levantar servidores POP e IMAP, con Courier por ejemplo, para poder leer los correos que lleguen a la cuenta en el servidor a través de internet, con Squirrelmail, con un dispositivo móvil, con un cliente convencional en otra máquina, o con Fetchmail en otra máquina cliente. Ampliar el funcionamiento de Spambayes para que clasifique correos con base en criterios como el uso de mailing lists o aquellos que pertenezcan a mis búsquedas de empleo, por ejemplo.
Excelente tutorial incluso para un usuario inexperto como yo.
ResponderEliminarPero me he encontrado que no consigo que los mensajes se almacenen en el servidor (Carpeta Sent del cliente de correo Evolution). Se almacenan en Correo enviado (local).
Mi objetivo es centralizar la copia de seguridad de 4 correos en el servidor, tanto los recibidos como los enviados.
De antemano agradezco tus comentarios.
mmmm me suena a que la situacion que enfrentas es particular del cliente Evolution en sí.
ResponderEliminarTen en cuenta que al usar un cliente de correo (MUA), este puede tener sus propias particularidades de configuracion. En este post yo solo me enfoque en mutt por ser sencillo de configurar, pero es modo texto. Hay que ver si es posible configurar Evolution para esto mismo. Ademas algunos clientes no permiten conectarse directamente al servidor como mutt, sino que debes tener IMAP o POP levantados en el servidor, lo cual ya hace diferente la cuestion de las carpetas que en si postfix utiliza para almacenar correos en el disco...
Yo es que uso gmail por IMAP y he observado que al enviar (tanto con Thunderbird como con Evolution) deja una copia de los enviados en una carpeta Enviados en el servidor.
ResponderEliminarMe gustaría que la solución no fuera usuario dependiente, es decir, que no dependiera de la configuración del lector de correo. Y así asegurar que disponemos de copia de todos los correos enviados.
eso, definitivamente, cae fuera de los objetivos del post: estamos configurando un servidor de correo, es decir toda la infraestructura del sistema, desde cero. La situacion que planteas esta relacionada con tus configuraciones del MUA asi como de Gmail, que funge como el 'postfix' que nosotros configuramos aqui
ResponderEliminarBueno, de todas formas muchas gracias por tu excelente tutorial.
ResponderEliminarSeguiré buscando a ver si consigo encontrar lo que pretendo (si es posible).
una nota mas.
ResponderEliminarEl formato en que estamos configurando el correo electronico para que se almacene en archivos independientes dentro de subdirectorios independientes, en lugar de todo sobre un archivo (mail) se conoce como
maildir (http://es.wikipedia.org/wiki/Maildir) , el cual es soportado por otros clientes demas de mutt. El articulo en wikipedia menciona algunos, y el articulo en ingles tiene mas aun...
saludos
Gracias por el tutorial. Estaba pensando en utilizar mutt para descargar mis mensajes automaticamente. Si entendi bien por lo que he ido leyendo, para guardar un mensaje hay que pulsar la tecla "s". ¿Crees que seria posible que mutt guardase mis mensajes automaticamente, sin necesidad de que yo pulse nada, es decir, que compruebe nuevos mensajes y descargue directamente a formato maildir?
Eliminaren realidad mutt no te permite descargar nada, mutt solo es un cliente , el mua. Quien descarga los correos en este caso es fetchmail, que es un cliente de los protocolos IMAP o POP (dependiendo tu servicio de correo). Lo que quieres de guardarlos automaticamente se hace ya desde que configuras el MTA (Postfix en este caso) usando algun MDA como procmail (que es el que uso en estos ejemplos).
EliminarDe nuevo, mutt solo va a leer lo que ya tengas en tu maildir, nada mas, no va a obtener ningun correo ni guardarlo en ningun lado.
Claro, ya con mutt puedes hacer lo que sea y guardarlos tu mismo en otros lados.
Lo que quieres se hace con el MTA en automatico, o con procmail para mas personalizacion...