Ich möchte hier kurz ein neues Script vorstellen, welches gleich mehrere Ziele hat.
blockedspam.sh
(1) bietet eine Kurzinfo. DiscardedInbound bedeutet soviel wie "eMail Eingang verworfen". Das heißt also diese eMail wurde nicht an ein eMail Konto geliefert, sondern ignoriert.
Bei (2) werden die definierten Richtlinien ausgegeben. Die definierten Richtlinien sind in der Admin Oberfläche von ISPConfig eingerichtet. Bei uns werden die X-Spam-Score Zeilen der hereinkommenden eMails durch Amavis modifiert. Das machen etliche eMail Anbieter auch. Ganz wichtig war nun für mich, leicht zu erkennen, ob auch der Kill Level korrekt funktioniert. Also, ob der score dazu führt, dass die eMail verworfen wird, wenn der Wert hoch genug ist.
Bei (3) sind alle Treffer aus dem mail.log der laufenden Woche aufgelistet. Der Screenshot ist vom Dienstag Nachmittag, hat also nur eine Zeitspanne von reichlich 2,5 Tagen.
In der rechten Spalte ist die für den entsprechenden eMail Konto die ausgewählte Richtlinie.
Im erweiterten Teil findet ihr den Source Code von blockedspam.sh
blockedspam.sh
!/bin/bash
# $Revision: 1.5 $
# blockedspam.sh
bold=$(tput bold)
normal=$(tput sgr0)
#gelb=$(tput setaf 3)
gruen=$(tput setaf 2)
black=$(tput setaf 0)
echo "$bold"
echo "blockedspam.sh$normal"
echo "zeigt für die email Konten die vom Server$bold abgewiesenen Spam Nachrichten$normal an."
echo "Stichwort $gruen DiscardedInbound $normal"
echo "Über ISPConfig ist die eingestellte Richtlinie einstellbar."
echo "Der$bold Spam Kill Level$normal muß überschritten werden, dann weist der Server die eMail ab."
echo -n "$bold"
echo "Tipp: Es kann ein anderes Logfile als Parameter übergeben werden. z.B. blockedspam.sh /var/log/mail.log.1$normal"
echo
# beste Version:
#grep DiscardedInbound /var/log/mail.log|awk -F ' -> |, ' '/Hits:/ {gsub("Hits:", "\tBlocked with Score:"); gsub("Blocked ", "BLOCKED", $5); printf "%-40s %s\n", $3, $6}'|grep -v size:
echo "$gruen Hier ist die Übersicht über die in ISPConfig definierten Richtlinien"
echo "$normal"
echo "select id, policy_name Richtlinie,spam_tag_level,spam_tag2_level,spam_kill_level \
from dbispconfig.spamfilter_policy order by id;"|\
mysql -S /var/run/mysqld/mysqld.sock --table | egrep --color 'Richtlinie|spam_kill_leve|*'
echo "$normal"
###
# die funktion richtlinie holt die
# policy_id für eine email
function richtlinie () {
pure_email=$(echo $email|tr -d '<>')
#echo "func: $email $pure_email"
result="$(echo "SELECT policy_id FROM dbispconfig.spamfilter_users WHERE email = '$pure_email';" | mysql -S /var/run/mysqld/mysqld.sock --skip-column-names)"
#echo ":$result:"
if [ -z "$result" ]; then
echo "0"
else
echo "$result"
fi
}
logfile="/var/log/mail.log"
#Aufrufparameter prüfen, es kann ein anderes Logfile übergeben werden
if (( $# == 1))
then
if [ -f "$1" ]; then
logfile="$1"
fi
fi
#echo
echo "$gruen Liste der abgelehnten Spam eMails"
echo "$normal"
echo -n "$bold"
printf "%-55s %-40s" "Email-Konto:" "Wenn bei Richtlinie 0 steht, ist keine ausgewählt"
echo "$normal"
filtered_output=$(grep DiscardedInbound $logfile | awk -F ' -> |, ' '/Hits:/ {gsub("Hits:", "\tBlocked with Score:"); gsub("Blocked ", "BLOCKED", $5); printf "%-40s %s\n", $3, $6}' | grep ->
while IFS= read -r line; do
email=$(echo "$line" | awk '{print $1}') # Extrahiere die Email-Adresse
score=$(echo "$line" | awk '{print $5}') # Extrahiere den Score
printf "%-55s %-22s %-15s" "$email " "X-Spam-Score: $score" " angewandte Richtlinie"
richtlinie
done <<< "$filtered_output"