Postfix mailserver log parser

November 28th, 2007

jadul lagi…


#!/bin/sh
#
# Postfix maillog parser
# debugging postfix transaction

#


LOGFILE=/var/log/maillog

OutputUsage ()
{
echo "`basename $0` - Postfix /var/log/maillog parser"
echo "Usage: `basename $0` [option]
echo “where options:”
echo ” -l Not using /var/log/maillog by default”
exit 1
}

ErrorMessage ()
{
echo -e “Error: $1″
OutputUsage
}

while [ “$#” -gt “0″ ]; do
case “$1″ in
-l)
LOGFILE=”$2″
if [ ! -f ${LOGFILE} ]; then
ErrorMessage “file does not exist.”
fi
shift 2
;;

-*)
ErrorMessage “unknown option.”
OutputUsage
;;

*)
USERNAME=”$1″
break
;;
esac
done

if [ -z “$USERNAME” ]; then
ErrorMessage “No user name specified.”
fi

echo “SMTP Transaction: ”
egrep -i “(to|from)=<$USERNAME@” $LOGFILE |
while read line
do
TOTAL=$((TOTAL + 1))
#QUEUEID=`echo $line | grep -v NOQUEUE | cut -d: -f4`
#QUEUEID=`echo $line | cut -d: -f3 | cut -d[ -f2 | cut -d] -f1`
QUEUEID=`echo $line | cut -d: -f4`
SENDER=”`grep $QUEUEID $LOGFILE | \
egrep “from=” | \
cut -d” ” -f7 | \
cut -d”<” -f2 | \
cut -d”>” -f1`”
echo “——— Transaction number: $TOTAL ———–”
#egrep “($QUEUEID|Passed.*$SENDER.*$USERNAME@).*)” $LOGFILE | uniq

if [ “$QUEUEID” = ” NOQUEUE” ]; then
echo $line
else
grep $QUEUEID $LOGFILE
fi
echo “”
done

echo “Amavis SPAM & Virus Check Results: ”
egrep “amavis.*$USERNAME” $LOGFILE
echo “”

echo “POP3/IMAP Transaction: ”
egrep “LOGIN, user=$USERNAME,” $LOGFILE


Leave a Reply