ThaiCERT: Thai Computer Emergency Response Team
ศูนย์ประสานงานการรักษาความปลอดภัยคอมพิวเตอร์ ประเทศไทย 
 
 
 



ชื่อเรื่อง : การสร้างความปลอดภัยให้แก่เมล์เซิร์ฟเวอร์
เรียบเรียงโดย : เลอศักดิ์ ลิ้มวิวัฒน์กุล
เรียบเรียงเมื่อ : 8 พฤศจิกายน 2545

สำหรับระบบปฏิบัติการ Red Hat Linux โปรแกรม Sendmail เป็นโปรแกรมที่ใช้ในการให้บริการเมล์เซิร์ฟเวอร์ รายละเอียดของบทความฉบับนี้จะไม่กล่าวถึงวิธีการติดตั้งโปรแกรม Sendmail โดยจะถือว่าผู้ดูแลระบบที่ต้องการเปิดบริการเมล์เซิร์ฟเวอร์ได้ติดตั้งโปรแกรม Sendmail แบบ RPM ในระบบแล้ว ข้อดีของการติดตั้งโปรแกรมแบบ RPM คือสามารถใช้โปรแกรม up2date ในการอัพเดทโปรแกรมได้ และที่สำคัญคือการติดตั้ง Sendmail แบบ RPM นั้นจะช่วยลดปัญหาเรื่องการปรับแต่งค่าการทำงานของโปรแกรม Sendmail ซึ่งเป็นที่ทราบกันดีว่า Sendmail เป็นโปรแกรมหนึ่งที่มีไฟล์ configuration ที่ซับซ้อนและยากต่อการที่จะศึกษาให้เข้าใจได้ในเวลาอันสั้น

ไฟล์ configuration ของโปรแกรม Sendmail อยู่ที่ /etc/mail ซึ่งการติดตั้ง Sendmail แบบ RPM นั้นจะสร้างไฟล์ที่จำเป็นสำหรับการใช้งานไว้ครบทั้งหมดแล้ว ไฟล์ configuration หลักของ Sendmail คือ /etc/mail/sendmail.cf ซึ่งผู้ดูแลระบบสามารถใช้ไฟล์ /etc/mail/sendmail.mc เป็นต้นแบบได้ทันที

การสร้างไฟล์ configuration ของ Sendmail หรือ /etc/mail/sendmail.cf สามารถทำได้สองวิธี วิธีแรกคือทำการสร้างไฟล์ /etc/mail/sendmail.cf ขึ้นมาโดยตรงซึ่งต้องใช้ความชำนาญเป็นอย่างมากจึงจะทำได้ ส่วนวิธีที่สองคือใช้โปรแกรม m4 ซึ่งเป็นโปรแกรมประเภทที่เรียกว่า macro processor ซึ่งใช้ในคอมไพล์ภาษา macro ซึ่งการติดตั้ง Sendmail แบบ RPM นั้นจะมีไฟล์ /etc/mail/sendmail.mc ซึ่งเป็นไฟล์ภาษา macro ที่สามารถใช้เป็นต้นแบบของ configuration ของ Sendmail ได้และสามารถนำไปคอมไพล์ผ่าน m4 เพื่อให้ได้ /etc/mail/sendmail.cf ซึ่งสามารถนำไปใช้งานได้ทันที คอมไพล์โดยใช้คำสั่งว่า

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

ข้อดีของวิธีที่สองคือสามารถแก้ไขได้ง่ายและสะดวกกว่าวิธีการแรกมาก เอกสาร README ของ Sendmail มีรายละเอียดในการแก้ไขไว้แล้ว ผู้ดูแลระบบสามารถศึกษาเพิ่มเติมในไฟล์ดังกล่าวนี้ เอกสารในส่วนนี้จะกล่าวเน้นเฉพาะเรื่องที่เกี่ยวกับเพิ่มความปลอดภัยให้กับเมล์เซิร์ฟเวอร์ โดยจะถือว่าผู้ดูแลระบบมีพื้นฐานการใช้งาน Sendmail มาบ้างแล้ว เรื่องแรกจะกล่าวถึงความหมายของคำว่า Relay ซึ่งจะพบได้บ่อยถ้าเปิดบริการเมล์เซิร์ฟเวอร์ ต่อจากนั้นจะกล่าวถึง configuration ที่สำคัญในการปรับแต่งค่าสำหรับการอนุญาตให้ Relay ผ่านเมล์เซิร์ฟเวอร์ และปิดท้ายด้วยเรื่องของการป้องกันการโจมตีแบบ Denied of Services ที่อาจจะเกิดขึ้นได้กับ Sendmail

ความหมายของคำว่า relay

สมมติมีเซิร์ฟเวอร์หนึ่งซึ่งทำหน้าเป็นเมล์เซิร์ฟเวอร์ให้กับโดเมน sample.com และผู้ใช้คนหนึ่งชื่อ jane ซึ่งมีอี-เมล์แอดเดรสเป็น jane@sample.com และอยู่ภายใต้โดเมนนี้ ดังรูป


รูปที่ 1 เมล์เซิร์ฟเวอร์ของโดเมน sample.com และผู้ใช้ภายใต้โดเมนนี้ที่ชื่อ jane

เหตุการณ์นี้เป็นเหตุการณ์การส่งอี-เมล์ตามปกติจากผู้ส่งใดซึ่งเป็นใครก็ได้ ส่งอี-เมล์ที่ระบุผู้รับเป็น jane@sample.com ซึ่งจะส่งผ่านเมล์เซิร์ฟเวอร์ของโดเมน sample.com นี้


รูปที่ 2 การส่งอี-เมล์จากผู้ใช้ภายนอกโดเมนมาให้ผู้ใช้ภายในโดเมน ไม่ไช่ relay

แต่เหตุการณ์ที่มีผู้ส่งใดจะส่งอี-เมล์ผ่านเมล์เซิร์ฟเวอร์แต่ผู้รับไม่ใช่ผู้รับในโดเมนนี้แต่เป็นผู้รับอื่นในโดเมนอื่น จะเรียกเหตุการณ์ที่เกิดขึ้นว่า มีผู้ใช้เมล์เซิร์ฟเวอร์ในโดเมน sample.com ทำการ relay อี-เมล์ไปที่โดเมนอื่น


รูปที่ 3 การส่งอี-เมล์จากผู้ใช้ภายนอกโดเมนไปยังผู้รับนอกโดเมนโดยใช้เมล์เซิร์ฟเวอร์โดเมนนี้ เรียกว่า relay

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

ในอดีตการ relay ช่วยให้การส่งอี-เมล์ทำได้สะดวกเป็นการส่งกันต่อไปเป็นทอดๆ เหมือนกับที่แพ็กเกจของโพรโตคอล TCP/IP ที่วิ่งผ่านเส้นทางอื่นได้ แต่ปัจจุบันการเปิดให้เมล์เซิร์ฟเวอร์สามารถ relay ได้ถือเป็นอันตรายอย่างยิ่ง เพราะสามารถนำไปใช้ในทำ mail spamming ทำการส่งอี-เมล์จำนวนมหาศาลไปยังผู้รับจำนวนมาก ซึ่งเป็นการเปลืองทรัพยากรระบบโดยใช่เหตุ

การกำหนดสิทธิ์ของการ relay ผ่านเมล์เซิร์ฟเวอร์

Sendmail เวอร์ชันก่อน 8.9.0 จะกำหนดสิทธิ์ในการ relay แบบ "relay by default" ซึ่งเป็นอันตรายอย่างยิ่ง ถ้าระบบใดใช้ Sendmail เวอร์ชันก่อน 8.9.0 ควรจะอัพเกรด Sendmail โดยทันที แต่สำหรับ Red Hat Linux ในเวอร์ชันหลังเป็นต้นมา ใช้ Sendmail เวอร์ชันหลังจาก 8.9.0 แล้ว และมีการกำหนดสิทธิ์เป็น "relay denied by default" หรือไม่อนุญาตให้ relay ได้โดยดีฟอลต์

มี configuration ที่ใช้ในการกำหนดสิทธิ์ของการ relay ผ่านเมล์เซิร์ฟเวอร์ ซึ่งมีความยืดหยุ่นสูงมาก โดย configuration เหล่านี้ใช้กับไฟล์ /etc/mail/sendmail.mc เท่านั้น และเมื่อแก้ไขเสร็จต้องทำการคอมไพล์ให้เป็น /etc/mail/sendmail.cf ก่อนนำไปใช้งานทุกครั้ง

สิทธิ์ ความหมาย
OK รับอี-เมล์ได้ มักใช้ในความหมายของอี-เมล์ที่ส่งมาถึงเมล์เซิร์ฟเวอร์เท่านั้น
RELAY อนุญาตให้ relay ทุกกรณี
REJECT ไม่อนุญาตให้ relay ทุกกรณี
DISCARD ไม่อนุญาตให้ relay และไม่สนใจนำเนื้อความในอี-เมล์นั้นมาพิจารณาอีก
ERROR: "..." ไม่อนุญาตให้ relay ทุกกรณี และแจ้งข้อความตามที่ระบุ

ตาราง 1 แสดงสิทธิ์ในการกำหนดใน /etc/mail/access

ส่วน FEATURE ต่อไปนี้ไม่ควรใช้

FEATURE('promiscuous_relay') เป็นการกำหนดให้เป็น "relay by default"
FEATURE('accept_unresolvable_domains') อนุญาตให้โดเมนที่ไม่สามารถ reverse lookup ip สามารถ relay ผ่านได้
FEATURE('accept_unqualified_senders') อนุญาตให้ชื่อผู้ส่งที่ไม่ถูกต้องเช่น ไม่ได้กำหนดชื่อผู้ส่ง หรือมีอักขระไม่เหมาะสม สามารถ relay ผ่านได้

ตาราง 2 แสดง FEATURE ที่ไม่ควรใช้

การป้องกันการโจมตีแบบ Denial of Service

มี configuration ที่กำหนดค่าที่สามารถลดปัญหาเรื่องการโจมตีแบบ Denied of Service พร้อมกับค่าที่แนะนำ ดังนี้



Home || เอกสารเผยแพร่ || Unix & Linux

ThaiCERT Disclaimer | Copyright © 2001 ThaiCERT(NECTEC). All rights reserved.