站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

Sendmail-使用 Sendmail 當您的 MTA

前言

本篇實作為使用 [Sendmail] 來當您的 MTA,E-Mail 與 DNS 設定息息相關,因此當 Mail 寄不出去或收不到時除了檢查 Mail 的設定及 maillog 之外,也別忘了 DNS 中 MX 設定是否正常,且 DNS Server 設定後最好開機等 24 小時之後,等大家都更新對您的 DNS Record 之後這樣信件的解析才能運作順暢哦。

實作環境

安裝及設定

步驟1.修改 /etc/mail/access

[Sendmail] 一般皆內建於 FreeBSD 中不必另外安裝,您可複製 access.sample 範例檔案來進行修改,access 為一般文字檔案主要功能為設定限制條件。

 #vi /etc/mail/access 
 weithenn.org             RELAY                      //允許此網域名稱能寄信 
 192.168.1                RELAY                      //允許內部網段能寄信 

步驟2.產生 access.db

修改完剛才的 access 檔案後,請執行下列二行指令來產生 Sendmail 資料庫檔案 (實際上 Sendmail 所能讀取的檔案),產生完成後請重新啟動 Sendmail 服務即可 (請依個人喜好自行擇一)

 #makemap hash /etc/mail/access < /etc/mail/access   //產生方法 1
 #cd /etc/mail ; make                                //產生方法 2

步驟3.安裝 POP3 套件

請鍵入下列指令來安裝 POP3 套件,本次實作 POP3 為安裝 popa3d 套件 (或依您個人喜好安裝即可)

 #cd /usr/ports/mail/popa3d                          //切換至安裝路徑 
 #make install clean                                 //安裝 popa3d 套件 

步驟4.修改 Inetd 設定檔 (/etc/inetd.conf)

修改 /etc/inetd.conf 設定檔內容,因為 pop3 為透過 Inetd 服務而啟動,因此請修改 Inetd 服務設定檔內容

 #vi /etc/inetd.conf
 pop3  stream  tcp  nowait  root  /usr/local/libexec/popper  popper     //預設值
 pop3  stream  tcp  nowait  root  /usr/local/libexec/popa3d  popa3d     //修改後

步驟5.建立 /etc/mail/local-host-names

請自行建立 /etc/mail/local-host-names 檔案,內容如下

 #vi /etc/mail/local-host-names
 weithenn.org                                       //允許此網域名稱能寄信

並檢查 /etc/mail/sendmail.cf 裡面是否有如下三行內容存在

 #less /etc/mail/sendmail.cf
 Cwlocalhost 
 # file containing names of hosts for which we receive email 
 Fw-o /etc/mail/local-host-names

步驟6.重新啟動相關服務

鍵入指令 ps ax|more 找出 inetd 及 sendmail 服務的 pid,然後使用指令 kill -1 pid 即可重新啟動 Inetd 及 Sendmail 服務。服務重新啟動完成後即可寄一封信給自己,如果成功就表示完成設定。

補充1.相關檔案功能說明

 weithenn.org               RELAY                                    //允許此 Domain 能寄信 (不需認證)
 192.168.1                  RELAY                                    //允許內部 IP 網段能寄信 (不需認證)
 another.source.of.spam     REJECT                                   //禁止此 Domain 能寄信
 somespammer.com            DISCARD                                  //此 Domain 寄來的信收下後直接刪除
 cyberspammer.com           550 We don't accept mail from spammers   //回應此訊息給寄件者
 weithenn.org
 mail.weithenn.org
 dns.weithenn.org

所以 DNS 內應該要有如下幾筆記錄

 weithenn.org.    IN MX 10 mail.weithenn.org.
 mail             IN A     61.60.59.58
 dns              IN A     61.60.59.58
 mail.weithenn.org
 192.168.1.
 # "Smart" relay host (may be null)
 DS                                                  //預設值
 DSedm.weithenn.org                                  //修改後

上列設定是說當要我寄信出去時,就會寄到 edm.weithenn.org 主機,請它幫我寄信當然前提是 edm.weithenn.org 主機允許 Relay 你這台主機,你可以手動發信後觀察 maillog 就可知設定是否成功,應該要看到 relay 主機就是你設定的那台

 Jul 20 11:06:34 mail sm-mta[14118]: l6K36YV0014116: to=<weithenn@gmail.com>, delay=00:00:00, xdelay=00:00:00,
 mailer=relay, pri=30464,relay=edm.weithenn.org. [192.168.1.4], dsn=2.0.0, stat=Sent (l6K36rNV013042 Message accepted for delivery)
 service: weithenn@gmail.com

當修改完後記得鍵入下列指令來更新 aliases.db 檔案

 #newaliases                                         //更新 aliases.db 內容
 /etc/mail/aliases: 29 aliases, longest 25 bytes, 329 bytes total

若想知道會轉寄給誰也可下指令來了解別名設定最後會寄到那個 Mail Account

 #sendmail -bv service                               //查看別名 service 最後是寄給誰
 weithenn@gmail.com... deliverable: mailer relay, host mail.weithenn.org, user weithenn@gmail.com

補充2.在伺服器上手動寄信

當設定完成後你可以在郵件伺服器依如下步驟手動寄信

 #telnet localhost 25                                //連結至本機 SMTP
 Trying ::1...
 Connected to localhost.weithenn.org.
 Escape character is '^]'.
 220 mail.weithenn.org ESMTP Sendmail 8.13.8/8.13.8; Thu, 19 Jul 2007 17:16:00 +0800 (CST)
 ehlo localhost                                      //跟郵件伺服器 Say Hello (此行為自行輸入)
 250-mail.weithenn.org Hello localhost.weithenn.org [IPv6:::1], pleased  to meet you
 250-ENHANCEDSTATUSCODES
 250-PIPELINING
 250-8BITMIME
 250-SIZE
 250-DSN
 250-ETRN
 250-DELIVERBY
 250 HELP
 mail from: web@weithenn.org                         //寄件人郵件位址 (此行為自行輸入)
 250 2.1.0 web@weithenn.org... Sender ok
 rcpt to: weithenn@gmail.com                         //收件人郵件位址 (此行為自行輸入)
 250 2.1.5 weithenn@gmail.com... Recipient ok
 DATA                                                //此行為自行輸入
 354 Enter mail, end with "." on a line by itself
 Subject: test1                                      //郵件主旨 (此行為自行輸入)
 asdlfasdf                                           //郵件內容 (此行為自行輸入)
 .                                                   //內容結束符號 (此行為自行輸入)
 250 2.0.0 l6J9G0H1002194 Message accepted for delivery
 quit                                                //離開 (此行為自行輸入)
 221 2.0.0 mail.weithenn.org closing connection
 Connection closed by foreign host.
 You have new mail.

參考

[4wei-diary Argument list too long]

[twbsd.org 第十六章 郵件伺服器]

[苗栗縣大湖鄉大南國民小學全球資訊網路 (FreeBSD) 架站日誌 SendMail 之設定]

Me FAQ

Q1.如何快速清除 Sendmail Queue?

Error Message:

當我使用 Sendmail 當 MTA 時,mailq 了一堆使用 rm 卻說太多無法清除,該如何才能快速清除 mailq呢?

Ans:

簡單來說就是到 sendmail queue目錄去幹掉他們

 cd /var/spool/mqueue;find ./ -delete

另一個解法是今天在 [4wei-diary: FBSD Argument list too long] 上看到的

 cd /var/spool/mqueue;find ./ | xargs rm

Q2.sm-mta[29616]: gethostbyaddr?

Error Message:

一直跳出類似如下的訊息

 sm-mta[29616]: gethostbyaddr

Ans:

修改 sendmail.cf 檔的內容

 #O DontProbeInterfaces=False      //預設值
 O DontProbeInterfaces=True        //修改後

[Re: sendmail gethostbyaddr error]

Q3.發信時 Log 顯示 host name lookup failure?

Error Message:

當我使用 Sendmail 當 MTA 時,發信後別人都收不到看一下 /var/log/maillog 有如下內容並有一段 keyword host name lookup failure

 stat=Deferred: Name server: mail.weithenn.org.: host name lookup failure

Ans:

參考這篇 [sendmail问题)hosts已设置,但无法解析 - ChinaUnix.net] 照做就搞定了,建立 /etc/mail/service.switch 然後加入如下二行然後重啟 sendmail service 後就可發信且無錯誤訊息

 hosts   files
 aliases files
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com