การติดตั้งและคอนฟิก Mail Server บนลีนุกซ์มีให้เลือกหลายโปรแกรม แต่ที่เป็นดีฟอลต์ของ distribution ส่วนใหญ่ และใช้งานกันมากที่สุดก็น่าจะเป็นโปรแกรม sendmail
ในทีนี้ขอแนะนำพื้นฐานการคอนฟิก sendmail เพื่อให้สามารถรับและส่ง Mail ได้ โดยทดสอบกับ Fedora 12
รันเซอร์วิส sendmail
ดีฟอลต์จากการติดตั้ง Fedora โปรแกรม sendmail จะถูกติดตั้งมาแล้ว หากเซอร์วิสยังไม่ถูกรัน สามารถใช้คำสั่ง service เพื่อเริ่มรันโปรแกรมได้
[root@fc12-64a ~]# service sendmail start Starting sendmail: [ OK ] Starting sm-client: [ OK ]
ไฟล์ /var/log/maillog ช่วยในการตรวจสอบการรับส่ง Email และปัญหาที่อาจเกิดขึ้นคือไฟล์
ข้อความที่ขึ้นในไฟล์ /var/log/maillog เมื่อเริ่มรันเซอร์วิส
[root@fc12-64a ~]# tail /var/log/maillog ... Nov 29 12:16:52 fc12-64a sendmail[1958]: starting daemon (8.14.3): SMTP+queueing@01:00:00 Nov 29 12:16:52 fc12-64a sm-msp-queue[1967]: starting daemon (8.14.3): queueing@01:00:00
ทดสอบการส่ง mail
บน UNIX ส่วนใหญ่ รวมทั้ง Linux จะมีคำสั่ง mail เพื่อใช้ในการอ่าน และส่ง Email ไปยังผู้อื่นได้
เพื่อความง่าย จะทดสอบด้วยการสร้างผู้ใช้งานขึ้นมา 2 คน คือ “user1” และ “user2”
ล็อกอินด้วย user1 แล้วใช้คำสั่ง mail ระบุออปชั่น ‘-s’ ใส่ Subject ของอีเมล์ เพื่อส่งไปยัง user2
พิมพ์ข้อความของ Email ที่ต้องการ หากจบข้อความให้พิมพ์เครื่องหมายจุด “.” เดียว ของบรรทัด แล้ว [Enter] คำสั่ง mail จะทำการส่ง Email
[user1@fc12-64a ~]$ mail -s "subject testing 1" user2 Data messages . EOT
ตัวอย่างไฟล์ /var/log/maillog ที่แสดง ว่า user1 ส่ง Email ไปยัง user2
[root@fc12-64a ~]# tail /var/log/maillog ... Nov 29 12:24:24 fc12-64a sendmail[2111]: nAT5OO5L002111: from=user1, size=223,, nrcpts=1, msgid=<200911290524.nAT5OO5L002111@fc12-64a.spalinux.com>, relay=user1@localhost Nov 29 12:24:24 fc12-64a sendmail[2112]: nAT5OOs6002112: from=<user1@fc12-64a.spalinux.com>, size=487,, nrcpts=1,msgid=<200911290524.nAT5OO5L002111@fc12-64a.spalinux.com>, proto=ESMTP, daemon=MTA, relay=localhost [127.0.0.1] Nov 29 12:24:24 fc12-64a sendmail[2111]: nAT5OO5L002111: to=user2, ctladdr=user1 (501/100), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30223,relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (nAT5OOs6002112 Message accepted for delivery) Nov 29 12:24:24 fc12-64a sendmail[2113]: nAT5OOs6002112: to=<user2@fc12-64a.spalinux.com>, ctladdr=<user1@fc12-64a.spalinux.com> (501/100), delay=00:00:00,xdelay=00:00:00, mailer=local, pri=30693, dsn=2.0.0, stat=Sent เปลี่ยนมาล็อกอินด้วย user2 ใช้คำสั่ง mail โดยไม่ต้องระบุออปชั่นใดๆ เพื่ออ่าน Email
ในคำสั่ง mail สามารถใส่คำสั่ง เช่นในที่นี้ใส่ตัวเลข 1 ซึ่งหมายถึงต้องการอ่านรายละเอียด Email ฉบับที่ 1
[user2@fc12-64a ~]$ mail Heirloom Mail version 12.4 7/29/08. Type ? for help. "/var/spool/mail/user2": 1 message 1 new >N 1 user1@localhost.loca Sun Nov 29 12:24 20/790 "subject testing 1" & 1 Message 1: From user1@localhost.localdomain Sun Nov 29 12:24:24 2009 Return-Path: <user1@localhost.localdomain> From: user1@localhost.localdomain Date: Sun, 29 Nov 2009 12:24:24 +0700 To: user2@localhost.localdomain Subject: subject testing 1 User-Agent: Heirloom mailx 12.4 7/29/08 Content-Type: text/plain; charset=us-ascii Status: R
Data messages
& q Held 1 message in /var/spool/mail/user2
พิมพ์ตัวอักษร q เมื่อต้องการออกจากคำสั่ง mail
แก้ไขคอนฟิก SMTP Connection จากเครื่องอื่น
คอนฟิกดีฟอลต์ จะอนุญาตให้ส่ง Email ระหว่าง user ที่อยู่ในเครื่องเดียวกันเท่านั้น ไม่รับ Email จากที่อื่น หรือ ไม่รองรับ SMTP Connection จากเครื่องอื่นๆ เลย
ตัวอย่างการทดสอบการเชื่อมต่อ SMTP Connect จากเครื่องอื่น จะเห็นว่าไม่สามารถเชื่อมต่อได้ ขึ้น “Connection refused”
หมายเหตุ อย่าลืมตรวจสอบคอนฟิกของ firewall เช่น iptables ที่รันอยู่ด้วย ว่าเปิดพอร์ต SMTP หรือ TCP 25 อยู่หรือไม่
[other1@client1 ~]$ telnet 192.168.1.1 25 Trying 192.168.1.1... telnet: connect to address 192.168.1.1: Connection refused
ไฟล์คอนฟิกหลักของ sendmail คือ /etc/mail/sendmail.cf แต่ไม่แนะนำให้แก้ไขไฟล์นี้โดยตรงเพราะความซับซ้อนของไฟล์ แนะนำให้แก้ไฟล์ /etc/mail/sendmail.mc
เช่น ต้องการแก้ไขคอนฟิกให้ sendmail รับ SMTP connection จากเครื่องอื่นๆ ด้วย
[root@fc12-64a ~]# /etc/mail/sendmail.mc
dnl # The following causes sendmail to only listen on the IPv4 loopback address
dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
dnl #
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
แก้เป็น
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
หลังจากแก้ไขไฟล์ sendmail.mc เรียบร้อย ต้องรันคำสั่ง make เพื่อแปลงไฟล์ sendmail.mc ให้เป็นไฟล์ sendmail.cf
ในที่นี้หากต้องการเปรียบเทียบว่าไฟล์ sendmail.cf เปลี่ยนแปลงไปอย่างไรบ้าง ให้ copy สำรองไฟล์ของเดิมไว้
[root@fc12-64a ~]# cd /etc/mail [root@fc12-64a mail]# cp sendmail.cf sendmail.cf.orig [root@fc12-64a mail]# ./make
WARNING: 'sendmail.mc' is modified. Please install package sendmail-cf to update your configuration.
หากเจอข้อความ error แบบนี้ ต้องติดตั้งไฟล์ rpm เพิ่มเติม คือ sendmail-cf ซึ่งหาได้จากแผ่นดีวีดีติดตั้ง
[root@fc12-64a ~]# cd /media/Packages/ [root@fc12-64a Packages]# rpm -i sendmail-cf-8.14.3-8.fc12.x86_64.rpm
ทดลองรันคำสั่ง make อีกครั้ง
[root@fc12-64a ~]# cd /etc/mail [root@fc12-64a mail]# ./make
ไฟล์ sendmail.cf จะถูกปรับปรุงจากไฟล์ sendmail.mc
คำสั่ง diff แสดงการเปลี่ยนแปลงไฟล์
[root@fc12-64a mail]# diff sendmail.cf.orig sendmail.cf
18a19,22
> ##### built by root@fc12-64a.spalinux.com on Sun Nov 29 14:15:46 ICT 2009
> ##### in /etc/mail
> ##### using /usr/share/sendmail-cf/ as configuration include directory
> #####
261c265
< O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
---
> O DaemonPortOptions=Port=smtp, Name=MTA
ใช้คำสั่ง service เพื่อ รีสตาร์ตเซอร์วิส sendmail ใหม่อีกครั้ง
[root@fc12-64a mail]# service sendmail restart Shutting down sm-client: [ OK ] Shutting down sendmail: [ OK ] Starting sendmail: [ OK ] Starting sm-client: [ OK ]
ทดลองเชื่อมต่อแบบ SMTP Connection จากเครื่องอื่นอีกครั้ง
[other1@client1 ~]$ telnet 192.168.1.1 25 Trying 192.168.1.1... Connected to 192.168.1.1. Escape character is '^]'. 220 fc12-64a.spalinux.com ESMTP Sendmail 8.14.3/8.14.3; Sun, 29 Nov 2009 14:17:23 +0700 QUIT 221 2.0.0 fc12-64a.spalinux.com closing connection Connection closed by foreign host.
พิมพ์คำสั่ง QUIT เพื่อออกจากคำสั่ง telnet ของการเชื่อมต่อแบบ SMTP
ขอรายละเอียดเพิ่มเติมเกี่ยวกับ sendmail ได้มั้ยคะ
เช่น ว่า
1. มันคืออะไร ?
2. สถาปัตยกรรมเบื้องต้น ภาพรวมองค์ประกอบ
3. เอามาจากไหน (load)
4. คอนฟิกให้ใช้งานได้อย่างไร
5. ตัวอย่าง config เบื้องต้น