How to release accidentally spam mail in MailScanner to the recepient without the original message attached

Kes ni memang dah lama aku hadapi. Dan sering memerlukan aku ikut kaedah pergi ke server dan cari folder dan fail tu kendian baru la release semula kepada penerima emel tu. Sebab biasa la spam server ni ada kala terblok emel2 penting yang dihantar dari FREE mail hosting macam gmail dan yahoo ni. Even kekadang dari pengguna valid government domain pun terblok. Ini disebabkan oleh penggunaan kaedah scoring bagi perkara-perkara yang terdapat dalam emel tersebut. Contohnya semu huruf besar  di subject emel letakkan score = 3.5, limit score untuk tentukan emel spam atau bersih adalah 3.3. So dah sah2 emel tu akan dikategorikan sebagai emel spam..so bagi pengguna emel, kenala faham tugas IT Man ni bukannya mudah..nak kena rearrange semula scoring tu supaya match dengan current spam mail environment yang sering berubah-ubah.

Mailwatch ni memang telah digunakan sebagai default monitoring emel spam untuk MailScanner. Sekarang dah ada versi lain dipanggil Baruwa...macam budak melayu je buat..kalau ikut nama tu..ahaks!..Kaedah yang digunakan ini akan mengubah kaedah biasa Mailwatch berfungsi kebiasannya iaitu :
- Emel tag sebagai spam akan dikuarantin
- Apabila di release menggunakan mailwatch ia akan dihantar oleh sender admin emel dan emel asal akan di jadikan sebagai attachment 'Original Message'.
- Pengguna akan terima emel tersebut dimaklumkan bahawa emelnya telah dilepaskan dari kuarantin
- Pengguna tak boleh baca attachment dan kandungannya. Hanya header emel sahaja boleh dilihat..
- Ini masalahnya.

Penyelesaian diperlukan :
- Emel tag sebagai spam akan dikuarantin
- Admin akan release menggunakan mailwatch dan menggunakan penghantar emel admin (untuk memudahkan whitelist) tapi sebenarnya apabila penerima menerima emel tersebut, penghantar emel sebenar yang menghantar emel tersebut kepada penerimanya
- Pengguna terima emel tersebut seolah-olah sebenarnya emel tu tak dikuarantin sebagai spam pun
- Pengguna boleh terus baca emel tersebut seperti biasa tanpa ada masalah
- Kaedah ini diinginkan.

OS : CentOs 5.x
MailWatch : 1.04
MailScanner : 4.74.x

Beberapa perkara diperlukan :
  • Mailfeeder
  • Patch to mailwatch

Mailfeeder :

1) Install mailfeeder :
# wget http://www.pldaniels.com/mailfeeder/mailfeeder-0.2.3.tar.gz
 
2)  Extract dan bina fail tersebut :
# tar xzvf mailfeeder-0.2.3.tar.gz
# cd mailfeeder-0.2.3
# make
# cp mailfeeder /usr/local/bin
Patch MailWatch
1) buka fail : conf.php (dalam folder /var/www/html/mailscanner)
 
komen row berikut :
//define(QUARANTINE_USE_SENDMAIL, false);
//define(QUARANTINE_SENDMAIL_PATH, '/usr/sbin/sendmail');
 
gantikan dengan :
define(QUARANTINE_USE_SENDMAIL, true);
define(QUARANTINE_SENDMAIL_PATH, '/usr/local/bin/mailfeeder'); 
 
2) buka fail :  functions.php (dalam folder /var/www/html/mailscanner)
tambah row berikut di lokasi berikut :
DATE_FORMAT(date,'%Y%m%d') AS date, 
   id,
   to_address,
+  from_address,
   CASE WHEN isspam>0 THEN 'Y' ELSE 'N' END AS isspam, 
   CASE WHEN nameinfected>0 THEN 'Y' ELSE 'N' END AS nameinfected,
   CASE WHEN virusinfected>0 THEN 'Y' ELSE 'N' END AS virusinfected,
 
tambah row berikut di lokasi berikut :

    $quarantined[$count]['host']  = $row->hostname;
    $quarantined[$count]['msgid'] = $row->id;
    $quarantined[$count]['to']  = $row->to_address;
+   $quarantined[$count]['from']  = $row->from_address;
    $quarantined[$count]['file']  = "message";
    $quarantined[$count]['type']  = "message/rfc822";
    $quarantined[$count]['path']  = $nonspam; 
 
tambah row berikut di lokasi berikut :
 
$quarantined[$count]['host']  = $row->hostname;
    $quarantined[$count]['msgid'] = $row->id;
    $quarantined[$count]['to']  = $row->to_address;
+   $quarantined[$count]['from']  = $row->from_address;
    $quarantined[$count]['file']      = "message";
    $quarantined[$count]['type']      = "message/rfc822";
    $quarantined[$count]['path']      = $spam;
 
tambah row berikut di lokasi berikut :

    $quarantined[$count]['host']         = $row->hostname;
    $quarantined[$count]['msgid']        = $row->id;
    $quarantined[$count]['to']           = $row->to_address;
+   $quarantined[$count]['from']  = $row->from_address;
    $quarantined[$count]['file']         = "message";
    $quarantined[$count]['type']         = "message/rfc822";
    $quarantined[$count]['path']         = $mcp; 
 
tambah row berikut di lokasi berikut :
 
$quarantined[$count]['host'] = $row->hostname;
      $quarantined[$count]['msgid'] = $row->id;
      $quarantined[$count]['to']  = $row->to_address;
+     $quarantined[$count]['from'] = $row->from_address;
      $quarantined[$count]['file']  = $f;
      $file    = escapeshellarg($quarantine.'/'.$f);
      $quarantined[$count]['type']  = ltrim(rtrim(`/usr/bin/file -bi $file`)); 
 
keluarkan row (-) dan tambah row (+) berikut di lokasi berikut :
 
} else {
    // Use sendmail to release message
    // We can only release message/rfc822 files in this way.
-   $cmd = QUARANTINE_SENDMAIL_PATH." -i -f ".QUARANTINE_FROM_ADDR." ".escapeshellarg($to)." < ";
+   // we will use mailfeeder to send the message to maintain state
+   //$cmd = QUARANTINE_SENDMAIL_PATH." -i -f ".QUARANTINE_FROM_ADDR." ".escapeshellarg($to)." < ";
+   $cmd = QUARANTINE_SENDMAIL_PATH." -S 127.0.0.1 -s ".QUARANTINE_FROM_ADDR." -r ".escapeshellarg($to)." -i ";
    foreach($num as $key=>$val) {
     if(preg_match('/message\/rfc822/',$list[$val]['type'])) {
      debug($cmd.$list[$val]['path']);

* Pastikan anda setkan quarantine sender emel  :
define(QUARANTINE_FROM_ADDR, 'spamadmin@spam.org.my');

Restart MailScanner :
1) /etc/init.d/MailScanner restart
2) Cuba gunakan fungsi release emel dalam mailwatch dan anda akan dapat lihat 
dalam senarai emel masuk ianya telah direlease kepada pengguna asal dengan 
menggunakan emel admin. Penerima emel akan lihat emel sender adalah dari emel 
sebenar penghantar dan bukan emel admin.
 
Alhamdulillah akhirnya ianya berjaya dan mudah aku nak assign staff untuk handle 
emel spam ni dengan lebih mudah.
 
Ilmu itu ada, cuma kita kena cari sesabarnya dan sebijaknya..
 
Jom cuba!
 

~ Be a Creator Not a User ~

Ulasan