#!/bin/sh # mailuser_stat.sh v 0.3 Kreny 06/11/2004 0:16 DOMAIN='@yourdomain' FILE_PATH='/home/user/public_html/log' SENDER_FILE='mail_sender.txt' RECEIVER_FILE='mail_receiver.txt' VIRUSE_FILE='mail_viruse.txt' REJECT='reject_mail.txt' LOG_FILE='/var/spool/qmailscan/qmail-queue.log' QUARANTINE_FILE='/var/spool/qmailscan/quarantine.log' TODAY=`date` MONTH=` date +%b` ###### Counting the sender # Print title and last update. printf "Statistics for mail sender\n" awk 'NR==1 {print "Statistic since "$1,$2,$3,$4,$5}' $LOG_FILE > $FILE_PATH/$SENDER_FILE printf "Last Update: $TODAY\n\n" >> $FILE_PATH/$SENDER_FILE # Send to Non-dalouis user. printf "########### To Non-Dalouis User ###########\n" >> $FILE_PATH/$SENDER_FILE printf "\n====== Total ======\n\n" >> $FILE_PATH/$SENDER_FILE awk '/return-path/&&$10~/'$DOMAIN'/&&$13!~/'$DOMAIN'/ {print gensub(/\"(.*)@.*\",/,"\\1",1,$10)}' $LOG_FILE | sort | uniq -c | sort -nr >> $FILE_PATH/$SENDER_FILE printf "\n====== Monthly Statistics (without filter) ======\n\n" >> $FILE_PATH/$SENDER_FILE awk '/return-path/&&$10~/'$DOMAIN'/&&$13!~/'$DOMAIN'/ {print ":"$4,$3,":"gensub(/\"(.*)@.*\",/,"\\1",1,$10)}' $LOG_FILE | sort | uniq -c | awk -F: '{print $2":"$1":"$3}' | sort +0r -1 +1rM -2 | awk -F: '{array_a[$1", "$3]+=$2}END{for(i in array_a){split(i,array_b,"");printf"%s\t,\t%d\n",i,array_a[i]}}' |sort +0rn -1 +1rM -2 |awk -F, '{if($1==month){printf("\t%d\t%s\n",$3,$2)}else{printf("%s\n\t%d\t%s\n",$1,$3,$2);month=$1;array_b=$0}}' >> $FILE_PATH/$SENDER_FILE printf "\n====== Daliy Statistics (with filter) ======\n\n" >> $FILE_PATH/$SENDER_FILE # Count simplely #awk '/return-path/&&$10~/'$DOMAIN'/&&$13!~/'$DOMAIN'/ {print ":"$4,$3,$2,$1,":"gensub(/\"(.*)@.*\",/,"\\1",1,$10)}' $LOG_FILE | sort | uniq -c | awk -F: '{print $2":"$1":"$3}' | sort +0r -1 +1rM -2 +2rn -3 | awk -F: '{array_a[$1 $3]+=$2}END{for(i in array_a){split(i,array_b,"");printf"%s,\t%d\n",i,array_a[i]}}' |sort +0rn -1 +1rM -2 +2rn -3 |awk -F, '{if($1==date){printf("\t%d\t%s\n",$3,$2)}else{printf("%s\n\t%d\t%s\n",$1,$3,$2);date=$1;array_b=$0}}'>> $FILE_PATH/$SENDER_FILE # Uniq the same recept awk '/return-path/&&$10~/'$DOMAIN'/&&$13!~/'$DOMAIN'/&&/'$MONTH'/ {print ":"$4,$3,$2,$1,":"gensub(/\"(.*)@.*\",/,"\\1",1,$10)" : "gensub(/\"((.*)@.*)\"/,"\\1",1,$13)}' $LOG_FILE | sort -u | awk -F: '{print $1":"$2":"$3}' | sort | uniq -c | awk -F: '{print $2":"$1":"$3}' | sort +0r -1 +1rM -2 +2rn -3 | awk -F: '{array_a[$1 $3]+=$2}END{for(i in array_a){split(i,array_b,"");printf"%s,\t%d\n",i,array_a[i]}}' |sort +0rn -1 +1rM -2 +2rn -3 |awk -F, '{if($1==date){printf("\t%d\t%s\n",$3,$2)}else{printf("%s\n\t%d\t%s\n",$1,$3,$2);date=$1;array_b=$0}}' >> $FILE_PATH/$SENDER_FILE # Total usage of sender. printf "\n########### To All Users(including $DOMAIN users) ###########\n\n" >> $FILE_PATH/$SENDER_FILE awk '/return-path/&&$10~/'$DOMAIN'/ {print gensub(/\"(.*)@.*\",/,"\\1",1,$10)}' $LOG_FILE | sort | uniq -c | sort -nr | grep -f $FILE_PATH/namelist >> $FILE_PATH/$SENDER_FILE printf "Done! \n" ###### Counting the receiver printf "Statistics for mail receiver\n" awk 'NR==1 {print "Statistic since "$1,$2,$3,$4,$5}' $LOG_FILE > $FILE_PATH/$RECEIVER_FILE printf "Last Update: $TODAY\n\n" >> $FILE_PATH/$RECEIVER_FILE printf "\nStatistics from qmail-queue.log \n\n" >> $FILE_PATH/$RECEIVER_FILE awk '/return-path/&&$13~/'$DOMAIN'/ {gsub(/\"/,"");print $13}' $LOG_FILE | sed 's/,/\n/g' |awk '/'$DOMAIN'/ {print gensub(/(.*)'$DOMAIN'/,"\\1",1,$1)}'| sort | uniq -c | sort -nr | grep -f $FILE_PATH/namelist >> $FILE_PATH/$RECEIVER_FILE printf "\nStatistics from maillog (Only for this month)\n\n" >> $FILE_PATH/$RECEIVER_FILE awk '/checking message/ {print $10}' /var/log/maillog* | awk -F: '{print gensub(/(.*)@.*/,"\\1",1,$1)}'| sort | uniq -c |sort -rn | grep -f $FILE_PATH/namelist >> $FILE_PATH/$RECEIVER_FILE printf "Done! \n" ###### Counting the Viruse Mail receiver printf "Statistics for viruse mail receiver\n" awk 'NR==1 {print "Statistic since "$1,$2,$3,$4,$5,$6}' $QUARANTINE_FILE > $FILE_PATH/$VIRUSE_FILE printf "Last Update: $TODAY\n\n" >> $FILE_PATH/$VIRUSE_FILE awk '{print gensub(/(.*)'$DOMAIN'/,"\\1",1,$8)}' $QUARANTINE_FILE | sort | uniq -c | sort -nr | grep -f $FILE_PATH/namelist >> $FILE_PATH/$VIRUSE_FILE printf "Done! \n" ###### List the rejected E-mails printf "Statistics for rejected mails \n" printf "Last Update: $TODAY\n\nRejected by Spamcontrol:\n\n" > $FILE_PATH/$REJECT awk '/Reject/ {print $2 }' /var/log/qmail/smtpd/*| sort | uniq -c | sort -nr | awk -F: '{print $1": "$3" "$5}' >> $FILE_PATH/$REJECT printf "\nRejected by SBL www.spamhaus.org:\n\n" >> $FILE_PATH/$REJECT awk '/rblsmtpd/ {print $2 }' /var/log/qmail/smtpd/*| sort | uniq -c | sort -nr >> $FILE_PATH/$REJECT printf "Done! \n" ###### Change Log ###### # 2004-06-11 Add the statistics of rejected E-mails # 2004-06-02 List data only for This Month.