使用 m4 設(shè)定 sendmail
使用 m4 設(shè)定 sendmail
一般來(lái)說(shuō),只要您在安裝完了 sendmail 之后,您的 Mail Server 就可以正式的來(lái)啟動(dòng)了!但是不幸的是,在 Red Hat 7.xx 以后的版本中(包含 Red Hat 9),為了杜絕廣告信件的問題,所以在預(yù)設(shè)的情況下,您的 sendmail 將『只會(huì)監(jiān)聽 127.0.0.1 這個(gè)接口的收發(fā)信件需求!』至于非 Red Hat 版本的 sendmail 則可以正常的來(lái)啟動(dòng)喔!為了解決這個(gè)問題,所以我們勢(shì)必要針對(duì) sendmail.cf 這個(gè)設(shè)定檔案來(lái)進(jìn)行修訂,但是這個(gè)檔案原本即建議需要由 m4 來(lái)進(jìn)行修改,所以,我們就得了解一下使用 m4 來(lái)轉(zhuǎn)換成為 sendmail.cf 的設(shè)定檔 file.mc 的相關(guān)參數(shù)啰!
一、建立 M4 參數(shù)檔:
m4 的參數(shù)檔通常檔名均取為 filename.mc 這樣的附檔名格式,你可以在 /usr/share/sendmail-cf/cf 里面找到相當(dāng)多的范例檔案喔!例如 Red Hat 的設(shè)定范例文件為 /usr/share/sendmail-cf/cf/redhat.mc (如果是 Red Hat 7.3 以后版本,含 Red Hat 9 ,這個(gè)檔案則放置在 /etc/mail/sendmail.mc 喔!)。這個(gè)環(huán)境參數(shù)設(shè)定文件的設(shè)定項(xiàng)目很多,其格式為:
設(shè)定組件(`設(shè)定項(xiàng)目', `參數(shù)一', `參數(shù)二')
仔細(xì)看到上面的例子當(dāng)中,在設(shè)定的組件后面接上小括號(hào),而小括號(hào)內(nèi)則為該設(shè)定組件的項(xiàng)目?jī)?nèi)容,以及該項(xiàng)目?jī)?nèi)容的參數(shù)!而將設(shè)定項(xiàng)目與各參數(shù)包起來(lái)的『并不是單引號(hào)』,要注意的是,在『設(shè)定項(xiàng)目』左右兩邊的:
1. 左邊的是 quod ,也就是鍵盤上面數(shù)字鍵 1 的左邊那個(gè)按鍵『`』;
2. 右邊的才是單引號(hào)『'』。
這里很容易被搞錯(cuò)!請(qǐng)?zhí)貏e注意,而每個(gè)設(shè)定項(xiàng)目與參數(shù)之間,則是以逗號(hào)『,』來(lái)做為分隔喔!底下我們談一談幾個(gè)主要的設(shè)定組件與各個(gè)設(shè)定組件底下的設(shè)定項(xiàng)目吧!
divert :這個(gè)組件僅是在于提供『是否要將說(shuō)明數(shù)據(jù)(或者是批注數(shù)據(jù))寫入輸出的檔案中』而已,如果在 filename.mc 檔案當(dāng)中具有批注符號(hào)時(shí),(注意, *.mc 的批注符號(hào)可以是 # 也可以是 dnl 這個(gè)字符串!)而你輸出資料時(shí)不想將這些說(shuō)明資料也輸出,那就可以使用 divert (-1) 。反之,如果你想將這些說(shuō)明數(shù)據(jù)同時(shí)輸出,那就使用 divert (0)。由于我們不想要手動(dòng)修改 sendmail.cf ,所以輸出的數(shù)據(jù)當(dāng)然就不太需要注明啦!只要在環(huán)境設(shè)定檔 *.mc 里面說(shuō)明清楚即可!因此,你應(yīng)該會(huì)常常在檔案當(dāng)中看到 diver (-1) 才對(duì)!范例為:
divert (-1)
OSTYPE:這個(gè)組件功能在設(shè)定使用的操作系統(tǒng)類別! Sendmail 預(yù)設(shè)提供數(shù)種操作系統(tǒng)的模式,你可以在 /usr/share/sendmail-cf/ostype 這個(gè)目錄當(dāng)中找到所支持的操作系統(tǒng)模式。因?yàn)槲覀兪鞘褂?Linux ,所以范例為:
OSTYPE(`linux')
define:這個(gè)組件的作用比較多喔!他可以定義出許多有用的 sendmail 需要的參數(shù),舉個(gè)例子來(lái)說(shuō),如果我要將郵件別名設(shè)定檔放置在 /etc/aliases 底下,那么我可以使用底下的范例:
define(`ALIAS_FILE', `/etc/aliases')
那個(gè) ALIASE_FILE 就是主要的設(shè)定項(xiàng)目啦!而這個(gè)項(xiàng)目主要規(guī)定郵件者別名的檔案所在地,所以啰,后面就直接接上完整的文件名稱啦!更多詳細(xì)的 define 說(shuō)明,可以參考您計(jì)算機(jī)中的 /usr/share/sendmail-cf/README 這個(gè)檔案喔!
undefine:恰恰與 define 相反啦! Sendmail 預(yù)設(shè)會(huì)支持定義很多的項(xiàng)目,而如果您不需要定義該項(xiàng)目,則可以使用 undefine 來(lái)將他移除掉喔!例如:
undefine(`UUCP_RELAY')
FEATURE:這個(gè)組件 FEATURE 字面上的意思是『特征、特色』,那也就是說(shuō),這個(gè)組件里面會(huì)規(guī)定出 sendmail 所額外新增的一些任務(wù)啦!這些任務(wù)的支持必需要 sendmail 有提供才可以!你可以在 /usr/share/sendmail-cf/feature 這個(gè)目錄當(dāng)中找到 sendmail 所提供的各個(gè)功能喔!舉個(gè)例子來(lái)說(shuō),如果我們要規(guī)定 sendmail 存取權(quán)限設(shè)定的檔案,也就是 /etc/mail/access.db 時(shí),你可以這樣寫:
FEATURE(`access_db',`hash -o /etc/mail/access.db')
注意:上面 access_db 是某個(gè)任務(wù)的項(xiàng)目,而后面接的 hash 是數(shù)據(jù)庫(kù)格式,至于 sendmail 所使用的數(shù)據(jù)庫(kù)則是 /etc/mail/access.db !更多的 FEATURE 相關(guān)設(shè)定項(xiàng)目可以參考 /usr/share/sendmail-cf/README
MAILER:這個(gè)組件在設(shè)定所使用的郵件主機(jī)傳送郵件(遞送, delivery)的代理人,一般而言,我們的代理人都是 smpt 協(xié)議啊,不過(guò),如果我們主機(jī)內(nèi)的用戶(主機(jī) /etc/passwd 存在的實(shí)體用戶)想要使用 sendmail 來(lái)寄信,那是否仍然要透過(guò) smtp 這個(gè)代理人呢?不太需要的, sendmail 本身就提供發(fā)信的功能,而要讓主機(jī)上面的實(shí)體用戶可以在登入主機(jī)環(huán)境的中使用 sendmail ,那你就必需要啟動(dòng) local 這個(gè)本地端的郵件遞送功能啦!因此,通常這個(gè)組件會(huì)設(shè)定為:
MAILER(local)
MAILER(smtp)
如此一來(lái),當(dāng) sendmail 發(fā)現(xiàn)信件來(lái)自于主機(jī)內(nèi)部,那就會(huì)使用 local 來(lái)傳送信件,當(dāng)信件來(lái)自于主機(jī)外部時(shí),那才會(huì)使用 smpt 協(xié)議來(lái)寄信喔!未來(lái)還可以新增 procmail 這個(gè) MDA 呢! sendmail 支持的 MAILER 可以在 /usr/share/sendmail-cf/mailer 這個(gè)目錄中查詢的到!
各個(gè)設(shè)定組件我們先介紹到這里,至于更詳細(xì)的說(shuō)明,請(qǐng)務(wù)必到 /usr/share/sendmail-cf/README 這個(gè)檔案當(dāng)中尋找!
#p#
二、m4 程序的執(zhí)行
m4 程序在執(zhí)行的時(shí)候,必需要先讀入相關(guān)的參數(shù)項(xiàng)目才行,這個(gè)參數(shù)項(xiàng)目在 /usr/share/sendmail-cf/m4/cf.m4 這個(gè)檔案當(dāng)中,因此,如果你的 *.mc 檔案里面沒有這一行:
include(`/usr/share/sendmail-cf/m4/cf.m4')
那么你就必需要執(zhí)行兩個(gè)檔案的 m4 轉(zhuǎn)換,否則只要執(zhí)行一個(gè)即可!假設(shè)您的 m4 script 檔名為 redhat.mc ,那么您可以這樣轉(zhuǎn)換 sendmail 所需要的 sendmail.cf ;
Red Hat 7.2 以前版本:
1. 若 redhat.mc 里面沒有 include 的項(xiàng)目,則:
[root@test root]# cd /usr/share/sendmail-cf/cf
[root@test cf]# m4 /usr/share/sendmail-cf/m4/cf.m4 \
> redhat.mc > redhat.cf
2. 若 redhat.mc 里面已經(jīng)包含了 include 的項(xiàng)目,則:
[root@test cf]# m4 redhat.mc > redhat.cf
Red Hat 7.3 (含 Red Hat 9) 以后版本:
1. 若 sendmail.mc 里面沒有 include 的項(xiàng)目,則:
[root@test root]# cd /etc/mail
[root@test mail]# m4 /usr/share/sendmail-cf/m4/cf.m4 \
> sendmail.mc > redhat.cf
2. 若 sendmail.mc 里面已經(jīng)包含了 include 的項(xiàng)目,則:
[root@test mail]# m4 sendmail.mc > redhat.cf
上面制作而成的 redhat.cf 就是 sendmail.cf 的內(nèi)容啦!然后請(qǐng)將你的 sendmail.cf 備份,舉個(gè)例子來(lái)說(shuō), Red Hat 的 sendmail.cf 在 /etc/ 底下,所以我可以這樣做:
[root@test cf]# mv /etc/sendmail.cf /etc/sendmail.cf.old
[root@test cf]# cp redhat.cf /etc/sendmail.cf
# 若是 Red Hat 7.3 以后版本,則
[root@test mail]# cp redhat.cf /etc/mail/sendmail.cf
這樣就成功得用M4設(shè)定sendmail啦!
【編輯推薦】
- Sendmail配置策略
- Linux 下sendmail的配置
- Thunderbird的安裝方法
- Sendmail配置筆記之啟動(dòng)服務(wù)器
- sendmail的安裝方法
- Postfix的配置