Tras leer la documentación oficial y varias guías de como hacerlo, vamos a explicar nuestra experiencia de cómo instalar el antispam SpamAssassin sobre CentOS 6.0 (válido también para el resto de distribuciones) utilizando el servicio de correo Postfix, consiguiendo unos muy buenos resultados para mantenernos libres de spam en nuestros correos.
Esta guía está basada en otras (indicadas como referencias) y extendida y más ampliamente explicada en algunos conceptos en los que hemos tenido problemas.
Instalar Perl
En primer lugar instalaremos Perl si no lo tenemos instalado:
yum install perl yum install perl-Mail-DKIM.noarch yum install spamassassin
En este punto, en nuestro caso nos hemos encontrado con alguna dificultad ya que las librerías de SpamAssassin requerían Perl 5.8.8 y CentOS 6.0 nos acababa de instalar Perl 6.0, por lo que existirán conflictos en paquetes con dependencias sin resolver.
error: Failed dependencies: perl(:MODULE_COMPAT_5.8.8)Tenemos dos opciones para solucionarlo:
- Actualizar a CentOS 6.2. Si nuestro servidor no está en producción o estamos seguros de lo que hacemos, tal vez sea la mejor opción.
- Instalar RPMs de la versión 6.2. Hemos elegido esta opción ya que el servidor en concreto sobre el que lo hemos hecho ya está en producción y nos provocaba bastante incertidumbre el hecho de qué pasará tras actualizar. Tras buscar en los repositorios oficiales de CentOS hemos elegido uno de ellos como éste ftp://centos.arcticnetwork.ca/pub/centos/6.2/os/x86_64/Packages/ y lo hemos instalado a la vieja usanza, con rpm -Uvh rutadelpaquete.rpm todos los paquetes que están dentro de los paquetes requeridos
Configurando SpamAssassin
useradd -d /home/spamfilter -s /bin/false spamfilter chmod 766 /home/spamfilter
nano /etc/mail/spamassassin/local.cfy pegar
# Puntuación para ser marcado spam required_hits 5.0 # Texto que se antepondrá al asunto de los emails que sean spam rewrite_header Subject [*****SPAM*****] # Encapsular spam en un adjunto al email de aviso report_safe 1 # Habilitar systema Bayes use_bayes 1 # Autoaprendizaje bayes_auto_learn 1 bayes_path /home/spamfilter/ bayes_file_mode 0666 # Comprobaciones de spam skip_rbl_checks 0 use_razor2 1 use_dcc 1 use_pyzor 1
Comprobar si la configuración es correcta:
spamassassin --lint
Posiblemente nos avise de algunos warnings referentes a las comprobaciones de spam, pero en principio no tiene mayor importancia.
Configurando Postfix
Editar /etc/postfix/master.cf. Reemplazaremos la directiva smtp por lo siguientesmtp inet n - n - - smtpd -o content_filter=spamfilter:dummy spamfilter unix - n n - - pipe flags=Rq user=spamfilter argv=/usr/local/bin/spamfilter.sh -f ${sender} -- ${recipient}
Editar /etc/postfix/main.cf
strict_rfc821_envelopes = yes disable_vrfy_command = yes smtpd_helo_required = yes smtpd_client_restrictions = smtpd_helo_restrictions = smtpd_sender_restrictions = smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_invalid_hostname, reject_unauth_pipelining, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_non_fqdn_recipient, reject_unknown_recipient_domain, check_client_access hash:$config_directory/access_client, check_sender_access hash:$config_directory/access_sender permit
Conectando Postfix a SpamAssassin
locate spamc /usr/bin/spamc locate sendmail /usr/sbin/sendmail
Crear el siguiente script shell
nano /usr/local/bin/spamfilter.sh
y pegar
#!/bin/bash /usr/bin/spamc | /usr/sbin/sendmail -i "$@" exit $?
Debemos tener mucho cuidado con las rutas, ya que si ponemos mal las rutas los correos no llegarán o llegarán vacíos
chmod 755 /usr/local/bin/spamfilter.sh chown spamfilter:spamfilter /usr/local/bin/spamfilter.sh
Reiniciamos servicios
/etc/init.d/spamassassin start /etc/init.d/postfix restart
Actualizar spam assassin y añadirlo al inicio del arranque de Linux
Actualizaremos el servicio de cron
crontab -e
y añadiremos la siguiente línea para ejecutarse todos los viernes a las 8:01
01 8 * * 5 sa-update && service spamassassin restart
Por último lo añadimos a los scripts de inicio de CentOS
chkconfig --add spamd
Borrando el spam recibido
SpamAssassin no recomienda borrar el correo marcado spam por si ocurren falsos positivos, pero aún así vamos a filtrar los que claramente sean spam.
mkdir /var/spamchk chmod -R 777 /var/spamchk chown -R spamfilter:spamfilter /var/spamchk
Hacemos una copia de seguridad de /usr/local/bin/spamfilter.sh a simple_spamfilter.sh y editaremos el archivo poniendo
#!/bin/sh # Variables SENDMAIL="/usr/sbin/sendmail -i" EGREP=/bin/egrep TMPFILE=/tmp/spamchk.$$ SIDELINE_DIR=/var/spamchk # Puntuación mínima del correo para ser tratado como spam SPAMLIMIT=10 # Limpiamos el archivo temporal trap "rm -f $TMPFILE" 0 1 2 3 15 # Guardamos el mensaje temporalmente en $TMPFILE cat | /usr/bin/spamc -u filter | sed 's/^.$/../' > $TMPFILE # Comprobamos si el correo está marcado con un alto nivel de spam if $EGREP -q "^X-Spam-Level: *{$SPAMLIMIT,}" < $TMPFILE then # Opción 1: guardarlos en el disco duro # mv $TMPFILE $SIDELINE_DIR/`date +%Y-%m-%d_%R`-$$ # Opción 2: Envíalo a una cuenta de correo de spam para tenerlos guardados $SENDMAIL spam@xxxx.xx < $TMPFILE # Opción 3: Borra el mensaje # rm -f $TMPFILE else $SENDMAIL "$@" < $TMPFILE fi # Postfix devuelve el estado de salida de la llamada a sendmail command. exit $?
El umbral para tratar los correos de spam es la variable SPAMLIMIT. Un valor de 10 es un buen valor inicial, pero deberemos ir cambiándolo hasta afinar con el valor más correcto. Aconsejamos un valor mínimo de 5.
Desinstalando Spam Assassin
Si tenemos algún problema, podemos desinstalarlo editando /etc/postfix/master.cf reemplazando el contenido
smtp inet n - n - - smtpd -o content_filter=spamfilter:dummy spamfilter unix - n n - - pipe flags=Rq user=spamfilter argv=/usr/local/bin/spamfilter.sh -f ${sender} -- ${recipient}por
smtp inet n - n - - smtpd
después reinicia los servicios
/etc/init.d/spamassassin start /etc/init.d/postfix restart
Instalando una interfaz web para SpamAssassin: webuserprefs
El hecho de tener que aprender o estar revisando la documentación para modificar el archivo de configuración es bastante tedioso. Podemos instalar la interfaz gráfica webuserprefs (hecha en PHP) que nos ayudará en ello.
En nuestro caso crearemos desde Plesk un subdominio para ello. No es necesario, ya que podremos instalarlo en una carpeta, pero por comodidad lo hemos hecho así: webuserprefs.xxxxxxx.xxx
Borramos todo el contenido que por defecto trae Plesk y nos situaremos en el directorio objetivo para descargarnos la última versión de webuserprefs (0.6 en el momento de escribir esta guía).
Lo descomprimiremos y daremos permisos necesarios.
wget http://downloads.sourceforge.net/project/webuserprefs/webuserprefs/0.6/webuserprefs-0.6.tar.gz tar xvzf webuserprefs-0.6.tar.gz chown -R user:group *
Protegeremos el subdominio mediante "Plesk protected directories system", si no usamos Plesk deberemos usar el sistema de usuarios de Apache y htaccess.
touch $WEBUSERPREFS/user_prefs chmod 666 $WEBUSERPREFS/user_prefs cd $HOME/.spamassassin ln -s $WEBUSERPREFS/user_prefs user_prefs
Éste archivo estará protegido mediante el usuario y contraseña de htaccess y tampoco contiene información sensible, como mucho redes o dominios desde no se acepta emails.
Finalmente editaremos webuserprefs desde su archivo de configuración buscando las siguientes líneas y cambiándolas a:
// require("auth/server.php"); $user_prefs = "user_prefs"; $group_sort = "yes";
Fuentes
Este artículo es una mezcla con añadidos y modificaciones en varias partes de éste de las siguientes fuentes:
- http://www.xnote.com/howto/postfix-spamassassin.html
- http://www.akadia.com/services/postfix_spamassassin.html
- http://wiki.apache.org/spamassassin/FrequentlyAskedQuestions
- http://wiki.apache.org/spamassassin/DeletingAllMailsMarkedSpam
- http://blog.garion.org/2011/04/23/deleting-spam-with-postfix-and-spamassassin/
- http://wiki.apache.org/spamassassin/WebUserInterfaces
- http://wiki.apache.org/spamassassin/SingleUserUnixInstall#head-1dd15c06b7e645638def3d2ed2ef31557d853659
Comentarios