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