#!/bin/bash
# Script zum Auswerten der aktuellen Datei /var/log/mail
# Das Script gibt die Anzahl zugestellter und geblockter 
# Mails aus und setzt diese zueinander ins Verhältnis.
# Version: 0.2
# (C) 2010 invis-server.org
# Author: Stefan Schaefer <stefan@invis-server.org>
# Questions: http://forum.invis-server.org
# License: GPLv3

# Achtung: Dieses Script ist an openSUSE angepasst und liefert
# auf anderren System falsche Ergebnisse, da die protokollierten
# Meldungen bei den einzelnen Distributionen unterschiedlich sind.
# Einige Anpassungen an Debian befinden sich als Kommentare im
# Script.

# Globale Einstellungen
rootpackdir="/etc/rootpack"
rootpackconfig="$rootpackdir/rootpack.cfg"

usage() {
    echo "Übergeben Sie diesem Script den XXX des YYYY";
    echo "Beispiel: \$> mkscript wert"
}

# Konfigurationsparameter tauschen
changevalues() {
    # Arg1 = Pfad, Arg2 = Datei, Arg3 = sed String
    cat $1/$2|sed "s%$3%g" > $1/$2.new
    mv $1/$2.new $1/$2
}

getconfvalue() {
    cat $rootpackconfig | grep "$1:" | cut -d ":" -f 2
}

# Welche Datei soll analysiert werden?
# openSUSE
logfile="/var/log/mail"
# debian: /var/log/mail.log

# verschiedene Auswertungen
# local zugestellte mails
locdeliveredmb=$(cat $logfile|grep "delivered to mailbox"|wc -l)
locdeliveredmd=$(cat $logfile|grep "delivered to maildir"|wc -l)
locdeliveredrd=$(cat $logfile|grep "delivered via dovecot service"|wc -l)
locdeliveredzar=$(cat $logfile|grep "delivered via zarafa service"|wc -l)
((locdelivered=$locdeliveredmb + $locdeliveredmd + $locdeliveredrd + $locdeliveredzar))
# nach extern zugestellte mails inkl. bounce
extdelivered=$(cat $logfile|grep "status=sent"|grep -v "delivered to mail"|grep -v "delivered via dovecot service"|wc -l)
# Meldung an Absender
bounced=$(cat $logfile|grep "status=bounced"|wc -l)
# DNS Prüfung nicht bestanden
nohn=$(cat $logfile|grep "cannot find your hostname"|wc -l)
#debian
#nohn=$(cat $logfile|grep "address not listed for hostname"|wc -l)

# Blacklisting
rblblocked=$(cat $logfile|grep "blocked using"|wc -l)
# Amavis
# Virus
amavisblockedv=$(cat $logfile|grep "Blocked INFECTED"|wc -l)
# SPAM
amavisblockedsp=$(cat $logfile|grep "Blocked SPAM"|wc -l)
# Banned
amavisblockedb=$(cat $logfile|grep "Blocked BANNED"|wc -l)

# Unbekannter Empfänger
nouser=$(cat $logfile|grep "User unknown in virtual alias table"|wc -l)
#debian
#nouser=$(cat $logfile|grep "unknown user"|wc -l)

# Unbekannte Absender Domain
nodom=$(cat $logfile | grep "Domain not found"|wc -l)
#debian
#nodom=$(cat $logfile | grep "Domain of sender address"|grep "does not resolve"|wc -l)

# Summen
((sumok=$locdelivered + $extdelivered))
((sumnok=$nohn + $rblblocked + $amavisblockedv + $amavisblockedsp + $amavisblockedb + $nouser + $nodom))

# Verhältnis
quote=$(echo "scale=2;$sumnok/$sumok"|bc)

# Ab wann wurde ausgewertet
firstdate=($(cat $logfile |head -n 1| tr -s " "| cut -d " " -f 1-3))
startdate="${firstdate[1]}.${firstdate[0]} ${firstdate[2]} Uhr"
## Bis auf kleine Abweichungen ergibt: reject + bounced = blocked + cannot find + User unknown + Domain not found
# User unknown ergibt bounced.
clear
echo
echo -e "============================================================================"
echo -e " Auswertung der Datei $logfile auf Wirksamkeit der Spam-Abwehr"
echo -e "----------------------------------------------------------------------------"
echo
echo -e "Startdatum/Startzeit der Logdatei: $startdate"
echo
echo -e "Seit Anlegen der Logdatei wurden:"
echo -e "----------------------------------------------------------------------------"
echo -e " $locdelivered\tMails lokal zugestellt."
echo -e " $extdelivered\tMails extern zugestellt."
echo -e "----------------------------------------------------------------------------"
echo -e " $nohn\tMails wegen falschem Hostnamen des einliefernden Servers abgelehnt."
echo -e " $nodom\tMails wegen nicht existierender Absender-Domain abgelehnt."
echo -e " $rblblocked\tMails durch Blacklisting abgelehnt."
echo -e " $amavisblockedv\tMails von Amavis wegen Virus abgelehnt."
echo -e " $amavisblockedsp\tMails von Amavis wegen hohem Spamverdacht abgelehnt."
echo -e " $amavisblockedb\tMails von Amavis gebannt."
echo -e " $nouser\tMails wegen nicht existierendem Empfänger abgelehnt."
echo -e "----------------------------------------------------------------------------"
echo -e "Es wurden $bounced Mails mit Meldung an den Absender zurückgewiesen." 
echo -e "----------------------------------------------------------------------------"
echo -e "Auswertung:"
echo -e "----------------------------------------------------------------------------"
echo -e "Summe zugestellter Mails:\t$sumok"
echo -e "Summe abgelehnter Mails:\t$sumnok"
echo -e "Verhältnis abgelehnt:zugestellt = $quote"
echo -e "============================================================================"
echo

