Count bounced mails shell script

Spamwellen am eigenen Webserver erkennen ist oft schwierig. Dieses Shell-Skript zählt die bounce-Mails und warnt Sie durch eine E-Mail, sobald ein festgelegter Grenzwert überschritten wurde.

Mit Spamskripts verseuchte Webserver warten oft nur auf den passenden Moment um tausende und abertausende Spam-Mails zu versenden. Erkennen solcher Spamwellen ist oft schwierig. Erkannt werden müssen diese aber umgehend, da ansonsten die Gefahr des Blacklistings der Server-IP gegeben ist. Infolge dessen, werden Ihre eigenen Mails bei anderen Providern blockiert und die Mails Ihrer Kunden kommen nicht mehr an.

Dieses Skript wertet ständig, via Cronjob angestoßen, das aktuelle Maillog aus und zählt dabei die zurück gekommenen, bounced E-Mails aus. Besonders bei Spamwellen ist der Prozentwert von Bounced-Mails zu typischen, angekommenen Mails, besonders erhöht. Das gibt dem Skript Anlass eine Mail auszusenden und Sie umgehend von der aktuellen Mailserver-Situation zu warnen.


#!/bin/bash

#########################################################
## Shell Script prüft die letzten Zeilen im Mail log
## und versendet eine E-Mail bei Überschreiten des Grenzwertes
## @author Andreas Grundner
#########################################################

# Grenzwert in Prozent ab wann eine Warnung verschickt werden soll
LIMIT=5

# Empfänger der Warnung
RECIPIENTS=xxx@gmail.com

# Anzahl der Zeilen die im Maillog analysiert werden sollen
ANALYZE_ROWS=10000

#########################################################
###################### start script #####################
#########################################################

# Mail Datei löschen
rm -f /var/andi/count_bounced_mails.mail

# prüfen ob in den letzten angegebenen Zeilen des Maillogs der Grenzwert der Bounce E-Mails überschritten wurde

SENTMAILS=$(tail -n $ANALYZE_ROWS /var/log/mail.log | grep sent | wc -l)
ABSLIMIT=$(echo "scale=2;$SENTMAILS/100*$LIMIT" | bc)
BOUNCED=$(tail -n $ANALYZE_ROWS /var/log/mail.log | grep bounced | wc -l)

# tests
# echo $SENTMAILS
# echo $ABSLIMIT
# echo $BOUNCED

if [ 1 -eq "$(echo "${BOUNCED} > ${ABSLIMIT}" | bc)" ]; then

echo "Grenzwert von $ABSLIMIT (Limit $LIMIT%) Bounced E-Mails ueberschritten. $SENTMAILS E-Mails in den letzten $ANALYZE_ROWS Zeilen des Maillogs versendet. Davon waren $BOUNCED bounced E-Mails."

echo "Grenzwert von $ABSLIMIT (Limit $LIMIT%) Bounced E-Mails ueberschritten.\n$SENTMAILS E-Mails in den letzten $ANALYZE_ROWS Zeilen des Maillogs versendet.\nDavon waren $BOUNCED bounced E-Mails.\nDieses Email wurde an $RECIPIENTS gesendet.\n\nWeitere Vorgehensweise: Maillog und Mailgraph pruefen.\n\nMfg Ihr Name\n\n\nmailq Ausgabe:\n\n" > count_bounced_mails.mail

mailq >> count_bounced_mails.mail

echo "\n\n\nBounced Mails in mail.log\n\n" >> count_bounced_mails.mail

tail -n $ANALYZE_ROWS /var/log/mail.log | grep bounced >> count_bounced_mails.mail

mail -s "Bounced Grenze auf Server ueberschritten" $RECIPIENTS < count_bounced_mails.mail

exit 0
else
echo "Grenzwert von $ABSLIMIT bounced E-Mails ($LIMIT%) NICHT überschritten. $BOUNCED bounced E-Mails. Keine weitere Aktion. "
exit 0
fi

Sei sozial und teile

Über den Autor Andreas Grundner

Ich bin Wordpress, Joomla, Typo3 Integrator, Unix Rootserver Administrator und Webanwendungsprogrammierer. Mittlerweile habe ich über 70 Webprojekte weitgehend selbstständig mit enger Kundenabsprache realisiert. Ich bin auf One Page Websites auf Wordpress-Basis spezialisiert, biete aber auch Suchmaschinenoptimierung (SEO), Blogs, Facebook, Youtube und Google+ Seiten an. Meine Verpflichtung gilt dem Datenschutz, meine Leidenschaft dem Finden und Aufzeigen von Sicherheitslücken in Webanwendungen.

Meinung sagen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.