Spam sur un serveur Zimbra

Malgré toutes les solutions mises en place, il se peut que vous vous retrouviez avec des Spam sur un serveur Zimbra.

Comment le savoir ? Si c’est votre cas, vous êtes déjà probablement au courant.
Différents indices vous mettent sur la voie ; lorsque vous essayez d’envoyer des mails certains types d’adresses vous renvoi automatiquement des messages de non réception ; vous êtes blacklisté sur un grand nombre d’organismes dédiés à çà ; les performances de votre serveur sont dégradés ; toutes ces choses peuvent être des conséquences d’un envoi massif de spam par votre infrastructure.

Comment en être certain ?

Analyse des files d’attentes

Option 1 : En ligne de commande vous pouvez accéder aux différentes queues dans les différents sous dossier présents dans :

/opt/zimbra/data/postfix/spool/

Pour afficher les mails présents dans les différentes queues vous pouvez également effectuer la commande (s’assurer d’être connecté en tant qu’utilisateur « zimbra ») :

sudo ~/libexec/zmqstat

Qui doit rendre quelque chose de ce type :

deferred=3
active=0
corrupt=0
incoming=0
hold=0

Ou encore afficher la mailqueue avec la commande :

mailq

Option 2 : Via l’interface graphique, sur l’adresse de votre serveur associé au port d’administration définit (par défaut 7071). Ex : https://192.168.XXX.XXX:7071

Une fois connecté, rendez-vous dans l’onglet « Moniteur », puis « Files d’attente ».

Si vous voyez une file d’attente comportant plusieurs milliers de mails dont la provenance vous est inconnue, ou que ça ne correspond tout simplement pas à votre trafic habituel, vous êtes sûrement émetteur de spam.

Arrêt des services

La première action à effectuer est de couper vos services Zimbra (à faire en tant qu’utilisateur « zimbra ») :

zmcontrol stop

Analyse des logs

Dans vos files d’attentes il y a deux possibilités, soit l’adresse émettrice est directement celle en question (plutôt rare), et dans ce cas là, il suffit de changer le mot de passe de celle-ci.
Soit l’adresse émettrice ne ressemble en rien à une de vos adresses (Ex : test@test.com).

Dans ce second cas la chose à faire est de se connecter en ligne de commande sur son serveur Zimbra, et d’afficher les logs généraux des mails :

vim /var/log/mail.log

Faites une recherche de l’adresse gênante dans le fichier de log :

/test@test.com

Puis cherchez la correspondance avec une adresse de votre domaine, vous la trouverez à côté de « sasl_username= ».
Vous pouvez également effectuer la commande suivante pour justement afficher les X dernières connexions  et les placer dans un fichier « smtpauthlogins » :

tail -n 10000 /var/log/mail.log | grep "sasl_username=" > smtpauthlogins

Il ne vous reste alors qu’à remplacer le mot de passe du compte incriminé par un plus sécurisé.

L’adresse n’envoie plus de nouveaux spams, mais ceux présents dans les files d’attentes continueront d’essayer de partir.
Vous pouvez alors soit redémarrer vos services et supprimer les mails via l’interface graphique, mais cela s’applique difficilement lorsqu’il y a plusieurs milliers de Spam sur un serveur Zimbra.

Vous pouvez également supprimer complètement votre mailqueue mais alors vous perdrez également les mails légitimes en attente d’envoi.

La commande permettant ceci (en tant que root) :

/opt/zimbra/common/sbin/postqueue -f

Script de suppression sélective

Enfin la solution à privilégier est celle de la suppression sélective, pour faire ceci nous utiliserons un script proposé par le wiki officiel de Zimbra : https://wiki.zimbra.com

Créez donc votre fichier « delete-queue-by-email.sh »,  et injectez le code suivant :

#!/usr/bin/perl -w
#
# pfdel - deletes message containing specified address from
# Postfix queue. Matches either sender or recipient address.
#
# Usage: pfdel <email_address>
#

use strict;

# Change these paths if necessary.
my $LISTQ = "/opt/zimbra/postfix/sbin/postqueue -p";
my $POSTSUPER = "/opt/zimbra/postfix/sbin/postsuper";

my $email_addr = "";
my $qid = "";
my $euid = $>;

if ( @ARGV !=  1 ) {
	die "Usage: pfdel <email_address>\n";
} else {
	$email_addr = $ARGV[0];
}

if ( $euid != 0 ) {
        die "You must be root to delete queue files.\n";
}


open(QUEUE, "$LISTQ |") || 
  die "Can't get pipe to $LISTQ: $!\n";

my $entry = <QUEUE>;	# skip single header line
$/ = "";		# Rest of queue entries print on
			# multiple lines.
while ( $entry = <QUEUE> ) {
	if ( $entry =~ / $email_addr$/m ) {
		($qid) = split(/\s+/, $entry, 2);
		$qid =~ s/[\*\!]//;
		next unless ($qid);

		#
		# Execute postsuper -d with the queue id.
		# postsuper provides feedback when it deletes
		# messages. Let its output go through.
		#
		if ( system($POSTSUPER, "-d", $qid) != 0 ) {
			# If postsuper has a problem, bail.
			die "Error executing $POSTSUPER: error " .
			   "code " .  ($?/256) . "\n";
		}
	}
}
close(QUEUE);

if (! $qid ) {
	die "No messages with the address <$email_addr> " .
	  "found in queue.\n";
}

exit 0;

Ajoutez le droit d’exécution :

chmod +x deleted-queue-by-email.sh

Le script  fonctionne sur le modèle suivant :

./delete-queue-by-email.sh xxx@xxx.com

Il vous indiquera soit le nombre d’éléments supprimés, soit qu’il n’y a aucun message correspondant à votre adresse.

postsuper: 590061E884B: removed
postsuper: Deleted: 1 message
postsuper: 9BE891E8C2A: removed
postsuper: Deleted: 1 message

Relance des services

Pensez à redémarrer vos services Zimbra si ce n’est déjà fait :

zmcontrol start

Et si besoin, voici l’article sur la configuration des RBL sur un serveur de messagerie Zimbra : https://sqx-bki.fr/rbl-et-zimbra-configuration/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *