Sendmail配置終極指南
在眾多的郵件服務(wù)器軟件中,Sendmail總是能夠在每一次評比中獲得榮譽(yù),從而使它成為目前使用最為廣泛的一種E-mail服務(wù)器。但是,說起Sendmail的配置,很多人會(huì)感到頭痛。長期以來,很多人為此不厭其煩地一遍又一遍地在BBS、新聞組上詢問其配置。筆者希望借助本文對Sendmail的使用作一個(gè)力求完滿的說明。
下載及安裝
Sendmail的最新版本為:8.11.3,文件大小為1.2MB。
1.解壓縮
# tar -zxvf Sendmail-8.11.3.tar.gz
#cd Sendmail-8.11.3
如果軟件包是rpm格式,則解壓安裝如下:
#rpm -ivh Sendmail-8.11.3-src.rpm
2.編譯
# ./Build
如果不出什么問題,編譯通過,編譯完成后會(huì)自動(dòng)生成目錄:obj.Linux.2.2.18.i686(這是筆者的核心名稱,也許你的內(nèi)核名稱與此不同)。
3.安裝
#./Build install
如果是rpm 格式的軟件包,則應(yīng)編譯如下:
# rpm -ba Sendmail-8.11.1.spec
#rpm -ivh Sendmail*.rpm
至此編譯、安裝完成
配置策略
sendmail.cf是Sendmail的配置文件,它全權(quán)決定了Sendmail的屬性。這個(gè)文件定義郵件服務(wù)器為哪個(gè)域工作。其中的內(nèi)容為特定宏,大多數(shù)人對它都抱有恐懼心理,因?yàn)槲募械暮甏a實(shí)在是太多。sendmail.cf通常是由一個(gè)以mc結(jié)尾的文件編譯產(chǎn)生。如Redhat自帶一個(gè)redhat.mc,用戶可以自己修改其中的一些設(shè)置,使之適合自己。筆者的sendmail.mc 文件內(nèi)容如下:
divert(-1)
dnl This is the macro config file used to generate the /etc/sendmail.cf
dnl file. If you modify thei file you will have to regenerate the
dnl /etc/sendmail.cf by running this macro config through the m4
dnl preprocessor:
dnl m4 /etc/sendmail.mc > /etc/sendmail.cf
dnl You will need to have the Sendmail-cf package installed for this to work.
include(`/usr/lib/Sendmail-cf/m4/cf.m4)
define(`confDEF_USER_ID,``8:12)
OSTYPE(`Linux)
undefine(`UUCP_RELAY)
undefine(`BITNET_RELAY)
define(`confAUTO_REBUILD)
define(`confTO_CONNECT, `1m)
define(`confTRY_NULL_MX_LIST,true)
define(`confDONT_PROBE_INTERFACES,true)
define(`PROCMAIL_MAILER_PATH,`/usr/bin/procmail)
FEATURE(`smrsh,`/usr/sbin/smrsh)
FEATURE(`mailertable,`hash -o /etc/mail/mailertable)
FEATURE(`virtusertable,`hash -o /etc/mail/virtusertable)
FEATURE(redirect)
FEATURE(always_add_domain)
FEATURE(use_cw_file)
FEATURE(local_procmail)
MAILER(smtp)
MAILER(procmail)
FEATURE(`access_db)
FEATURE(`blacklist_recipients)
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not hav 24x7 DNS do need this.
FEATURE(`accept_unresolvable_domains)
dnl FEATURE(`relay_based_on_MX)
編譯sendmail.mc以產(chǎn)生需要的sendmail.cf文件:# m4 /etc/sendmail.mc > /etc/mail/sendmail.cf。
生成sendmail.cf以后,編輯sendmail.cf。在文件中,查找DS,在其后加入郵件服務(wù)器名、域名,這樣可以保證當(dāng)你以username@mail.domain.com或username@domain.com發(fā)信時(shí),用戶都可以收到,如下所示:
# Alias for this host
Cw mail.domain.com domain.com
然后,就可以啟動(dòng)Sendmail了:# /usr/sbin/Sendmail -bd -q20m。
Sendmail 8.9.x以后的版本,在缺省情況下,都默認(rèn)不對未驗(yàn)證的計(jì)算機(jī)進(jìn)行轉(zhuǎn)發(fā)(Relay),所以如果要為本機(jī)以外的其他計(jì)算機(jī)進(jìn)行郵件轉(zhuǎn)發(fā),這時(shí),應(yīng)該在相應(yīng)的配置文件中明確告訴Sendmail要對哪幾個(gè)主機(jī)進(jìn)行轉(zhuǎn)發(fā)。如果不考慮驗(yàn)證,對任何主機(jī)都進(jìn)行轉(zhuǎn)發(fā)的話,可以在sedmail.mc文件中加入一行:FEATURE(promiscuous_relay)。
不過,如果你的計(jì)算機(jī)是放在公網(wǎng)上的話,建議你不要這樣做,因?yàn)檫@樣做了以后,任何人都可以使用你的計(jì)算機(jī)進(jìn)行轉(zhuǎn)發(fā)郵件了,特別是一些別有用心的人或一些兜售客(spammer,垃圾郵件制造者)會(huì)利用你的郵件服務(wù)器的轉(zhuǎn)發(fā)功能亂發(fā)大量的垃圾郵件。
使用說明
通常情況下,Sendmail不會(huì)為郵件服務(wù)Relay信息,這樣可以防止一些有惡意的人利用別人的郵件服務(wù)器亂發(fā)郵件。缺省情況下,Sendmail關(guān)閉了Relay功能。如果你要為別的服務(wù)器Relay郵件,可以進(jìn)行如下設(shè)置——在access文件中加入要為其Relay信件的機(jī)器,格式為:
hostname RELAY
ipaddress RELAY
如果要為一個(gè)域內(nèi)多個(gè)機(jī)器Relay信件,則可以在/etc/mail/access文件中直接加入其子網(wǎng)IP或域名,如下所示:
access文件內(nèi)容:
domainname.com RELAY(允許為域domainname的所有計(jì)算機(jī)relay郵件)
localhost RELAY
192.168.1.0 RELAY (為192.168.1.0此網(wǎng)內(nèi)所有機(jī)器relay郵件)
此文件惟一決定了哪些機(jī)器、哪個(gè)域可以使用郵件服務(wù)器轉(zhuǎn)發(fā)郵件。完成后需要進(jìn)行編譯:#makemap hash access.db < access。
其他配置的文件關(guān)系不是很大,可以暫時(shí)使用缺省安裝的內(nèi)容。至此,Sendmail應(yīng)該可以正常工作了。
接下來是測試郵件服務(wù)器的郵件發(fā)送功能,注意:測試時(shí),不要只對本地用戶進(jìn)行測試,如:你的域?yàn)閍bc.com,測試時(shí),不要只在郵件服務(wù)器上測試user1@abc.com用戶。因?yàn)?,此時(shí)user1是本地用戶,所以郵件服務(wù)器可以對其進(jìn)行Relay。你應(yīng)該從局域網(wǎng)上的另一臺機(jī)器使用Outlook等郵件客戶端對服務(wù)器進(jìn)行測試。
固定IP用戶(包括跨國性公司的用戶)沒有問題,可以在數(shù)據(jù)庫中加入其固定IP。對于經(jīng)常出差在外的人,不適用。
排錯(cuò)
錯(cuò)誤1.在Outlook中正確配置POP及SMTP服務(wù)器的地址后,出現(xiàn)如下錯(cuò)誤:[!--empirenews.page--]
無法連接到服務(wù)器。賬號: 192.168.0.1,服務(wù)器: 192.168.0.1,
協(xié)議: POP3,端口: 110,安全(SSL): 否,套接字錯(cuò)誤: 10061,
錯(cuò)誤號: 0x800CCC0E
產(chǎn)生錯(cuò)誤的原因:主要原因是沒有運(yùn)行POP3D 和 IMAPD
解決方法:打開 /etc/inetd.conf 查找到
# pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
把#號刪掉。
打開 /etc/services 查找到
#pop3 110/tcp
#pop3 110/udp
將兩行最前面的#號刪掉。
這樣,在restart inetd后,pop3 110端口就可以收信了!如果還是不行,請檢查是否安裝POP3服務(wù)軟件包!
錯(cuò)誤2:很多撥號用戶會(huì)碰到以下問題:
由于服務(wù)器拒絕收件人之一,無法發(fā)送郵件。被拒絕的E-mail地址是“lcl@lettee.com.cn”。主題 ffd, 賬號: mailns.lettee.com.cn (1), 服務(wù)器: mailns.lettee.com.cn, 協(xié)議: SMTP, 服務(wù)器響應(yīng): 551 we do not relay, 端口: 25, 安全(SSL): 否, 服務(wù)器錯(cuò)誤: 551, 錯(cuò)誤號: 0x800CCC79
此錯(cuò)誤表示:Sendmail不能為你正在使用的客戶機(jī)Relay郵件。
錯(cuò)誤原因:Sendmail 8.9.3以后,缺省限制了Relay功能,主要是為了防止Spammer。使用此服務(wù)器的本地用戶可以發(fā)信,而以外的用戶不可以通過它發(fā)信了。解決方法:在access中加入客戶機(jī)的IP,重新編譯access即可。
很多朋友常犯的錯(cuò)誤是“我已經(jīng)在access中加入了郵件服務(wù)器的IP地址,也對數(shù)據(jù)庫文件進(jìn)行了makemap工作,可依然還是不行”。其實(shí)你搞錯(cuò)了,應(yīng)該加入的是客戶機(jī)的IP——試著將你的撥號PC的IP加入到access中,makemap后,你不必重新啟動(dòng)Sendmail,試試,發(fā)信成功了!
正如前面所說的,如果你是撥號上網(wǎng),下次撥號,你的IP就會(huì)改變,當(dāng)然你的郵件服務(wù)器就又不讓你發(fā)信了。如果公司的員工常要出差,到外地后,經(jīng)常是撥通當(dāng)?shù)豂SP來收發(fā)郵件。收郵件肯定沒有問題,但是,郵件目前SMTP沒有進(jìn)行口令驗(yàn)證,而郵件服務(wù)器又要進(jìn)行轉(zhuǎn)發(fā)控制,不對未記錄在數(shù)據(jù)庫中的主機(jī)轉(zhuǎn)發(fā)。所以,郵件是發(fā)不出去了。在這種情況下,如果像本文前面所說的那樣設(shè)置全部轉(zhuǎn)發(fā)功能的話,倒是可以讓撥號用戶發(fā)信,但同時(shí),帶來的問題就是會(huì)有很多Spam,實(shí)在是難以做到兩全其美。
解決以上問題有兩種方案,一種為采用SMTP認(rèn)證,即用戶發(fā)送郵件以前,郵件服務(wù)器進(jìn)行用戶身份認(rèn)證,通過則服務(wù)器為其發(fā)送郵件,否則拒絕發(fā)信;第二種方案是采用動(dòng)態(tài)轉(zhuǎn)發(fā)授權(quán)控制(Dynamic Relay authorization control),其工作原理為:撥號用戶撥號上網(wǎng)后,首先收郵件,如果用戶能正確收郵件,則DRAC自動(dòng)在access.db中加入剛才收郵件用戶的IP,并允許此IP可以發(fā)信。不過,30分鐘內(nèi),此IP不發(fā)/收郵件的話,DRAC將從access.db中刪除此IP。此種機(jī)制保證撥號用戶在沒有SMTP認(rèn)證的情況下,也可以通過遠(yuǎn)程郵件服務(wù)器發(fā)送E-mail。