Script untuk Menghapus Email Spam di Queue Zimbra Mail Server

Jika kita mengelola email server, bukan sekali dua email server yang kita kelola mendapat serangan spam. Jika serangan itu cukup parah, kemungkinan ada banyak email deferred yang memenuhi queue. Email-email itu merupakan email sampah, namun kita tidak bisa langsung menghapus seluruh email sampah tersebut dari deferred queue karena ada kemungkinan bercampur dengan email normal.

Untuk mengatasinya bisa menggunakan script berikut, yang saya dapatkan dari blog ini. Caranya, salin script dibawah ini kedalam file teks, simpan dengan nama pfdel, kemudian set permissionnya (chmod 755 pfdel, chmod +x pfdel). Untuk menjalankannya bisa menggunakan perintah :

pfdel email-address-spammer, contoh : pfdel spam@spammer.org

Catatan : Script ini digunakan untuk Zimbra Mail Server dan dijalankan dalam modus akses root. Untuk mengakses mail queue dalam modus root, gunakan perintah ini :

[code lang=”cpp”]
su – zimbra -c “mailq”
[/code]

Jika digunakan pada mail server berbasis Postfix non Zimbra, ganti baris berikut :
[code lang=”cpp”]
my $LISTQ = “/opt/zimbra/postfix/sbin/postqueue -p”;
my $POSTSUPER = “/opt/zimbra/postfix/sbin/postsuper”;
[/code]
Menjadi :
[code lang=”cpp”]
my $LISTQ = “/usr/sbin/postqueue -p”;
my $POSTSUPER = “/usr/sbin/postsuper”;
[/code]

Script Selengkapnya :
[code lang=”bash”]
#!/usr/bin/perl -w
#
# pfdel – deletes message containing specified address from
# Postfix queue. Matches either sender or recipient address.
#
# Usage: pfdel
#

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 \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;
[/code]

7 thoughts on “Script untuk Menghapus Email Spam di Queue Zimbra Mail Server

  1. Hi, aku coba script diatas tapi muncul error seperti ini:
    syntax error at pfdel line 10, near “gt;”
    syntax error at pfdel line 21, near “&gt”
    syntax error at pfdel line 24, near “<”
    syntax error at pfdel line 24, near “&gt”
    syntax error at pfdel line 37, near “}”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.