คอนฟิก sendmail เบื้องต้น

การติดตั้งและคอนฟิก 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

One thought on “คอนฟิก sendmail เบื้องต้น”

  1. ขอรายละเอียดเพิ่มเติมเกี่ยวกับ sendmail ได้มั้ยคะ
    เช่น ว่า
    1. มันคืออะไร ?
    2. สถาปัตยกรรมเบื้องต้น ภาพรวมองค์ประกอบ
    3. เอามาจากไหน (load)
    4. คอนฟิกให้ใช้งานได้อย่างไร
    5. ตัวอย่าง config เบื้องต้น

Leave a Reply

Your email address will not be published.