Checkspam, un pequeño analizador para spamassasin

Hace días escribí una entrada sobre como instalar y configurar el
Spamassassin
, ya la gran mayoría sabemos que Spamassassin
genera un log de
actividad y este log es un chorizón…
Si instalamos y configuramos el Spamassassin
como lo recomienda la gran
mayoría y como yo mismo lo he publicado en mi blog, tendríamos un archivo
llamado spamd.log
. Este archivo no es mas que un log de las actividades del
Spamassassin
en cuanto a sus tareas de filtrar el correo electrónico en
nuestro servidor o equipo. La verdad es que con el tiempo este archivo crece y
crece y analizarlo manualmente se vuelve un poco complicado.
Buscando alguna solución ya elaboradas encontré muchos generadores de reportes gráficamente en PHP pero no es lo que yo buscaba.
Mis necesidades son básicamente saber la fecha y hora en que el Spamassassin
identificó un correo SPAM e identificar rápidamente el dominio de donde salió,
así como la dirección IP de ese dominio.
Necesidades muy especificas que no me las daba alguna herramienta ya existente.
Entonces decidí escribir un pequeño script a manera de analizador para
“analizar” el log del Spamassassin
(spamd.log
) y extraer dicha información y
poder consultarla en pantalla.
Aquí el pequeño script:
#!/bin/bash
#checkspam.sh parse the spamd.log to print a report whit spamers domain and IP Address
clear
to_file=$1
if [ "$to_file" == "-h" ]
then
echo "Checkspam.sh homemade parser to spamd.log"
echo "========================================="
echo " "
echo "Usage: checkspam.sh <logfile path> to indicate a specific spamd.log path"
echo "Usage: checkspam.sh to get the default spamd.log path (/var/log/spamassassin/spamd.log)"
echo "Usage: checkspam.sh to show this screen"
echo " "
exit 0
fi
if test -z $to_file
then
to_file="/var/log/spamassassin/spamd.log"
else
if ! test -e $to_file
then
echo "checkspam (can not get access to $to_file or does not exist the log, try again...)"
exit 0
fi
fi
echo -e "checkspamd (logfile: $to_file)...n"
grep "result: Y" $to_file > idspam.txt
if grep -v -e "unknown" idspam.txt > toparse.txt
then
i=1
while read line
do
to_date=$(head -$i /home/user/path/toparse.txt | cut -d "[" -f 1 | tail -1)
to_extract=$(head -$i /home/user/path/toparse.txt | cut -d "<" -f 2 | cut -d "@" -f 2 | cut -d ">" -f 1 | tail -1)
to_address=$(nslookup $to_extract | grep "Address: " | cut -d ":" -f 2 | tail -1)
if test -z $to_address ; then to_address=" unknown ip" ; fi
echo -e "e[1;34m$to_datee[0m e[1;33m$to_extracte[0m (e[1;31m$to_address e[0m)" >> gral_spam.txt
let i=i+1
done < toparse.txt
fi
if test -s gral_spam.txt
then
echo "Date Identified Domain and IP Address (Only if is available)"
echo "================================================================================="
echo " "
cat gral_spam.txt | uniq
else
echo "No Spam has been identified yet..."
fi
echo " "
echo " "
echo "Parse has been done..."
rm *.txt
exit 0
Espero que a alguien le sea de utilidad.
Ciao!