01 Agustus 2008

Sendmail bloking berdasar isi header email atau isi email

Ada kasus nih. Di company gue saat ini. Hampir 100 user berlangganan sebuah milist (mailing list) YahooGroups. Sepintas gak problem yah. Tapi setelah tau, keheranan gue slama ini jadi terjawab.

Kenapa mail server setiap beberapa jam mendadak sibuk menerima banyak pengiriman email dari Yahoo. Ternyata 100 user ini berlangganan pada mailing list yang sama. Gilanya...milist itu permessagenya skitar 1-3MB. Dan gilanya lagi, isinya cuman gambar2 for fun only yang gak ada hubungan ma kerjaan. So... bayangin aja. Mail server mendadak melahap smua bandwidth internet disini. Efeknya, email jadi tertunda. Dari dalam susah dikirim ke luar. Dan email urgent dr luar, pada susah masuk.

Beberapa department slalu komplain, knapa pelan skali akses ini itu. Dan gue cuman bisa meradang. Karena tau bandwidth internet disini sharusnya lebih dari cukup. Tapi anehnya untuk website B2B suka pelan ....

Mail server masih Sendmail (Redhat 7.3). Smula ada kepikirian pake MailScanner yg sebenernya bagus tuh. Tapi ini jelas gak selesaiin masalah. Cara kerjanya MailScanner, email masuk dulu di spool, baru di threat ama Mailscanner. Gak beda jauh sama procmail. Jadi intinya, ke 2 software ini akan mengharuskan email di terima smua terlebih dulu. Tentu saja mail server gue akan tetep abisin bandwitdh dong :-(

Cara yang bagus adalah menolak email yg masuk saat transaksi. Email mulai di trima. Dari headernya misal ada "From: bla@blablabla.bla". Kalo sendernya diblacklist, maka transaksi itu langsung di reject. Jadi sbelum isi/content email masuk ke mail server, karena tau headernya memenuhi kriteria blacklist, langsung di reject. Lebih efisien kan.

Setelah Googling, nemukan milter-regex. Well... software ini slalu ada di Fedora generasi terakhir. Tapi harus jalan di Redhat-7.3. Untungnya gak susah. Tapi gue gak akan jelasin installasinya. Karena ya slalu gitu aja sih. Yang pasti, stelah installasi jangan lupa naruh ini di /etc/mail/sendmail.mc:

INPUT_MAIL_FILTER(`milter-regex', `S=unix:/var/milter-regex/milter-regex.sock, T=S:30s;R:2m')dnl

Berikutnya konfigurasi milter-regex. Tujuannya mau menolak milist tertentu yah. Jadi liat aja nih sample header sebuah milist. Tanda #### itu censor :-D

Return-Path: #####
Received: from #####
Received: from #####
Message-ID: #####
From: #####
To: #####
Date: Tue, 15 Jul 2008 09:45:04 +0700
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_031B_01C8E65F.7554EA40"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1437
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441
Xbject: [TEST] Shipping report for July 14, 2008
X-BeenThere: test@domain.com
X-Mailman-Version: 2.1
Precedence: list
List-Id: <test.domain.com>
List-Unsubscribe: #####
List-Archive: #####
List-Post: #####
List-Help: #####
List-Subscribe: #####
Sender: test-bounces@domain.com
Errors-To: test-bounces@domain.com

Umumnya milist ada baris "List-Id:" (perhatikan 1 baris tebal diatas). Jadi kita bisa gunakan header ini utk blacklist milist tertentu. Misal nih, milist diatas menggunakan:

List-Id: <test.domain.com>

Maka isi konfigurasi /etc/mail/milter-regex.conf adalah berikut:

###Reject TEST milist (1)
reject "Sorry.... Your list prohibited here :-p"
header /^List-Id$/i /^<test\.domain\.com>$/i

atau

###Reject TEST milist (2)
reject "Sorry.... Your list prohibited here :-p"
header /^List-Id$/i /test/i


Baris pertama, diawalin tanda #, hanya komentar (remark) aja. Baris ke 2, diawalin dengan "reject", itu adalah respond penolakan dr mail server. Dan baris ke tiga, diawalin dengan "header", inilah rules yg kita threat. Jadi kalo memenuhi syarat di baris ke 3, maka sendmail akan merespond dengan error message dari baris ke 2.

Cara pertama mereject milist test@domain.com. Sedangkan cara ke 2, mereject milist yg mengandung kata2 "test" di List-ID nya.

Simpan. Restart milter-regex and sendmail.

/etc/init.d/milter-regex restart
/etc/init.d/sendmail restart

Dan liat lognya di /var/logmessage:

tail -f /var/log/message | grep milter-regex

Oya, milter-regex gak cuman memblacklist mailing list. Base on subject, to, cc, dll. Smua yg di header bisa dipake sebagai rules. Juga untuk mereject attachment, isi email, unresolve DNS address, dll. Cek aja langsung ke websitenya.

Goodluck pren

Tidak ada komentar: