|
|
|||||||
สำหรับระบบปฏิบัติการ 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 ก่อนนำไปใช้งานทุกครั้ง
เป็นการกำหนดให้ทุกๆ โฮสต์ที่อยู่ภายใต้โดเมนที่กำหนดไว้ในไฟล์ /etc/mail/relay-domains สามารถ relay ไปได้ เช่น สมมติว่าในไฟล์ /etc/mail/relay-domains เป็นดังนี้
nectec.or.th
biotec.or.th
เมล์เซิร์ฟเวอร์ที่กำหนด configuration นี้จะอนุญาตให้ผู้รับที่อยู่ภายใต้โฮสต์ใดก็ตามที่มีชื่อเป็น *.nectec.or.th หรือ *.biotec.or.th สามารถ relay ผ่านได้
เหมือนกับ configuration ที่กำหนดเป็น FEATURE('relay_entire_domain') แตกต่างกันที่ต้องระบุชื่อโฮสต์ที่อนุญาตโดยตรงในไฟล์ /etc/mail/relay-domains เช่น
mail1.nectec.or.th
mail2.nectec.or.th
smtp.biotec.or.th
เมล์เซิร์ฟเวอร์ที่กำหนด configuration นี้จะอนุญาตให้ผู้รับที่ระบุในโดเมนว่า @mail1.nectec.or.th หรือ @mail2.nectec.or.th หรือ @smtp.biotec.or.th สามารถ relay ผ่านได้
การใช้ configuration นี้จะสามารถปรับแต่งได้ยืดหยุ่นขึ้นมาก โดย Sendmail จะใช้ไฟล์ /etc/mail/access.db ในการพิจารณาสิทธิ์ของโฮสต์ใดบ้างที่อนุญาตให้ relay ผ่านไปได้ ซึ่งในการใช้งานจริงจะแก้ไขไฟล์ /etc/mail/access แล้วใช้คำสั่ง
hash -o /etc/mail/access
เพื่อทำการสร้างไฟล์ /etc/mail/access.db ตัวอย่างไฟล์ /etc/mail/access มีดังนี้
spam.spam.org ERROR:"550 We don't accept mail"
spammer.com REJECT
192.168.122 REJECT
nectec.or.th OK
biotec.or.th RELAY
โดยฟิลด์ทางซ้ายเป็นการกำหนดโฮสต์หรือโดเมน ส่วนฟิลด์ทางขวาเป็นสิทธิ์ที่กำหนดสำหรับการ relay ซึ่งมีสิทธิ์ที่กำหนดได้คือ
| สิทธิ์ | ความหมาย |
| OK | รับอี-เมล์ได้ มักใช้ในความหมายของอี-เมล์ที่ส่งมาถึงเมล์เซิร์ฟเวอร์เท่านั้น |
| RELAY | อนุญาตให้ relay ทุกกรณี |
| REJECT | ไม่อนุญาตให้ relay ทุกกรณี |
| DISCARD | ไม่อนุญาตให้ relay และไม่สนใจนำเนื้อความในอี-เมล์นั้นมาพิจารณาอีก |
| ERROR: "..." | ไม่อนุญาตให้ relay ทุกกรณี และแจ้งข้อความตามที่ระบุ |
ส่วน FEATURE ต่อไปนี้ไม่ควรใช้
| FEATURE('promiscuous_relay') | เป็นการกำหนดให้เป็น "relay by default" |
| FEATURE('accept_unresolvable_domains') | อนุญาตให้โดเมนที่ไม่สามารถ reverse lookup ip สามารถ relay ผ่านได้ |
| FEATURE('accept_unqualified_senders') | อนุญาตให้ชื่อผู้ส่งที่ไม่ถูกต้องเช่น ไม่ได้กำหนดชื่อผู้ส่ง หรือมีอักขระไม่เหมาะสม สามารถ relay ผ่านได้ |
การป้องกันการโจมตีแบบ Denial of Service
มี configuration ที่กำหนดค่าที่สามารถลดปัญหาเรื่องการโจมตีแบบ Denied of Service พร้อมกับค่าที่แนะนำ ดังนี้
| Home
|| เอกสารเผยแพร่ || Unix & Linux
ThaiCERT Disclaimer | Copyright © 2001 ThaiCERT(NECTEC). All rights reserved. |