Menu

Script untuk Menghapus Antrian Spam pada Zimbra Mail Server (Updated)

Script untuk Menghapus Antrian Spam pada Zimbra Mail Server (Updated)

Saya pernah menulis script untuk menghapus antrian spam dari mail server Zimbra di tahun 2011, untuk artikelnya bisa dibaca disini : Script untuk Menghapus Antrian Spam pada Zimbra Mail Server. Script tersebut menjadi salah satu script wajib yang dipasang pada server-server klien Excellent jika terjadi spamming karena adanya account user yang compromised.

Setelah versi 8.7, ada sedikit perubahan posisi file executable Postfix. Zimbra mengubah posisi folder dari yang awalnya ditempatkan pada folder /opt/zimbra/postfix/sbin menjadi folder /opt/zimbra/common/sbin. Akibatnya, saya harus mengubah manual script tersebut untuk bisa digunakan pada server Zimbra versi 8.7 keatas.

Daripada repot tiap kali mengubah script, pagi ini saya menyempatkan diri mengubah scriptnya agar lebih fleksibel dan bisa dipakai baik pada Zimbra 8.7 keatas maupun Zimbra 8.6 dan versi dibawahnya.

Saya sempat terkendala melakukan modifikasi script karena script ini ditulis pakai bahasa pemrogramman Perl sedangkan saya biasanya menggunakan bash. Setelah beberapa kali mencari referensi di Google, akhirnya script ini jadi bisa digunakan.

Berikut adalah isi scriptnya :

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

use strict;

my $LISTQ;
my $POSTSUPER;

# Change these paths if necessary.

system("su - zimbra -c 'zmcontrol -v' > /tmp/zcs-ver.txt");
my $VER=`awk '/Release 6|Release 7|Release 8.0|Release 8.5|Release 8.6/' /tmp/zcs-ver.txt`;
#print $VER

if (length($VER) > 0)
{
$LISTQ = "/opt/zimbra/postfix/sbin/postqueue -p";
$POSTSUPER = "/opt/zimbra/postfix/sbin/postsuper";
}
else
{
$LISTQ = "/opt/zimbra/common/sbin/postqueue -p";
$POSTSUPER = "/opt/zimbra/common/sbin/postsuper";

}

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

if ( @ARGV != 1 ) {
die "Usage: pfdel \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 = ; # skip single header line
$/ = ""; # Rest of queue entries print on
# multiple lines.
while ( $entry = ) {
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;

Jika malas melakukan copy-paste manual, script ini bisa didownload langsung dengan perintah :

wget https://www.vavai.com/pfdel
chmod +x pfdel

Dan untuk menjalankannya, cukup menjalankan script ini dengan hak akses root dengan perintah :

./pfdel alamat-email-spammer

Contoh :

./pfdel spammersampah@vavai.com

Semoga bermanfaat bagi rekan-rekan yang memerlukannya.

Masim Vavai Sugianto

Menu