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