เรื่องใหญ่เมื่อ ISP บล็อกเครื่องเมลล์เซิร์ฟเวอร์ Zimbra Community 8.04

สวัสดีครับสำหรับแฟนๆ เครดิต-ไทย ทุกๆท่าน ผู้เขียนยังได้มีเรื่องราวดีๆ นำเสนอให้กับท่านผู้อ่านกันอยู่สม่ำเสมอมาครั้งนี้ก็เป็นงานที่ผู้เขียนรับเป็นที่ปรึกษาให้กับโครงการระบบเมลล์เซิร์ฟเวอร์ให้กับหน่วยงานราชการแห่งหนึ่ง ระบบที่ผู้เขียนได้ติดตั้งให้ก็คือ Zimbra Community 8.04 เสียงเรียกเข้ามาในสาย "คุณ.....เมลส่งไม่ออก และรับไม่ได้ค่ะ" ผู้เขียนก็เลยพยายามจะรีโมตเข้าไปดูว่าเกิดปัญหาอะไร ปรากฎว่าไม่สามารถเข้าไปใช้งานได้เลย สอบถามไปได้ความว่า ISP บล็อกเนื่่องจากเครื่องนี้ส่งสแปม กลัวว่าจะไปทำลายระบบอื่นๆ

"เรื่องใหญ่เมื่อ ISP บล็อกเครื่องเมลล์เซิร์ฟเวอร์ Zimbra Community 8.04" ก็เกิดขึ้น ครั้งนี้ผู้เขียนจะได้แนะนำวิธีป้องกันตนเองด้วยการ antispam mail จากเครื่องมือที่มีอยู่ใน Zimbra เอง เริ่มต้นด้วยการเรียกดูกว่ามีการติดตั้งการป้องกัน spam อะไรบ้าง ให้เปลี่ยนเป็นผู้ใช้ zimbra ก่อนด้วย su - zimbra

zmprov  gacf | grep zimbraMtaRestriction
zimbraMtaRestriction: reject_non_fqdn_hostname


ยุ่งละสิเครื่องเมลล์เราเปิดระบบป้องกันสแปมแค่ตรวจสอบว่ามีชื่อเครื่องถูกต้องเท่านั้นเองมันไม่เพียงพอที่จะไปป้องกันการถูกโจมตีจากเมลล์สแปม ลองค้นหาข้อมูลดูพบว่า zimbra ได้ให้คำแนะนำในการป้องกันตามลิงค์ที่ผู้เขียนแปะให้

http://wiki.zimbra.com/wiki/Configuring_and_Monitoring_Postfix_DNSBL


ผู้เขียนไม่รอช้าดำเนินการเปิดใช้งาน RBL เพื่อป้องกันสแปมในทันทีตามตัวอย่างข้างต้น
zmprov mcf \
zimbraMtaRestriction reject_invalid_hostname \
zimbraMtaRestriction reject_non_fqdn_hostname \
zimbraMtaRestriction reject_non_fqdn_sender \
zimbraMtaRestriction "reject_rbl_client dnsbl.njabl.org" \
zimbraMtaRestriction "reject_rbl_client cbl.abuseat.org" \
zimbraMtaRestriction "reject_rbl_client bl.spamcop.net" \
zimbraMtaRestriction "reject_rbl_client dnsbl.sorbs.net" \
zimbraMtaRestriction "reject_rbl_client sbl.spamhaus.org" \
zimbraMtaRestriction "reject_rbl_client relays.mail-abuse.org"

หากต้องการเพิ่มการป้องกันให้ใช้เครื่องหมาย + นำหน้าตามตัวอย่าง

zmprov mcf +zimbraMtaRestriction "reject_rbl_client zen.spamhaus.org"


ผู้เขียนทดลองตรวจสอบดูว่ามีการกำหนดค่าการป้องกันได้หรือยัง ผลการใส่แสดงตามตัวอย่างด้านล่าง
zmprov  gacf | grep zimbraMtaRestriction
zimbraMtaRestriction: reject_invalid_hostname
zimbraMtaRestriction: reject_non_fqdn_hostname
zimbraMtaRestriction: reject_non_fqdn_sender
zimbraMtaRestriction: reject_rbl_client dnsbl.njabl.org
zimbraMtaRestriction: reject_rbl_client cbl.abuseat.org
zimbraMtaRestriction: reject_rbl_client bl.spamcop.net
zimbraMtaRestriction: reject_rbl_client dnsbl.sorbs.net
zimbraMtaRestriction: reject_rbl_client sbl.spamhaus.org
zimbraMtaRestriction: reject_rbl_client relays.mail-abuse.org



จากข้อมูลของ zimbra แนะนำให้สร้างสคริปเพื่อทำการตรวจสอบว่ามีการเช็คเจอว่ามีสแปมที่ถูกบล็อกไปเท่าไร โดยการสร้างสคริป dnsblcount ตามตัวอย่าง
#!/usr/bin/perl

# dnsblcount
# version 20061111
# (c) 2004, 2005, 2006 Jorey Bump

# Description:
# Counts DNSBL rejections in Postfix log

# Usage:
# dnsblcount /path/to/maillog
# dnsblcount /path/to/maillog1 /path/to/maillog2
# dnsblcount /path/to/maillogs*
# grep "search string" /path/to/maillog | dnsblcount

# Sample crontab:
# 30 5 * * *    /usr/local/sbin/dnsblcount /var/log/maillog | mail -s "$HOSTNAME - DNSBL Count" postmaster

# Sample Postfix 1.1 log lines:
# Mar  6 06:52:03 mail postfix/smtpd[11873]: reject: RCPT from unknown[208.61.231.102]: 554 Service unavailable; [208.61.231.102] blocked using bl.spamcop.net, reason: Blocked - see http://www.spamcop.net/bl.shtml?208.61.231.102; from=<bob@example.net> to=<rob@example.com>
# Mar 13 05:47:51 mail postfix/smtpd[28269]: reject: RCPT from mail68.example.info[66.63.191.68]: 554 Service unavailable; [66.63.191.68] blocked using sbl.spamhaus.org, reason: http://www.spamhaus.org/SBL/sbl.lasso?query=SBL12057; from=<bob@example.net> to=<rob@example.com>

# Sample Postfix 2.1 log line:
# Apr 17 13:49:07 mail postfix/smtpd[18143]: NOQUEUE: reject: RCPT from c-7209e055.1111-2-64736c10.cust.bredbandsbolaget.se[85.224.9.114]: 554 Service unavailable; Client host [85.224.9.114] blocked using bl.spamcop.net; Blocked - see http://www.spamcop.net/bl.shtml?85.224.9.114; from=<haqyhakox@example.com> to=<bob@example.net> proto=ESMTP helo=<c-7209e055.1111-2-64736c10.cust.example.com>

# Sample postfix 2.3 log line:
# Dec 25 05:41:28 mail postfix/smtpd[14586]: NOQUEUE: reject: RCPT from unknown[202.43.175.151]: 554 5.7.1 Service unavailable; Client host [202.43.175.151] blocked using bl.spamcop.net; Blocked - see http://www.spamcop.net/bl.shtml?202.43.175.151; from=<iglkjlpioed@example.com> to=<bob@example.net> proto=SMTP helo=<mail.example.com>

# Begin:
use strict;

my ( $dnsbl, $dnsbltotal, $ip, $length, $line, $max,
     %dnsblcount
         );

         my $rule = "=";
         my $totstr = "Total DNSBL rejections:";
         $max = length($totstr);

         # read line from stdin
         while ($line = <>) {
           if ($line =~ /(\[.*\]) blocked using ([^\s]*)(,|;) /) {
               $ip = $1;
                       $dnsbl = $2;
                               $dnsblcount{$dnsbl} += 1;
                                       $dnsbltotal += 1;
                                             }
                                                 }

                                                 foreach $dnsbl (sort keys %dnsblcount) {
                                                   $length = length($dnsbl);
                                                     if ( $length > $max ) {
                                                             $max = $length
                                                                   }
                                                                   }

                                                                   foreach $dnsbl (sort { $dnsblcount{$b} <=> $dnsblcount{$a} } keys(%dnsblcount)) {
                                                                       printf "%-${max}s  %7s\n", $dnsbl, $dnsblcount{$dnsbl};
                                                                           }

                                                                           foreach (1..($max + 10)) {
                                                                             printf "%s", $rule;
                                                                                }

                                                                                print "\n";

                                                                                printf "%-${max}s  %8s\n", $totstr, $dnsbltotal;

                                                                                1;

 จากนั้นผู้เขียนทดสอบการนับจำนวนสแปมเมลล์ดูว่าพบบ้างไหม ปรากฎว่าเบื้องต้นเช็คเจอไป 14 ครั้ง

 ./dnsblcount /var/log/zimbra.log
rbl-plus.mail-abuse.ja.net       14
====================================
Total DNSBL rejections:           14


เป็นอันสิ้นสุดการเริ่มดำเนินการป้องกันสแปมเมลล์เบื้องต้น หากต้องการป้องกันอย่างได้ผลจริงจังคงต้องมอนิเตอร์และป้องกันอยู่เสมอ ท้ายนี้ผู้เขียนหวังเป็นอย่างยิ่งว่าข้อมูลน่าจะเป็นประโยชน์ในการนำไปป้องกันระบบเครือข่ายคอมพิวเตอร์ของตัวเองได้เป็นอย่างดี ผู้เขียนก็อยู่ในช่วงการทดสอบผลลัพธ์ดังกล่าวข้างต้น และต้องขอขอบคุณ บจก. ไทย พรอสเพอรัส ไอที ได้เอื้อเฟื้อข้อมูลพื้นที่บล็อกดีๆ มานำเสนอกัน พร้อมกับหากนึกถึงระบบ GPS TRACKING ต้องใช้บริการที่นี่ ไทย พรอสเพอรัส ไอที สินค้าดีๆ แท้ๆ วางจำหน่ายราคาประหยัด
Previous
Next Post »