?? 電子郵件概述.htm
字號:
因此如果hostC作HostA和HostB的MX,可配置dns如下:
hostA IN MX 0 hostB
IN MX 10 HostC
hostB IN MX 0 HostB
IN MX 10 HostC
. 廣義符MX記錄
*.dom.com. IN MX 10 hostA
不建議使用,因為容易引起混亂:
;domain is domain.com
*.domain.com. IN MX 10 hostB
hostA IN MX 10 hostC
hostC IN A 123.45.67.89
在Internet上廣義符MX記錄基本上沒有任何作用.
(5) MX記錄之緩存作用
雖然并不要求所有的主機均需要指定MX記錄,但最好對每個主機指定一個MX記錄。
假設有下面這樣一個DNS記錄(只有A記錄):
HostA IN A 123.45.67.89
當sendmail第一次查找此主機時,它將會查詢本地的DNS服務器以得到HostA的所
有記錄,由于只有一個A記錄,sendmail只得到HostA的主機地址。
但是應該知道的是請求所有的記錄會使本地DNS服務器將這些信息cache起來,當
下一次sendmail查詢同一主機時,DNS將從其cache中返回一個A記錄,這要比重新查找
快并且能夠減少Internet上的網絡流量。這個cache信息是一個非權威(noauthoritative)
數據,因為它只是一個拷貝,并且不包含任何MX記錄。
當sendmail接收到一個沒有MX記錄的非權威數據時,sendmail會強制進行一次DNS
查找,這次它指定查找MX記錄,此時仍然沒有MX記錄,因此sendmail也得不到相應的
MX記錄。
由于HostA沒有MX記錄,每當向此主機發送信件時都需要進行一次DNS查找,如果
HostA是一個郵件任務非常繁忙的郵件主機,由于沒有DNS數據中的MX記錄,在Internet
上會導致很多sendmail因為請求這種無意義的MX查詢而浪費很多帶寬。
因此強烈建議對于Internet上的每個郵件主機(最好所有主機)至少有一個MX記錄,
這時你可以將MX記錄指向主機本身,如:
HostA IN A 123.45.67.89
IN MX 0 HostA
上面的配置不會影響HostA的郵件接收,但可以減少DNS的查詢數量。
(6)含糊的MX記錄(RFC974)
對于如下DNS配置:
foo IN MX 10 HostA
IN MX 20 HostB
IN MX 30 HostC
如果主機B向foo發信時,將會丟棄DNS記錄中所有權值等于或大于自身權值的MX記錄,
也就是說信件將發信較HostB的權值小的主機, 這樣可以防止HostB錯誤的將信件發送
給自己。
可以配置HostB將foo作為本地主機的一個別名,但這種配置會導致HostB對foo將不
作任何MX記錄的查找,因為它認為到foo的郵件是本地郵件。
問題是如果HostB的配置認為foo為非本地郵件時,如果存在如下DNS配置:
;<- no HostA
IN MX 20 HostB ;<- Mail from HostB to foo
IN MX 30 HostC
按照RFC974的解釋,這時將會出現問題,因為沒有MX記錄,sendmail對此可以使用
選項TryNullMXList(w)進行控制(具體說明略).
4. 郵件頭地址(Head Address)和信封(envelope)地址
二者的區分相當重要,因為Mail Router對其處理不同,這與郵局對普通信件的處
理很相似,郵局只關心信封上的地址,而不管信封內復印件中的標頭地址。
在這一點上SMTP Client與郵局工作極為相似。示例如下:
To: betty@gznet.edu.cn, webmaster@sun.com
發信時只復制一個地址到信封,而不是二者均復制;否則會造成重復發送
(gznet.edu.cn會發送一份到sun.com).
解決方法:
在郵件信封中只列出一個主機的接收者地址,如同郵局寄信一樣,一封信可以寄
給一個辦公室的兩個人,但接收者收到的郵件頭中會列出所有收信人的地址,但MTA
不對其作任何處理。
此外郵件別名的使用也是影響對兩個地址分別處理的一個原因,假如aliasuser含有
4個用戶: user1, user2,user3,user4, 向aliasuser發信時sendmail會將此別名進行展
開,并建立一個包含所有接收者的信封。根據這些名字是否還是別名或者是否有可能在
其他主機上,原始信息可能展開為4個不同的信封并發往4個不同的主機,而每個信封只
含有接收者名字,但原始信息將沒有任何變化,含有aliasuser(當然,為了能夠正確回
信,郵件地址改為aliasuser@your.dost.domain)。
下面的一個示例將以另一種方式顯示信封地址可能與信件頭地址不同,sendmail
允許你在命令行上指定接收者地址,假設有如下信息內容:
$cat letter
To: null recipient <>
Subject: Head and Envelope address
Testing
通過如下命令發送此郵件(請使用自己的真實login).
$sendmail hbwork < letter
這時雖然在郵件頭中沒有收信人地址,但你同樣可以收到信件,因為在信封上含有
你的地址,除非你使用了-t標志,sendmail將用你在命令行上指定的地址構造信封。
信封地址與郵件頭地址不一定要完全一樣。
四. sendmail所完成的工作
為了更好地理解如何設置sendmail, 需要搞清楚sendmail所完成的各種任務,以
及sendmail是如何與其他MUA一起協調工作的.(MUA,MTA,Mail Router, Delivery Agent,
SMTP Client, SMTP Server). sendmail可以作為一個Mail Router, SMTP Client以及
SMPT Server, 但并不完成最后的郵件發送.
1. sendmail作為郵件路由(Mail Router)
首先, sendmail是一個Mail Router, 完成郵件收集,檢查收信人地址,并確定發送的
最佳方式. sendmail是通過如下方式完成這一工作的:
sendmail自身可以得到一些它所需要的信息,比如當前時間以及它所運行的主機名,
但大多數信息則需要由管理員提供;這些信息主要是通過其配置文件sendmail.cf文件
提供. sendmail.cf文件的使用使得對sendmail的配置極為靈活,同時也具有了相當強
大的功能,但sendmail.cf文件對于大多數用戶而言相當難懂, 格式及其復雜.此文件
描述了如何對各種郵件進行處理, 從sendmail v8開始,其源代碼發行中包含了一些
低層的模塊化配置文件,用戶可以通過這些模塊化的配置文件較為方便的定制自己的
sendmail.cf.
大多數情況下可以利用sendmail所提供的模塊化配置很容易地建立自己的配置
文件; 同時sendmail.cf也提供了很多示例文件,在進行sendmail配置時完全可以在
這些示例文件的基礎上完成.
對于絕大多數管理員而言,從頭開始寫自己的sendmail.cf文件是幾乎不可能實現也
是一件非常可怕的任務,應盡可能避免這種情況.
2. sendmail作為MTA - 客戶端(發送者)和服務器(接收者)
郵于sendmail能夠處理SMTP(V8同時可以處理ESMTP),因此它可以作為MTA. 由于SMTP
是一個面向連接的協議,因此總是由客戶端和服務器組成(與就是一個發送者和一個接收
者). SMTP Client向SMTP Server發送郵件,SMTP Server不斷地監聽相應主機的SMTP
端口. sendmail可以作為SMTP Client和SMTP Server,當作為MUA運行時, sendmail
成為一個SMPT Client, 可以和SMTP Server(運行的不一定是sendmail)進行SMTP對話.
當系統啟動時sendmail以守護進程啟動,保持連續運行,監聽SMTP端口以接收進行
的郵件,這時sendmail成為SMTP Server.
3.sendmail不是最終的發送代理
sendmail并不完成最終的投遞工作, sendmail會很聰明地將這些任務留給其他程序
去完成.作為一個龐大而又復雜的程序,為了完成對所有用戶的郵件發送,sendmail通常
需要以root身份運行,在一定程度上這會給系統的安全帶來威脅(事實上sendmail過去
一直存在安全方面的問題),如果最后的郵件發送也由sendmail完成的話,將會額外增加
sendmail的復雜性及安全問題.
五. sendmail的其他輔助文件
sendmail依靠多個輔助文件來完成其工作,最重要的是配置文件sendmail.cf和別名
文件aliases; 統計文件sendmail.st可有可無, 當然這取決于你是否需要這些統計資料;
sendmail.hf是SMTP幫助文件,當sendmail作為SMTP Server時需要這個文件(大多數站點
也確實是這樣作的).當然此外還有其他一些輔助文件,具體請參考SIOG.下面我們對別名
文件和sendmail.cf文件進行討論.
1. 別名文件
sendmail在進行郵件發送之前首先檢查接收者地址是否為別名,如每個Internet站點
應該有一個郵件管理員postmaster,以方便在郵件故障時與其聯系,但實際上大多數站點
上并沒有postmaster這個用戶帳號,而是將postmaster的信件轉給郵件管理員個人,比如
albin與hbwork兩個個負責管理Email,則在別名文件中應含有如下一行:
postmaster: albin,hbwork
事實上別名文件可以嵌套,sendmail在進行別名替換時會重復處理直到找到最后的接
收者.
在別名文件中,左邊必須是本地上的郵件別名,因此不能使用@主機,只能列出帳號,
右邊則可以使用完全的郵件地址.
此外郵件別名文件中可以包含另外一個文件,如:
alises::include:/etc/mail/filealiases
文件/etc/mail/filealiases中每行為一個郵件地址. 通常文件用于保存經常變化
的郵件列表用戶,可者是其他管理所管理的帳號.
其他兩種郵件別名記錄:
使用管道將郵件轉到其他程序處理:
list-request:|/usr/local/bin/auto_reply
轉到其他文件:
nobody: /dev/null
相關命令:
更改別名文件后使用newaliases或sendmail -bi建立郵件別名文件的二進制數
據文件.
2. 本地主機名文件
定義類$w,即本主機所要接收郵件的主機名列表,如希望郵件服務器接收如下形式的
郵件:user@hosta.dlut.edu.cn, user@dlut.edu.cn, user@dlrin.edu.cn, 則類$w應該
包包含hosta.dlut.edu.cn, dlut.edu.cn, dlrin.edu.cn, 通常此文件名為
sendmail.cw,可通過如下查找:
$egrep "^Fw" sendmail.cf
Fw/etc/mail/sendmail.cw
如上所述情況的sendmail.cw文件內容如下(每行一個記錄):
hosta.dlut.edu.cn
dlut.edu.cn
dlrin.edu.cn
3. 郵件服務器允許中斷的域或主機(hosts that will permit relaying).
從sendmail 8.9開始加強了對出件中繼的控制,默認情況下不對第三方進行郵件轉發,
需要指定服務器所接受的客戶端(PC?)域名或ip地址,以允許本網內的其他用戶通過此
郵件服務器向外發信.
$egrep "^FR" /etc/mail/sendmail.cf
FR-o /etc/mail/relay-domains
此文件內容為郵件服務器同意對其進行郵件轉發的主機地址或域名,如同一局域網內
的用戶或同網域內的用戶通過此郵件服務器向外發信(Netscape Mail/Microsoft Outlook
Express 配置中的SMTP Server), 則在此文件中應該加入本網絡用戶的域名或IP地址,
如:
dlut.edu.cn
202.118.66
具體說明請參考sendmail SIOG.
4.常用文件及目錄屬性
從sendmail 8.9以后對目錄的權限檢查更為嚴格,下面是常見目錄的屬性:
路徑 類型 Owner Group Mode
/ 目錄 root root 0755
/etc 目錄 root root 0755
/etc/mail 目錄 root root 0755
/etc/mail/sendmail.cf 文件 root root 0644 or 0640
OS/etc/mail/sendmail.st 文件 root root 0644
OH/etc/sendmail.hf 文件 root root 0444
OA/etc/mail/aliases 文件 root root 0644
/etc/mail/aliases.* 文件 root root 0644
F/path 目錄 root root 0755
F/path/file 文件 n/a n/a 0444 or 0644
/var 目錄 root root 0755
/var/spool 目錄 root root 0755
OQ/var/spool/mqueue 目錄 root root 0700
:include:/path 目錄 root root 0755
:include:/path/list 文件 n/a n/a 0644
--
[m[1;34m※ 來源:.碧海青天 bbs.dlut.edu.cn.[FROM: helius.dlut.edu.][m
</PRE></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -