Bloquer un compte qui spamme…
En général c’est lié à une campagne de phishing qui a fait son job…
Quelques centaines de mails à la minute si on a une plateforme qui tient le coup qui partent à travers des sessions SMTP en provenance de plein d’IP différentes (et avec des « from » aléatoires, histoire d’être encore plus pénible).
On peut faire tourner un script sur le MTA sortant (ZCS) qui va parser zimbra.log pour y trouver toutes les connexions SMTP authentifiées et agir (en bloquant le compte) s’il y en a trop par minute.
Ce script gère une whitelist, envoie un mail au support lorsqu’un compte est bloqué et peut être lancé chaque cinq minutes (par root) via la crontab.
Il ne s’agit que d’une base, à adapter selon vos besoins…
#!/bin/bash
logfile="/var/log/zimbra.log"
maxmails="100"
mydomain="mondomaine.tld"
support="support@$mydomain"
accounts="/tmp/active_accounts"
log="/home/zimbra/closed.log"
WL="/root/whitelist.txt"
redemarre=false
su - zimbra -c "/opt/zimbra/bin/zmaccts" | grep "@" | grep active | awk '{print $1}' > $accounts
zgrep -i "sasl_method=LOGIN, sasl_username" $logfile | sed 's/ / /g' | awk -F"[ :]" '{print $3":"$4,$13;}' | sed 's/sasl_username=//g' | sort | uniq -c | sort -n |\
while read line
do
count=`echo ${line} | cut -d' ' -f 1`
userid=`echo ${line} | cut -d' ' -f 3`
userid=${userid,,}
timestamp=`echo ${line} | cut -d' ' -f 2`
active=`grep -i "$userid@$mydomain" $accounts`
if [ "$count" -gt "$maxmails" ] && [ "$active" == "$userid@$mydomain" ];
then
# On vient de détecter un utilisateur
if zgrep --quiet -i $userid $WL;
then
# WhiteList
# A vous de définir les opérations à réaliser si whitelist...
else
# On envoie le mail d'alerte et on bloque le compte
subject="Compte $userid détecté - trop de connexions SMTP"
message="/tmp/emailmessage.txt"
echo "Le compte $userid a été verrouillé : $count connexions en une minute à $timestamp."> $message
/bin/mail -r "postmaster@$mydomain" -s "$subject" "$support" > $log
redemarre=true
fi
rm -f $message
#update list of active accounts
su - zimbra -c "/opt/zimbra/bin/zmaccts" | grep "@" | grep active | awk '{print $1}' > $accounts
fi
done
rm -f $accounts
if [ $redemarre = true ];
then
su - zimbra -c "postfix stop ; postfix start"
fi