歡迎您光臨本站 註冊首頁

關於sendmail.cf的簡單解釋

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  以下信息主要摘自杜毅編著的《UNIX系統組網技術》,由電子工業出版社出版。這本書主要針對SCO Unix,不過對於Unix世界的初學者它值得一讀,既然引用了人家的東西就要為它做的廣告:-) 但願沒人找我麻煩。
在整理的過程中,我發現書上所寫與TurboLinux帶的sendmail略有不同和缺漏,未經作者同意自行加上,文字也不是完全照搬。
sendmail.cf的詳細信息,請自己去/usr/doc/sendmail/下找op.ps,其中第5章把下列內容講得很詳細。

關於sendmail.cf的簡單解釋:
配置文件sendmail.cf中的信息仍舊是以行為單位。如果行首的第一個字元為「#」,則表示該行為註釋,如果第一個字元為空格則表示該行為上一行的延續。此外,行首的第一個字元均為命令,但是命令同變數或值之間沒有間隔。這種格式便於sendmail進行分析,但令我們很難閱讀。下面我們將介紹sendmail.cf配置文件中的命令:

1 D,定義宏
命令D定義宏並為其賦值。當宏被定義之後,它就負責提供提供其存儲的值給sendmail.cf文件中其他的命令使用或者直接提供給sendmail使用。宏的名字可以是任何單字元,小寫的用於sendmail內部宏,用戶創建的宏只能使用大寫字母作為名字。一些sendmail的內部宏也在sendmail.cf文件里定義。例如下面兩行定義了宏D和內部宏n:DDcs.mit.edu
DnMAILER-DEAMON則宏D的值為cs.mit.edu,宏n的值為MAILER-DEAMON.要使用宏的值時,必須在宏的名字前面加上符號"$",以這種形式來引用它的值。例如:
#my official host name
Dj$w.$D
如果宏w的值為主機名moon,此時宏j的值就為moon.cs.mit.edu,這便是本主機的全稱名(FQDN).

2 C與F,定義類
命令C與F都是用來定義sendmail的類。所謂類,實際上就是由處理方式相同的多個變數組成的數組。與宏一樣,類也使用單字元名字,大小寫規則也一樣。類可以定義在一行之中,也可以分多行定義,例如,下面的示範為內部類w賦值為系統的主機名,而系統可以有多個名字:
Cwmoon sun
Cwearth
Cwlocalhost
命令F是從文件中獲取類的值,例如,可以把moon,sun,earth保存在sendmail.cw之中,然後用F命令便可以實現同上述命令完全相同的結果:
Fw/etc/sendmail.cw對類的引用與宏的引用完全一樣,事實上宏就是一種類。兩者的唯一區別在於,宏只能有一個唯一的值,而類可以有多個值,當然也可以只有一個值。

3 O,設置選項
命令O是為sendmail的選項賦值,賦給選項的值可以是字元串、整數或布爾值,所有的選項值都是直接由sendmail來使用。需要注意的是,這裡所說的選項與sendmail使用的命令行參數不一樣。通常情況下,不需要修改這些選項。

4 T,定義可信任的用戶
命令T用來定義一組用戶列表,這組用戶可以使用sendmail帶-f參數來修改用戶發出的郵件地址。一般情況下,包含root,daemon和uucp。管理員最好不要隨意添加其他的用戶,否則這種許可權在某些用戶手中可能會對系統安全構成威脅。可信任的用戶可以在一行或多行中定義,但是被定義的用戶必須是/etc/passwd中的合法用戶。預設是:
Troot
Tdaemon
Tuucp

5 P,設置優先順序
sendmail使用命令P定義不同的優先順序來處理進入出局緩衝區的電子郵件。命令P定義的值越高,則優先順序也越高,預設的優先順序為0。負優先順序的電子郵件是不產生錯誤信息的,因此在批量發送郵件是應該定義較底的優先順序。常用的優先順序為:
Pfirst-class=0
Pspecial-delivery=100
Plist=30
Pbulk=-60
Pjunk=-100
如果用戶在發送郵件是需要指定優先順序,則需要在郵件的首部中添加Precedence,例如:
Precedence:bulk

6 K,Key File Declaration
特殊的映射可以定義成:
Kmapname mapclass arguments
mapname是可重寫規則中使用這個映射的句柄,mapclass是映射類型的名字,arguments的解釋依賴與映射類型,通常是包含映射的文件名。

7 V,Configuration Version Level
提供與老版本配置文件的兼容性能。

8 M,定義郵件傳輸程序
命令M定義郵件傳輸程序(mailer)的規格/詳細參數,其形式如下:
Mname, {field=value} sendmail並不是直接發送各種各樣的電子郵件,它首先將要發送的郵件分類,然後交給相應的mailer來發送,它本身只發送基於SMTP/TCP/IP的郵件。其中[IPC]表示使用sendmail通過smtp來傳送郵件。關於IPC mailer,在sendmail的文檔里有一段有趣的特殊解釋:當規則集0解析到IPC mailer時會處理一些特殊的過程。比如直接用IP地址發送郵件可以用[128.32.149.78]的形式,若用[ucbvax.berkeley.edu]將會怎麼樣呢?它會被作為字元串傳遞,用這樣的方法用戶可以構造一個特殊的郵件地址,使自己的郵件按指定的路線發送,而通常用戶是不關心也不知道自己的郵件的發送路線的。

9 H,定義郵件的首部格式
命令H定義sendmail插進電子郵件首部的行的格式。

10 R,定義重寫規則
重寫規則是sendmail配置文件的核心內容,每一重寫規則由命令R定義,其形式如下:
Rpattern transformation comment
命令R中的欄位由製表符進行分隔,系統處理時忽略註釋欄位(comment),模式欄位(pattern)
與改寫欄位(transformation)為該命令的核心。
重寫規則將輸入地址與模式進行匹配,如果匹配,則將該地址用規則中改寫欄位的規則重寫為新的格式。每一規則可以多次處理同一地址,這是因為地址在重寫之後,仍要再次同該模式進行匹配,如果仍舊匹配則再次改寫,直到不再匹配為止(使用"$:"可以避免無限循環)。
在Linux中格式的表達應該是:
Rlhs rhs comment
lhs--left hand side rhs--right hand side

11 S,設置重寫規則集
規則集是一組可以用數字來引用的相關重寫規則。命令S是規則集的開始並賦予它一個數字以便由郵件傳輸程序來調用。規則集可以被看作用來處理電子郵件地址的子程序或函數。具有特殊功能並可由sendmail直接調用的規則集有5個
規則集3:為最大最複雜的規則集,也是用於地址的第一個規則集。它將地址轉化為正規形式如:user@host.domain。
規則集0:應用於傳輸郵件的地址。必須在規則集3之後使用,並僅用於實際郵件傳輸中接收者的地址。它可以將地址解析成(mailer,host,user)的形式,由郵件傳輸者、接收方主機和接收用戶的名字組成。
規則集1:應用於消息中所有發送者地址。
規則集2:應用於消息中所有接收者地址。
規則集4:應用於消息中所有地址並將內部地址格式轉化為外部地址格式。
下圖說明了消息和地址通過這些規則集的流程(原書有誤):

+---+
-->+ 0 +---> resolved address
/ +---+
/
/ +---+ +---+
/ -->+ 1 +-->+ S +---
/ / +---+ +---+
+---+ / +---+ / +---+
addr --->+ 3 +---->+ D +--- --->| 4 +---> msg
+---+ +---+ / +---+
+---+ +---+ /
-->+ 2 +-->+ R +---
+---+ +---+
圖中,D--sender domain addition
S--mailer-specific sender rewriting
R--mailer-specific recipient rewriting


[火星人 ] 關於sendmail.cf的簡單解釋已經有515次圍觀

http://coctec.com/docs/linux/show-post-69973.html