Linux 下sendmail的配置
在 Linux 系統(tǒng)的自動(dòng)化管理中,利用腳本自動(dòng)發(fā)送郵件的功能對(duì)系統(tǒng)監(jiān)控的工作來(lái)說(shuō)是非常重要的。系統(tǒng)管理人員可以利用 cron 或者 RMC 來(lái)創(chuàng)建監(jiān)控腳本,一旦觸發(fā)條件被滿足,操作系統(tǒng)就會(huì)自動(dòng)創(chuàng)建電子郵件,將相關(guān)的狀態(tài)信息發(fā)送到指定的郵箱。通過(guò)電子郵件系統(tǒng),系統(tǒng)管理人員就能夠及時(shí)得獲取被管理系統(tǒng)的狀態(tài),進(jìn)而采取相應(yīng)的措施。這種方式可以顯著地節(jié)省系統(tǒng)管理人員的工作強(qiáng)度,并能夠提高系統(tǒng)的可維護(hù)性。本文主要介紹的是Linux下sendmail的配置。
一、配置文件
在 Linux 系統(tǒng)中,Sendmail 包括如下配置文件:
/etc/sendmail.cf
/etc/mail/access
/etc/mail/aliases
/etc/mail/local-host-names
/etc/mail/mailertable
/etc/mail/virtusertable
/etc/mail/domaintable
~/.forward
/etc/sendmail.cf 是 sendmail 的主配置文件。該文件存儲(chǔ)了正在運(yùn)行的 mailer 程序的類(lèi)型信息,定義了重寫(xiě)郵件地址的規(guī)則和 sendmail 命令的操作環(huán)境。因?yàn)?sendmail.cf 的語(yǔ)法比較復(fù)雜,我們一般不建議手動(dòng)修改該配置文件。安裝了 sendmail 的 UNIX/Linux 系統(tǒng)都會(huì)帶有 sendmail.cf,而且該配置文件在大多數(shù)情況下都不需要修改就可以使用。如果用戶確實(shí)需要修改 sendmail.cf 配置文件 , 一般建議用戶基于 sendmail.mc 宏文件,利用 m4 程序來(lái)生成新的 sendmail.cf 文件。
在 RedHat Linux 系統(tǒng)中,sendmail.mc 宏文件位于 /etc/mail/ 目錄。
而 SuSE Linux 系統(tǒng)并沒(méi)有 sendmail.mc 文件,相應(yīng)的,它提供了 /etc/mail/linux.mc ( 或者 /etc/mail/linux.nullclient.mc) 替代 sendmail.mc。/etc/mail/linux.mc 是 SuSEconfig 使用 /etc/rc.config 和 /etc/rc.config.d/sendmail.rc.config (SuSE <= 7.3) 或者 /etc/sysconfig/sendmail (SuSE >= 8.0) 的參數(shù)而生成的宏文件。SuSEconfig 執(zhí)行 /sbin/conf.d/SuSEconfig.sendmail 腳本來(lái)構(gòu)建 .mc 文件,并執(zhí)行 m4 來(lái)生成 sendmail.cf 配置文件。用戶可以依照清單 1 所示的 SuSEconfig.sendmail 命令來(lái)生成配置文件。
清單 1. 使用 SuSEconfig.sendmail 命令生成配置文件
/ sbin/conf.d/SuSEconfig.sendmail -m4 > sendmail.mc
在 sendmail.mc 配置文件中經(jīng)常出現(xiàn)如下的 m4 命令:
define:
用于定義配置文件中變量的值
divert:
用于定向 m4 進(jìn)程的輸出。
divert 被設(shè)置為 -1 時(shí) , 取消輸出。如果 divert(-1) 在一個(gè)文本塊的前面出現(xiàn),這段文本將不會(huì)再 sendmail.cf 中出現(xiàn) . divert 被設(shè)置為 0 時(shí)來(lái)定向數(shù)據(jù)流的輸出,如 sendmail.cf,
VERSIONID:
配置文件定義版本控制信息。
dnl:
注釋掉后面的所有字符。
dnl 出現(xiàn)在行尾,表示將清除掉不想要的空白行;dnl 出現(xiàn)在行首,表示這一行將被當(dāng)成注釋。
DOMAIN:
選擇傳輸郵件的域。
FEATURE:
識(shí)別配置文件中一個(gè)特性 (Feature)。
MAILER:
識(shí)別包含在 sendmail.cf 一套郵件傳輸方法。
OSTYPE:
定義宏所使用的操作系統(tǒng),它允許 m4 程序增加同相關(guān)操作系統(tǒng)相關(guān)的文件。
undefine:
清除配置文件中的變量值。
需要注意的是,m4 宏處理器生成的 sendmail.cf 文件必須放在 /etc/ 目錄 , 而非 /etc/mail。具體的操作如清單 2 所示。
清單 2.m4 命令生成配置文件 sendmail.cf
cp /etc/sendmail.cf /etc/sendmail.cf.bak
m4 sendmail.mc > sendmail.cf
在用戶修改完成 sendmail.cf 配置文件以后,最后一步操作是重新啟動(dòng) sendmail 服務(wù),具體的操作如清單 3 所示:
清單 3. 重啟 sendmail 服務(wù)
service sendmail restart
/etc/mail/access 和 access.db
access 數(shù)據(jù)庫(kù)是由 sendmail V8.9 版本引入的特性, 并在 V8.10 重得到很好的發(fā)展。它提供了一個(gè)單一集中管理的訪問(wèn)規(guī)則數(shù)據(jù)庫(kù);它可以基于發(fā)信者的姓名、地址或者 IP 來(lái)判斷是否接受 (OK)、轉(zhuǎn)發(fā) (RELAY)、拒絕 (REJECT) 或者取消 (DISCARD)。sendmail 會(huì)在接收郵件時(shí)進(jìn)行規(guī)則判斷,默認(rèn)情況下只接受本機(jī)發(fā)送的郵件。
對(duì)本地設(shè)置來(lái)說(shuō),/etc/mail/access 和 access.db 并不是必需的;只有在建立中央郵件集中服務(wù)器來(lái)處理所有郵件的時(shí)候才需要這兩個(gè)文件。
access 數(shù)據(jù)庫(kù)的配置主要有三個(gè)步驟,具體操作如下所示。
修改 /etc/mail/access 文件;修改后的內(nèi)容如清單 4 所示。
清單 4./etc/mail/access 文件內(nèi)容
localhost.localdomain RELAY
localhostRELAY
127.0.0.1RELAY
192.168.1RELAY
利用 /etc/mail/access 創(chuàng)建數(shù)據(jù)庫(kù)映射文件 access.db,命令如清單 5 所示。
清單 5. 生成數(shù)據(jù)庫(kù)映射文件 access.db
makemap hash /etc/mail/access.db < /etc/mail/access
重啟 sendmail, 讀取 access.db,具體的命令如清單 3 所示。 service sendmail restart
/etc/mail/aliases 和 aliases.db
aliases 是 sendmail 郵件系統(tǒng)的別名數(shù)據(jù)庫(kù)。它可以定義郵遞列表,在機(jī)器之間轉(zhuǎn)發(fā)郵件,或者允許用多個(gè)名字指定一個(gè)用戶。因?yàn)?Aliases 別名處理的規(guī)則是遞歸的,所以一個(gè)別名指向的目的地也可以是別名。對(duì)于每個(gè)信封,sendmail 都會(huì)在別名文件中查找本地用戶的收件人名稱(chēng)。由于 Sendmail 的可能要在 aliases 文件中搜索數(shù)以千計(jì)的收件人名稱(chēng),所以一個(gè)以 DB 數(shù)據(jù)庫(kù)格式存儲(chǔ)的 aliases 文件副本被創(chuàng)建,并用來(lái)提高查詢的速度。
同樣,這兩個(gè)配置文件也不是必需的。如果 sendmail 是使用中央服務(wù)器的郵件處理中心處理所有郵件的話,安裝在鄰居服務(wù)器或客戶機(jī)的 aliases 和 aliases.db 文件就不需要了。 aliases 數(shù)據(jù)庫(kù)的配置主要有三個(gè)步驟,如下所示。
1.修改 /etc/mail/aliases。修改后的內(nèi)容如清單 6 所示。
清單 6. 修改后的 aliases 文件
- # Basic system aliases that MUST be present.
- postmaster: root
- mailer-daemon: postmaster
- # amavis
- virusalert: root
2.根據(jù) /etc/mail/ aliases 來(lái)創(chuàng)建數(shù)據(jù)庫(kù)映射文件 aliases.db,該命令如清單 7 所示。
清單 7. 創(chuàng)建數(shù)據(jù)庫(kù)映射文件 aliases.db
- makemap hash /etc/mail/aliases.db < /etc/mail/aliases
3.重啟 sendmail,讀取 aliases.db,具體的命令如清單 3 所示。
- service sendmail restart
二、其他配置文件
除了上文中介紹的配置文件以外,sendmail 還使用了其他的一些配置文件,本節(jié)將逐一介紹這些配置文件。
/etc/mail/local-host-names
設(shè)置服務(wù)器提供服務(wù)的域名,即本地主機(jī)名的主機(jī)名列表。該文件被修改后,sendmail 必須重新啟動(dòng)來(lái)更新設(shè)置;
/etc/mail/virtusertable 和 virtusertable.db
virtusertable 數(shù)據(jù)庫(kù)用于映射虛擬域到新的地址。這個(gè)特性可以使網(wǎng)絡(luò)上的虛擬域郵件被投遞到本地系統(tǒng)、遠(yuǎn)程系統(tǒng)或者單一用戶地址。/etc/mail/virtusertable 被修改以后,我們可以使用 makemap 命令來(lái)生成 /etc/mail/virtusertable.db。 同樣,該文件被修改后,sendmail 必須重新啟動(dòng)來(lái)更新設(shè)置。
/etc/mail/domaintable 和 domaintable.db
domaintable 數(shù)據(jù)庫(kù)用于映射舊域名到新域名。這個(gè)特性使得網(wǎng)絡(luò)上多個(gè)域名可以由舊域名重寫(xiě)到新域名中。/etc/mail/domaintable 文件被修改后,我們可以利用 makemap 命令來(lái)生成 /etc/mail/domaintable.db。同樣,該文件被修改后,sendmail 必須重新啟動(dòng)來(lái)更新設(shè)置。
/etc/mail/mailertable 和 mailertable.db
mailertable 數(shù)據(jù)庫(kù)通過(guò)一種特殊的郵寄程序,把尋址到特定主機(jī)(或域)的郵件重定向到替代的目的地。這個(gè)特性使得網(wǎng)絡(luò)上的郵件可以通過(guò)特殊的投遞代理被投遞到一個(gè)新的本地域名或遠(yuǎn)程域名。/etc/mail/mailertable 被修改后,我們可以利用 makemap 命令生成 /etc/mail/mailertable.db。同樣,該文件被修改后,sendmail 必須重新啟動(dòng)來(lái)更新設(shè)置。
~/.forward
普通用戶可以通過(guò)主目錄下的 .forward 文件來(lái)實(shí)現(xiàn)郵件的別名和轉(zhuǎn)發(fā)等功能。
三、驗(yàn)證 sendmail 服務(wù)
我們可以通過(guò) telnet 程序來(lái)訪問(wèn) localhost 的 25 端口,從而可以驗(yàn)證 sendmail 服務(wù)是否正常啟動(dòng)。如果能夠登陸成功,則說(shuō)明 sendmail 服務(wù)已經(jīng)成功啟動(dòng)。具體的驗(yàn)證過(guò)程如清單 8 所示。
清單 8. 驗(yàn)證 sendmail 服務(wù)
- linux:~ # telnet localhost 25
- Trying 127.0.0.1...
- Connected to localhost.
- Escape character is '^]'.
- 220 linux ESMTP Sendmail 8.13.6/8.13.6/SuSE Linux 0.8; Sat, 12 Sep 2009 14:37:24 -0700
- ehlo localhost
- 250-linux Hello localhost [127.0.0.1], pleased to meet you
- 250-ENHANCEDSTATUSCODES
- 250-PIPELINING
- 250-8BITMIME
- 250-SIZE
- 250-DSN
- 250-ETRN
- 250-DELIVERBY
- 250 HELP
【編輯推薦】