1、前言
本篇實作為使用 Sendmail 來當您的 MTA,E-Mail 與 DNS 設定息息相關,因此當 Mail 寄不出去或收不到時除了檢查 Mail 的設定及 maillog 之外,也別忘了 DNS 中 MX 設定是否正常,且 DNS Server 設定後最好開機等 24 小時之後,等大家都更新對您的 DNS Record 之後這樣信件的解析才能運作順暢哦。文章目錄
1、前言2、實作環境
3、安裝及設定
步驟1.修改 /etc/mail/access
步驟2.產生 access.db
步驟3.安裝 POP3 套件
步驟4.修改 Inetd 設定檔 (/etc/inetd.conf)
步驟5.建立 /etc/mail/local-host-names
步驟6.重新啟動相關服務
4、補充1.相關檔案功能說明
5、補充2.在伺服器上手動寄信
6、參考
7、Me FAQ
Q1.如何快速清除 Sendmail Queue?
Q2.sm-mta[29616]: gethostbyaddr?
Q3.發信時 Log 顯示 host name lookup failure?
2、實作環境
- FreeBSD 4.8-RELEASE
3、安裝及設定
步驟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 服務。服務重新啟動完成後即可寄一封信給自己,如果成功就表示完成設定。4、補充1.相關檔案功能說明
/etc/mail/access: 指定哪些來源 IP 或 Domain 是否可以經由我們的伺服器寄信。 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 //回應給寄件者
/etc/mail/local-host-names: 填入 Localhost 及相關 Hostname (如 mail.weithenn.org) 當收到信的收件者不是給 mail.weithenn.org 時便會拒絕,此檔案內所列的 Host 都會被視為 Local (所以信會收下來) 通常和 DNS 的 MX 搭配使用。
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
/etc/mail/relay-domain: 允許 Relay 的 Domain (也可填入 IP 網段) 通常填入使用的 Domain 或內部 IP 網段。
mail.weithenn.org
192.168.1.
/etc/mail/sendmail.cf 內的 DS 功能: Smart Relay Host 此項目是指定請 誰 幫我寄信 (Relay) 預設值是空的。
# "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-mta14118: 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)
/etc/mail/aliases: 郵件別名,如下列設定的話則寄給 Service 這個帳戶時就會轉寄到 weithenn@gmail.com 了。
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
5、補充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.
6、參考
- 4wei-diary Argument list too long
- twbsd.org 第十六章 郵件伺服器
- 苗栗縣大湖鄉大南國民小學全球資訊網路 (FreeBSD) 架站日誌 SendMail 之設定
7、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 檔的內容,參考 Re: sendmail gethostbyaddr error
#O DontProbeInterfaces=False //預設值
O DontProbeInterfaces=True //修改後
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