Archive for October, 2005

Entrenando al “Spamassassin”

Se supone que el SpamAssassin tiene un script que corre diariamente y revisa los correos enviados a las cuentas de junkmail y notjunkmail para mejorar el filtro bayes; bueno, hasta ahora no he encontrado ese script ni se donde buscarlo, así que mejor hice uno.

El primer paso es crear las cuentas de correo junkmail y notjunkmail, eso se hace con el Workgroup Manager, no necesariamente se les asigna un home folder, pero si se les da cuenta de correo, y es todo lo que hay que hacer con ese programa.

Ahora que ya existen esas cuentas, cada vez que alguien reciba un correo que se pueda considerar spam, puede redirigirlo a la cuenta junkmail. Si es el caso contrario, que se marcó como spam pero no lo es, hay que redirigirlo a la cuenta notjunkmail (ojo, los mensajes se redirigen, no se les da forward).

Ahora si, en el servidor.

Para que el SpamAssassin pueda aprender los patrones de los correos spam, el comando es el siguiente:

/usr/bin/sa-learn --spam /var/spool/imap/user/junkmail/*\.

Igualmente para que aprenda lo que no debe marcar como spam:

/usr/bin/sa-learn --ham /var/spool/imap/user/notjunkmail/*\.

Listo, ya se está entrenando al SpamAssassin.

Ahora hay que ir quitando lo que ya no se necesita para no ocupar espacio en el disco duro del servidor, para ello hay que eliminar el correo de las dos cuentas, pero para que sigan funcionando bien, también hay que actualizar los archivos de registro del administrador de correo, así que se retomará una parte de lo que se escribió el 2005-10-06.

Primero impunemente se elimina el correo:

cd /var/spool/imap/user/junkmail

/bin/rm *
cd /var/spool/imap/user/notjunkmail

/bin/rm *

Ya vacíos los directorios, hay que reconstruir los archivos necesarios:

/usr/bin/sudo -u cyrus /usr/bin/cyrus/bin/reconstruct -r user/junkmail
/usr/bin/sudo -u cyrus /usr/bin/cyrus/bin/reconstruct -r user/notjunkmail

Listo, ya se tienen las partes, ahora hay que armarlas en un script que pueda ejecutarse periodicamente, el cual puede quedar así:

#!/bin/sh

# Primero la basura
/usr/bin/sa-learn --spam /var/spool/imap/user/junkmail/*\.
/bin/rm /var/spool/imap/user/junkmail/*
/usr/bin/sudo -u cyrus /usr/bin/cyrus/bin/reconstruct -r user/junkmail

# Luego lo inofensivo
/usr/bin/sa-learn --ham /var/spool/imap/user/notjunkmail/*\.
/bin/rm /var/spool/imap/user/notjunkmail/*
/usr/bin/sudo -u cyrus /usr/bin/cyrus/bin/reconstruct -r user/notjunkmail

Este script va a quedar guardado en /usr/local/scripts con el nombre 820.entrena_spamassassin.

Ojo, no olvidar hacer lo siguiente:

chmod +x /usr/local/scripts/820.entrena_spamassassin

Finalmente se hará un enlace simbólico en el directorio de las tareas diarias:

cd /etc/periodic/daily
ln -s /usr/local/scripts/820.entrena_spamassassin

Comments

Actualización del “spamassassin”

Se actualizó la versión del SpamAssassin que está instalada en el servidor interno:

sudo cpan
cpan> Install Mail::SpamAssassin
[…]
cpan> Quit

También se actualizó el script diario que respalda las bases de datos LDAP: /usr/local/scripts/800.backup_ldap. Se eliminó la versión que estaba en /etc/periodic/daily y se hizo ahí mismo un enlace simbólico:

cd /etc/periodic/daily
ln -s /usr/local/scripts/800.backup_ldap ./800.backup_ldap

Se agregó un nuevo script que copia filtros para el spamassassin de varios sitios que los ofrecen para bajar. El script se instaló en /usr/local/scripts/810.update_spam_rules y se hizo un enlace simbólico en /etc/periodic/daily:

cd /etc/periodic/daily
ln -s /usr/local/scripts/810.update_spam_rules ./810.update_spam_rules

Anexo 1

Contenido del script 800.backup_ldap.

#! /bin/bash
#
# Usage: put this into /etc/periodic/daily as something like 800.backup_LDAP
# and the stock Apple cron jobs will run it automatically every day.
#
# Copyright 2004 J. P. Block < jpb@apesseekingknowledge.net >
#
# This is released under the BSD license, but please send me any
# modifications so I can update the released version.

#source /sw/bin/init.sh

# how many days we keep backups for
DAYLIMIT=30

STAMP=`date +%Y-%m-%d-%H%M%S`
DESTDIR=/web/respaldo_logs/ldap

# ensure the destination exists
DESTDIR1=$DESTDIR/DirectoryService
mkdir -p $DESTDIR1

tar cvf $DESTDIR1/DirectoryService_$STAMP.tar /Library/Preferences/DirectoryService
gzip -9v $DESTDIR1/DirectoryService_$STAMP.tar
chmod 444 $DESTDIR1/DirectoryService_$STAMP.tar.gz

# backup LDAP
DESTDIR2=$DESTDIR/slapcat
mkdir -p $DESTDIR2

/usr/sbin/slapcat -l $DESTDIR2/slapcat_$STAMP.ldif -f /etc/openldap/slapd.conf
gzip -9v $DESTDIR2/slapcat_$STAMP.ldif

# Backup password server
DESTDIR3=$DESTDIR/passdb
mkdir -p $DESTDIR3

mkdir -p $DESTDIR3/mkpassdb
mkpassdb -backupdb $DESTDIR3/mkpassdb
tar cvf $DESTDIR3/passdb_$STAMP.tar $DESTDIR/mkpassdb
gzip -9v $DESTDIR3/passdb_$STAMP.tar
rm -fr $DESTDIR3/mkpassdb

find $DESTDIR -mtime +$DAYLIMIT -exec rm '{}' ';'

Anexo 2

Contenido del script 810.update_spam_rules.

#!/bin/sh

cd /etc/mail/spamassassin

/usr/bin/curl -O "http://mywebpages.comcast.net/mkettler/sa/antidrug.cf"
/usr/bin/curl -O "http://www.emtinc.net/includes/backhair.cf"
/usr/bin/curl -O "http://www.emtinc.net/includes/chickenpox.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/99_FVGT_Tripwire.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/bigevil.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/evilnumbers.cf"
/usr/bin/curl -O "http://www.stearns.org/sa-blacklist/random.current.cf"
/usr/bin/curl -O "http://www.stearns.org/sa-blacklist/sa-blacklist.current"
/usr/bin/curl -O "http://www.stearns.org/sa-blacklist/sa-blacklist.current.uri.cf"
/usr/bin/curl -O "http://www.timj.co.uk/linux/bogus-virus-warnings.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/71_sare_redirect_pre3.0.0.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_evilnum0.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_evilnum1.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_evilnum2.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_html0.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_html1.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_html2.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_html3.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_html4.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_header0.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_header1.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_header2.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_header3.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_header_eng.cf"
/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_header_x264_x30.cf"

/usr/bin/curl -O "http://www.rulesemporium.com/rules/70_sare_spoof.cf"

Comments

Controlar unidad óptica desde línea de comando

Para abrir/cerrar la charola o expulsar un CD desde la Terminal:

drutil tray open|close|eject

Comments

¿Cuál es la versión del “Postfix”?

Para saber la versión actual del postfix:

postconf | grep version

Comments

Monitoreo de seguridad

En una de las listas de correo apareció un mensaje preguntando por formas de detectar intentos de acceso via ssh, a lo que alguien más contestó con el siguiente comando (todo en una sola línea):

tail -F /var/log/system.log | grep -E 'sshd.*(user|User|identification|Accepted)'

Mantiene abierta la lectura del archivo /var/log/system.log y la filtra por grep para mostrar solamente aquellos intentos de acceso que puedan ser/sean un riesgo.

Comments

Problemas con el servidor de correo

Desde ayer el servidor de correo estuvo tronando y se quedaban las conexiones esperando eternamente para lograr hacer algo. El tipo de error encontrado se repetía muchas veces por segundo y mostraba algo así:

Oct 6 14:57:38 textura mbpath[1485]: DBERROR: init() on berkeley
Oct 6 14:57:38 textura mbpath[1485]: DBERROR db4: environment not yet opened
Oct 6 14:57:38 textura mbpath[1485]: DBERROR: opening /var/imap/mailboxes.db: Invalid argument
Oct 6 14:57:38 textura mbpath[1485]: DBERROR: opening /var/imap/mailboxes.db: cyrusdb error
Oct 6 14:57:38 textura mbpath[1486]: DBERROR db4: fatal region error detected; run recovery
Oct 6 14:57:38 textura mbpath[1486]: DBERROR: dbenv->open '/var/imap/db' failed: DB_RUNRECOVERY: Fatal error, run database recovery

El error significa que alguno de los archivos que utiliza el sistema IMAP se corrompió, por lo que es necesario reconstruirlo.

El primer paso fue usar el Server Admin para detener el servicio de correo.

Como no fue posible saber cuál usuario era el que causaba el problema, se eliminaron los archivos sospechosos de todos los usuarios.

rm /var/spool/imap/user/*/cyrus.*

Esto elimina los archivos cyrus.cache, cyrus.header y cyrus.index de todos los usuarios.

Después hay que brincar al directorio cd /usr/bin/cyrus/bin y desde ahí ejecutar lo siguiente:

sudo -u cyrus ./reconstruct -r user/usuarioareconstruir

para todos los usuarios que haya en /var/spool/imap/user.

Finalmente, de nuevo con el Server Admin, se reinicia el servicio de correo.

Fuentes

Comments