miércoles, 12 de junio de 2013

Análisis de bitácoras postfix (Logs de postfix de manera clara)

En este post muestro una de las miles de formas de ver de manera clara los logs en tiempo real,   (únicamente los que se envía y reciben y se excluyen los rechazados)     para monitorear lo que sucede con nuestro servidor de correo.

tail -f postfix-in.log | grep 'from=\|to=' | awk '{print $1$2"-"$3 " | " $6 " | " $7}' | grep -v reject

en donde :
tail nos está mostrando un seguimiento de los logs que se están guardando en postfix-in.log

grep nos está acortando todo lo que muestra tail , para que unicamente muestre las lineas que contengan "from="  o la palabra "to="  para mostrar  los correos origen y destino

awk nos permite mostrar únicamente las partes que necesitamos ver de los logs,  en este caso:
$1    Es el mes
$2    Es el dia
"-"    Se agrega un guion para dividir la fecha de la hora
$3     Es la hora
" | "   Divisores para mejor visualización
$6     ID del mensaje en proceso
$7     Email de origen o destino

esto nos muestra el envio y recepción de correos en tiempo real de una manera más legible para poder identificar si se está enviando o recibiendo spam  o hay actividades sospechosas.  Ejemplo:






ya que si también quieren ver  información de cuantos correos se envían  hacia correos externos y también tener una información detallada por envío  (interno/externo)    podemos obtenerla con este script  escrito en dos minutos (se puede mejorar o cambiar totalmente para tus necesidades)

Les dejo el script

#!/bin/bash
#
# USO:    ./script.sh correoorigen@uach.mx
FILE_LOG='/var/log/postfix-in.log'
rm -rf resultados

mkdir resultados
cat $FILE_LOG |grep -v NOQUEUE |grep "from=<"$1 | awk '{print $6}'  > resultados/id.txt


for linea in $(cat resultados/id.txt); do
    grep $linea $FILE_LOG
    grep $linea $FILE_LOG >> resultados/envios_por_id.txt;
    echo "----------------------------------------------------------------" >> resultados/envios_por_id.txt ;
    echo "----------------------------------------------------------------"
done

cat resultados/envios_por_id.txt | awk '/to=</{print $1":"$2":"$3" | "$7 }' >> resultados/destino_con_hora.txt

ENV_POR_DEST=$(cat resultados/destino_con_hora.txt | wc -l) # Cuenta todos los envios

ENV_FORANEOS=$(cat resultados/destino_con_hora.txt | grep -v "@uach.mx" |wc -l)

echo "#######################################################" >> resultados/resultados.txt
echo " RESULTADOS :" >> resultados/resultados.txt
echo "" >> resultados/resultados.txt
echo "Numero total de envíos desde $1 : $ENV_POR_DEST" >> resultados/resultados.txt
echo "" >> resultados/resultados.txt
echo "Numero de envíos foraneos : $ENV_FORANEOS" >> resultados/resultados.txt

echo "#######################################################";
echo " RESULTADOS :";
echo "";
echo "Numero total de envios desde $1 : $ENV_POR_DEST";
echo "";
echo "Numero de envios foraneos : $ENV_FORANEOS";

En este caso es información obtenida de un servidor de correo @uach.mx   eso por eso que está hecho de esta manera pero ustedes lo pueden modificar para el uso que le quieran dar.

Los resultados del script se encontraran en un directorio creado que se llama "resultados" 

3 comentarios:

johnnie dijo...

No puedo creer que nadie le agradezca a villatux...muchas gracias...a mi el script me sirvio montón de hecho lo log de pstfix son horribles de analizar y de mas se te pasa una amenaza o un rechazo, etc....muchas gracias....a mi me sirvió.
Un saludo de un administrador de Chile

Anónimo dijo...

Excelente aporte, me ayudo
tienes algun P.O. de donativos?
con gusto aportaremos
slds!

Jose dijo...

Muchas gracias por compartir tus conocimientos me sirvio mucho, saludos.