## 22.1 郵件服務器的功能與運作原理
電子郵件是個啥玩意兒?它是利用網絡傳遞一些信息給遠程服務器的一種信息傳遞行為,雖然消息正文是很冷很硬的計算機文字, 確實比不上手寫信件來的讓人覺得溫暖,不過,對于具有時效性的信息來說,電子郵件可是個不可多得的好幫手! 但是,電子郵件系統蓬勃發展的現在卻被某些少部分的特定人士所亂用,導致垃圾信件、色情廣告信件等等的泛濫! 真是啊~傷腦筋~底下我們就先來談一談這個電子郵件相關的功能吧!
**Tips:** 時至今日,Google 與幾個大型的網絡公司都有提供免費或者是付費的郵件服務器,其中,免費的電子郵件賬號甚至已經提供高達數個 GB 的郵件儲存量!對于一般用戶來說真是非常夠用了!因此,除非必要,現在我們都『不建議您架設 mail server』的! 因為玩過郵件主機的朋友都很清楚,在現在的環境當中想要搞定 Mail server 是很難的一件事情, 除了目前網絡社會的廣告信、垃圾信、病毒信實在是多的不象話,所以各主要的 ISP 對于郵件控管上面越來越嚴格, 而且基本功當中的 mail vs. DNS 相關性又太高!很難理解~

* * *
### 22.1.1 電子郵件的功能與問題
在目前的社會當中,沒有電子郵件 (e-mail) 似乎是蠻奇怪的一件事!可以說,現在 e-mail 已經成為一個很普遍的人與人之間的溝通管道了, 電子郵件可以很快速的幫你將文件或訊息傳送到地球上的任何一個有網絡存在的角落,當然, 你也可以在任何有網絡的地方,連上 Internet 去收取你的信件!
不過,遺憾的是,只要是有人類的地方,就會有很多你意想不到的事情會出現了,當然 e-mail 也不例外,怎么說呢? 我們來慢慢的分析一下電子郵件產生的一些問題吧:
* 夾帶病毒的電子郵件問題:
你可以常常聽到電子郵件可能夾帶病毒對吧!沒錯,利用電子郵件以及人們對于電子郵件的漫不經心的態度, 使得以電子郵件為媒介的計算機病毒更容易『深入人群』當中吶!
* 怪客透過郵件程序入侵:
只要在 Internet 上面跑的數據就沒有絕對保密的!你可以輕易的使用怪客軟件 (Cracker) 就可以取得使用者在利用 e-mail 傳送過程當中所輸入的賬號與密碼,若經過分析之后,還可能破解對方的郵件主機~哇!真是亂可怕一把的!
* 廣告信與垃圾信等:
這個可說是目前各大 ISP 心中永遠的痛~這些垃圾信件可以占掉很多那少的可憐的帶寬, 使得正常用戶連接速度與質量下降,更可能造成網絡的停頓~當然,常常收到垃圾信件的你,大概也不好過吧!
* 主機被大量不明信件塞爆:
萬一你沒有將郵件服務器設定好,嘿嘿!送信者可以藉由你主機收信的功能,發送大量的信件, 讓你『一次收個夠!』灌爆你的服務器硬盤,想要不當機都粉難~
* 真實社會的討厭情事:
『黑函』!聽到會不會很害怕?當然很害怕啦!偏偏使用 e-mail 就可以作很多的壞事~這真是太不道德了~
* 不實的信件內容:
只要注意到消基會的訊息就可以知道啦,不明來源的電子郵件說的內容,不要輕易的相信! 因為很多可是以訛傳訛,結果,大家都被耍了的~例如,你的朋友收到一封信,認為『哇!這是大事情』, 所以在沒有求證的情況下,將信『轉寄』給你看,嘿!你的朋友寄給你的,當然要相信他啦! 立刻再轉寄,如此一再地循環,嘿嘿!這個錯誤內容的訊息馬上就讓大家知道, 更可怕的是『還會讓大家接受~』所以,看到任何訊息時,請千萬要記得求證一下吶!
可怕吧!電子郵件會衍生出這么多的問題說~另外,這個 email 服務器的設定與管理真的是網管人員心中永遠的痛! 為什么呢?因為人都是想要越便利越簡單越好,但越便利越不管制的郵件服務器就越容易被攻擊或遭利用! 反過來說,如果你針對郵件服務器管得太嚴厲,那就不太人性化,相信至少您的主管可能就不太滿意,怎么辦?
呵呵!沒錯啦!郵件服務器就是這么回事,讓人又愛又怕的一個玩意兒,搞定他,恭喜您啊一切順利圓滿! 搞不定他,服務器被當成垃圾信件轉運站事小,丟掉工作那可是『茲事體大』呦!就因為他是這么重要又難以搞定, 所以我們可得好好的學學他吶!
* * *
### 22.1.2 Mail server 與 DNS 之間的關系
既然要使用 e-mail ,當然就需要郵件服務器啰 (Mail Server)!不然你的信要怎樣寄出去呢?事實上, mail server 的原理說難不難,但是說簡單嗎~似乎又有點難以理解~,所以, 底下我們要來談一談他的原理部分,然后再針對服務器的設定來進行說明咯!我們首先要講的就是『 Mail server 系統與 DNS 系統有什么關連性?』 這個部分新手最容易被搞混哩,是否要架設 mail server 就『宿命』的一定得架設 DNS server 在你的主機上面嗎?
* Mail server 與合法的主機名
事實上目前已經沒有人會使用 IP 來寄信了,我們通常接收到的 email 都是使用『賬號@主機名』的方式來處理的, 所以說,你的郵件服務器『就一定要有一個合法注冊過的主機名』才可以。為什么呢? 因為網絡惡意使用與垃圾郵件泛濫的種種因素,導致我們不允許直接利用主機的 IP 來寄信了,否則每部有 IP 的主機都能寄信... 因此,你想要架設 mail server 就『必需』要有[合法的主機名](http://linux.vbird.org/linux_server/0270dynamic_dns.php)啰。
OK!既然我只要一個合法的主機名即可,那么表示我不需要架設一部 DNS 主機啰? 是的,你可以這樣認為!只要你擁有合法的主機名,亦即在 DNS 的查詢系統當中你的主機名擁有一個 A 的標志, 理論上你的 mail server 就可以架設成功。只不過由于目前因特網上面的廣告信、 垃圾信與病毒信等占用了太多的帶寬,導致整個網絡社會花費過多的成本在消耗這些垃圾資料。 所以為了杜絕可惡的垃圾信件,目前的大型網絡供貨商 (ISP) 都會針對不明來源的郵件加以限制, 這也就是說『想要架設一部簡單可以運作的 mail server 越來越難了』。
* DNS 的反解也很重要!
對于一般的服務器來說,我們只要使用正解讓客戶端可以正確的找到我們服務器的 IP 即可架站,舉例來說 WWW 服務器就是這樣。不過,由于目前收信端的郵件服務器會針對郵件來源的 IP 進行反解,而如果你的網絡環境是由撥接取得非固定的 IP 時,該種 IP 在 ISP 方面通常會主動的以 xxx.dynamic.xxx 之類的主機名來管理,偏偏這樣的主機名會被主要的大型郵件服務器 (例如 hotmail, yahoo 等) 視為垃圾信件, 所以你的郵件服務器所發出的信件將可能被丟棄,那可就傷腦筋了!
所以啊,如果你想要架設一部 Mail server 的話,請『務必』向您的上層 ISP 申請 IP 反解的對應, 不要再使用預設的反解主機名,否則很容易導致您的郵件服務器所發出的信件會在 Internet 上面流浪啊!
**Tips:** 其實你還是可以不用申請 IP 的反解,不過就得要利用所謂的 relayhost 或者是 smarthost 來處理郵件轉遞的問題, 這個部分又涉及到上層 ISP 的問題,挺復雜!我們會在后續作說明!

* 需要 DNS 的 MX 及 A 標志啊 (超重要的 MX)!
那么我們的郵件服務器系統到底是如何使用 DNS 的信息來進行郵件的傳遞的?還記得在[十九章 DNS 里面談到的 MX](http://linux.vbird.org/linux_server/0350dns.php) 這個標志嗎?當時我們僅說過這個 MX 代表的是 Mail eXchanger, 當一封郵件要傳送出去時,郵件主機會先分析那封信的『目標主機的 DNS 』,先取得 MX 標志 (注意,MX 標志可能會有多部主機喔) 然后以最優先 MX 主機為準將信發送出去。看不懂嗎?沒關系,我們以底下這個 DNS 范例來說:
```
xyz.com.vbird IN MX 10 mail.xyz.com.vbird
xyz.com.vbird IN MX 20 mail2.xyz.com.vbird
xyz.com.vbird IN A aaa.bbb.ccc.ddd
```
假如上述的 DNS 設定是正常的,那么:
* 當有一封信要傳給 user@xyz.com.vbird 時,由于 MX 標志最低者優先,所以該封信會先傳送到 mail.xyz.com.vbird 那部主機。
* 如果 mail.xyz.com.vbird 由于種種原因,導致無法收下該封信時,該封信將以次要 MX 主機來傳送,那就是傳送到 mail2.xyz.com.vbird 那部主機上頭;
* 如果兩部 MX 主機都無法負責的話,那么該封信會直接以 A 的標志,亦即直接傳送到 aaa.bbb.ccc.ddd 那個 IP 上頭去, 也就是 xyz.com.vbird 本身啦!
在這個過程當中,你必需要注意到:mail.xyz.com.vbird 及 mail2.xyz.com.vbird 必需要是可以幫 xyz.com.vbird 轉信的主機才行,也就是說,那兩部主機通常是你公司的最上游的郵件主機, 并不是你隨意填寫的!那兩部主機還需要針對你的 xyz.com.vbird 來設定『郵件轉遞』才行! 否則你的信會被踢掉的。
由于現在的很多郵件服務器會去搜尋 MX 這個標志來判斷目標郵件服務器是否為合法,所以你要架設 Mail server 雖然不必自行設定 DNS 服務器,不過你最好要申請一個 MX 的標志才行。此外,MX 標志一定要設定正確,否則你的信件將可能會直接被 MX 服務器踢掉。為了要設定 MX 但是我們沒有上層郵件服務器時,所以你可以指定 MX 為自己,利用自己當 MX 服務器即可。
那么你或許會想,這個 MX 有啥好處啊?一般來說,如果目標主機掛點時,你的郵件通常會直接退還給原發信者, 但如果有 MX 主機時,這部 MX 主機會先將該封信放在他的隊列 (queue) 當中,等到你的目標主機重新提供郵件服務后, MX 主機會將你的信件傳送給目標主機,如此一來你的信件就比較不會遺失啊!這樣說,您可以了解吧! ^_^
* Email 的地址寫法
剛剛上頭說過 email 通常是『賬號@主機名』的方式來處理,舉例來說鳥哥的 www.centos.vbird 主機上面有個 dmtsai 的使用者,則我的 email 將會成為:『dmtsai@www.centos.vbird』,當有人要寄信給我時, 他會分析 @ 后面的主機名,亦即 www.centos.vbird 的 MX/A 標志等等,然后再透過剛剛說明的流程來傳出信件。 而當我的 www.centos.vbird. 收到這封信時,他會將信放到 dmtsai 的信箱當中啦!底下我們就來談一談這個流程吧!
* * *
### 22.1.3 郵件傳輸所需要的組件 (MTA, MUA, MDA) 以及相關協議
在開始介紹郵件的傳送過程之前,我們先來想一想,你是如何寄出電子郵件的?假設你要寄信給一個使用者, 他的電子郵件是『a_user@gmail.com』好了,也就是說,你要寄一封信到 gmail.com 這個主機上的意思。 那你的桌面計算機 (舉例來說, Windows 系統) 是否能夠將這封信『直接』透過網絡送給 gmail.com 那個主機上? 當然不行啦!你得要設定幫你轉信的郵件服務器才行!也就是說,你必需要先向某一部郵件服務器注冊, 以取得一個合法的電子郵件權限后,才能夠發送郵件出去的。
所以說,你要寄出一封信件時是需要很多接口的幫忙的,底下列出一個簡單的圖示來說明:

圖 22.1-1、電子郵件的『傳送』過程示意圖
我們先來解釋一些專有名詞吧!然后再來說明傳送的流程:
* * *
1. MUA (Mail User Agent):
顧名思義 MUA 就是『郵件使用者代理人』的意思,因為除非你可以直接利用類似 telnet 之類的軟件登入郵件服務器來主動發出信件,否則您就得要透過 MUA 來幫你送信到郵件服務器上頭去。 最常見的 MUA 像是 [Mozilla](http://moztw.org/) 推出的 [Thunderbird (雷鳥)](http://moztw.org/thunderbird/) 自由軟件, 或者是 Linux 桌面 KDE 常見的 Kmail ,及 Windows 內件的 Outlook Express (OE) 等。 MUA 主要的功能就是收受郵件主機的電子郵件,以及提供用戶瀏覽與編寫郵件的功能!
2. MTA (Mail Transfer Agent):
MUA 幫用戶傳送郵件到郵件主機上,那這部郵件主機如果能夠幫用戶將這封信寄出去,那他就是一部郵件傳送主機 (MTA) 啦!這個 MTA 就是『郵件傳送代理人』的意思。也來顧名思義一下,既然是『傳送代理人』, 那么使用者寄出的信,幫用戶將屬于該用戶的信件收下時,就是找它 (MTA) 就對啦!基本上,MTA 的功能有這些:
1. 收受信件:使用簡單郵件傳送協議(SMTP)
MTA 主機最主要的功能就是:將來自客戶端或者是其他 MTA 的來信收下來,這個時候 MTA 使用的是 Simple Mail Transfer Protocol (SMTP),他使用的是 port 25 啦!
2. 轉遞信件:
如果該封信件的目的地并不是本身的用戶,且該封信的相關數據符合使用 MTA 的權力, 那么咱們的 MTA 就會將該封信再傳送到下一部主機上。這即是所謂的轉遞 (Relay) 的功能。
總之,我們一般提到的 Mail Server 就是 MTA 啦!而嚴格來說, MTA 其實僅是指 SMTP 這個協議而已。而達成 MTA 的 SMTP 功能的主要軟件包括老牌的 sendmail,后起之秀的 postfix,還有 qmail 等等。底下我們來看看,那么在 MTA 上頭還有哪些重要的功能。
3. MDA (Mail Delivery Agent):
字面上的意思是『郵件遞送代理人』的意思。事實上,這個 MDA 是掛在 MTA 底下的一個小程序, 最主要的功能就是:分析由 MTA 所收到的信件表頭或內容等數據, 來決定這封郵件的去向。所以說,上面提到的 MTA 的信件轉遞功能,其實是由 MDA 達成的。 舉例來說,如果 MTA 所收到的這封信目標是自己,那么 MDA 會將這封信給他轉到使用者的信箱 (Mailbox) 去, 如果不是呢?那就準備要轉遞出去了。此外,MDA 還有分析與過濾郵件的功能喔!舉例來說:
1. 過濾垃圾信件:
可以根據該封郵件的表頭資料,或者是特定的信件內容來加以分析過濾。例如某個廣告信的主題都是固定的, 如『AV情色...』等等,那就可以透過 MDA 來過濾并去除該郵件。
2. 自動回復:
如果您出差了導致某一段時間內無法立即回信時,就可以透過 MDA 的功能讓郵件主機可以自動發出回復信件, 如此您的朋友就不會認為你太大牌!^_^
各主要的 MTA 程序 (sendmail,postfix...) 都有自己的 MDA 功能,不過有些外掛的程序功能更強大,舉例來說 procmail 就是一個過濾的好幫手,另外 Mailscanner + Spamassassion 也是可以使用的一些 MDA 喔。
4. Mailbox:
就是電子郵件信箱嘛!簡單的說,就是某個賬號專用的信件收受檔案啰。我們的 Linux 系統默認的信箱都是放在 /var/spool/mail/使用者賬號 中! 若 MTA 所收到的信件是本機的使用者,MDA 就會將信件送到該 mailbox 當中去啰!
* * *
好了,那么來想一想,你如何透過 MUA 來將信件送到對方的郵件信箱 (Mailbox) 去呢?
* Step 0:取得某部 MTA 的權限:
就如[圖 22.1-1](#fig22.1-1) 所示,我們本地端的 MUA 想要使用 MTA 來傳出信件時, 當然需要取得 MTA 的權限。通常就是說:我們必須要向 MTA 注冊一組可使用 email 的賬號與密碼才行。
* Step 1:使用者在 MUA 上編寫信件后,傳送至 MTA 上頭:
使用者在 MUA 上面編寫信件,信件的數據主要有:
* 信件標頭:包括發件人與收件者的 email 地址,還有該封信件的主旨 (subject) 等;
* 信件內容:就是你要跟對方說明的內容啦!
編寫完畢之后只要按下傳送鈕,該封信就會送至你的 MTA 服務器上面了,注意:是你的 MTA 而不是對方的 MTA ! 如果你確定可以使用該部 MTA,那么你的這封信就會被放置到 MTA 的隊列 (queue) 當中并等待傳送出去了。
* Step 2.1:如果該封信的目標是本地端 MTA 自己的賬號
你是可以寄信給你自己的,所以如果你的 MTA 收到該封信件的目標是自己的用戶時,那就會透過 MDA 將這封信送到 Mailbox 去啰!
* Step 2.2:如果該封信目的為其他 MTA ,則開始轉遞 (Relay) 的流程:
那如果這封信的目標是其他的主機呢?這個時候我們的 MTA 就會開始分析該封信是否具有合法的權限, 若具有權限時,則我們的 MDA 會開始進行郵件轉遞,亦即該封信件會透過我們的 MTA 向下一部 MTA 的 smtp (port 25) 發送出去。如果該封信件順利的發送出去了,那么該封信件就會由隊列當中移除掉了。
* Step 3:對方 MTA 服務器收受信件
如果一切都沒有問題的話,遠程的 MTA 會收到我們 MTA 所發出的那封信,并將該信件放置到正確的使用者信箱當中, 等待使用者登入來讀取或下載。
在這整個過程當中,你會發現你的信件是由我們的 MTA 幫忙發送出去的,此時 MTA 提供的協議是簡單郵件傳輸協議 (Simple Mail Transfer Protocol, smtp), 并且該封信最終是停留在對方主機的 MTA 上頭!并不是你朋友的 MUA 上頭啊!
**Tips:** 為何特別強調這一點?因為以前有個朋有跟我說:『鳥哥啊,你要寄 email 給我的時候記得跟我講, 那我下班前將計算機開著,以免你信寄不到我的信箱』,此時額頭三條線突然跑出來~很不好意思~ 所以這里才要特別強調,你的 MUA 不必開著啦!要收信時再打開即可。

了解了傳送信件時 MTA 需要啟動 smtp (port 25) 之后,再來我們得要談談那這封信件對方要如何接收啊?
* * *
### 22.1.4 使用者收信時服務器端所提供的相關協議: MRA
那使用者如果想要收信時,當然也可以透過 MUA 直接來聯機取得自己的郵件信箱內的數據啊!整個過程有點像底下這樣:

圖 22.1-2、客戶端透過 MRA 收回信件的流程示意圖
在上述的圖示中,多了一個郵件組件,那就是 MRA:
1. MRA (Mail Retrieval Agent):
使用者可以透過 MRA 服務器提供的郵政服務協議 (Post Office Protocol, POP) 來收下自己的信件, 也可以透過 IMAP (Internet Message Access Protocol) 協議將自己的信件保留在郵件主機上面, 并進一步建立郵件數據匣等進階工作。也就是說,當客戶端收受信件時,使用的是 MRA 的 POP3, IMAP 等通訊協議,并非 MTA 的 SMTP 喔!
我們先談一談 POP3 的收信方式吧:
1. MUA 透過 POP3 (Post Office Protocol version 3) 的協議連接到 MRA 的 port 110, 并且輸入賬號與密碼來取得正確的認證與授權;
2. MRA 確認該用戶賬號/密碼沒有問題后,會前往該使用者的 Mailbox (/var/spool/mail/使用者賬號) 取得使用者的信件并傳送給用戶的 MUA 軟件上;
3. 當所有的信件傳送完畢后,<u>用戶的 mailbox 內的數據將會被刪除</u>!
在上述的流程當中我們知道 MRA 必須要啟動 POP3 這個協議才行,不過這個協議的收件方式比較有趣, 因為使用者收信是由第一封信件開始收下直到最后一封信件傳輸完畢為止。不過由于某些 MUA 程序撰寫的問題,若有些郵件有病毒的可能性時,透過防病毒軟件將可能導致該 MUA 軟件的斷線! 如此一來由于傳輸沒有完畢,因此 MRA 主機并不會將用戶的信件刪除。 此時如果使用者又再一次的按下接收按鍵,呵呵!原來已接收的信件又會重復收到,而沒有收到的還是收不到!
這個時候或許你可以透過登入主機利用 mail 這個指令來處理你有問題的郵件, 或許換一種 MUA 也是個不錯的思考方向,又或者暫時將防病毒軟件關掉也是可以考慮的手段之一。 轉頭過來想一想,因為 POP3 的協議預設會將信件刪除,那如果我今天在辦公室將我的信收到辦公室的計算機中, 當我回家時再度啟動 MUA 時,是否能夠收到已經被接收的信件?當然不行,對吧!
或許你需要更有幫助的協議,亦即 IMAP (Internet Messages Access Protocol) , 這個協議可以讓你將 mailbox 的數據轉存到你主機上的家目錄,亦即 /home/賬號/ 那個目錄下, 那你不但可以建立郵件數據匣,也可以針對信件分類管理,而且在任何一個可連上網絡的地方你只要登入主機, 原本的信件就還是存在吶!真是好啊!
不過,使用 IMAP 時,用戶的目錄最好能夠加點限制,例如利用 quota 來管理用戶的硬盤權限, 否則因為信件都在主機上頭,如果用戶過多且誤用時,你的硬盤空間會被吃光光喔!注意注意!
OK!透過上面的說明你要知道,要架設一部可以使用 MUA 進行收發信件的 MTA, MRA 服務器,你至少也需要啟動 SMTP 以及 POP3 這兩個協議才行!而這兩個協議的啟動程序并不相同, 所以架設上還是得要小心注意啊!
* pop3s, imap2 與 SMTP 的困擾
郵件數據在因特網上面傳輸時,透過的 SMTP, POP3, IMAP 等通訊協議,通通是明碼傳輸的!尤其 POP3, IMAP 這兩個通訊協議中,使用者必須要輸入賬號/密碼才能收受信件!因為涉及帳密,所以當然加密這兩個通訊協議的數據較佳! 于是就有了 POP3s, IMAPs 通訊協議出現了!透過 SSL 加密嘛!那你會問,既然已經有 pop3s, imaps 了, 那有沒有 smtps 呢?答案是,當然有!只不過沒人用!
從[圖 22.1-1](#fig22.1-1) 及[圖 22.1-2](#fig22.1-2) 的流程來看,POP3, IMAP 只與 MRA 及自己的用戶有關,因此你只要跟你的用戶說,你服務器使用的 MRA 協議為何,通知你的用戶改變即可,并不會影響到其他的服務器。 但是 MTA 就不同了!因為 MTA 必須與其他的 MTA 溝通,因此,若你使用了 smtps ,那么全世界與你的 MTA 溝通者, 通通需要改變為 smtps 通訊協議才行!這個工程實在太浩大了!目前還沒有任何一家 ISP 有能力進行! 所以,就造成目前沒有 SMTPs 的協議啰。
那么難道你的數據就一定要是明碼嗎?那倒不見得~既然你的 MTA 無法加密,那么你就自己將郵件數據加密后,再交由 MTA 傳送即可!這也是目前很多急需加密數據的郵件用戶所使用的手段啦!^_^
* * *
### 22.1.5 Relay 與認證機制的重要性
當你需要 MTA 幫你將信寄送到下一部 MTA 去時,這個動作就稱為郵件轉遞 (Relay) 啰,那就是[圖 22.1-1](#fig22.1-1)當中的 Step 2.2 那個動作啦。那么我們來想一想,如果『所有的人都可以藉由這一部 MTA 幫忙進行 Relay 時, 這個情況稱之為 Open Relay 的動作』。當你的 MTA 發生 Open Relay 時,會有什么問題? 問題可就大了!
當你的 MTA 由于設定不良的關系導致具有 Open Relay 的狀況,加上你的 MTA 確實是連上因特網時, 由于因特網上面用 port scan 軟件的閑人太多,你的 MTA 具有 Open Relay 的功能這件事情, 將會在短時間內就被很多人察覺,此時那些不法的廣告信、色情垃圾信業者將會利用你的這部 Open Relay MTA 發送他們的廣告,所以你會發生的問題至少有:
* 你主機所在的網域正常使用的連接速度將會變慢,因為網絡帶寬都被廣告、垃圾信吃光了;
* 你的主機可能由于大量發送信件導致主機資源被耗盡,容易產生不明原因當機之類的問題;
* 你的 MTA 將會被因特網社會定義為『黑名單』,從此很多正常的郵件就會無法收發;
* 你 MTA 所在的這個 IP 將會被上層 ISP 所封鎖,直到你解決這個 Open Relay 的問題為止;
* 某些用戶將會對你的能力產生質疑,對您公司或者是你個人將會有信心障礙!甚至可能流失客源;
* 如果你的 MTA 被利用來發黑函,你是找不到原發信者的,所以你這部 MTA 將會被追蹤為最終站!
問題很大呦!所以啊,目前所有的 distributions 都一樣,幾乎都將 MTA 預設啟動為僅監聽內部循環接口 (lo) 而已,而且也將 Open Relay 的功能取消了。既然取消 Open Relay 的功能,那么怎么使用這部 MTA 的 Relay 來幫忙轉信啊?呵呵!所以我們在上頭才會一直說,你『必需』取得合法使用該 MTA 的權限啊! 這也就是說,設定誰可以使用 Relay 的功能就是我們管理員的任務啦!通常設定 Relay 的方法有這幾種:
* 規定某一個特定客戶端的 IP 或網段,例如規定內部 LAN 的 192.168.1.0/24 可使用 Relay;
* 若客戶端的 IP 不固定時 (例如撥接取得的非固定 IP) 可以利用認證機制來處理。
* 將 MUA 架設在 MTA 上面,例如 OpenWebMail 之類的 web 接口的 MUA 功能。
認證機制上面常見的有 SMTP 郵件認證機制,以及 SMTP after POP 兩種,不論是哪一種機制, 基本上都是透過讓使用者輸入認證用的賬號與密碼,來確定他有合法使用該 MTA 的權限,然后針對通過認證者開啟 Relay 的支持就是了。如此一來你的 MTA 不再啟動 Open Relay ,并且客戶端還是可以正常的利用認證機制來收發信件, 身為管理員的你可就輕松多啰! ^_^
* * *
### 22.1.6 電子郵件的數據內容
看過上頭的數據后,您應該對于 Mail server 有一些程度的認識了。再來要談的是,那么一封 email 的內容有哪些部分呢?就跟人類社會的郵件有信封袋以及內部的信紙一樣,email 也有所謂的標頭 (header) 以及內容 (body) 兩部份喔!
email 的標頭部分 (類似郵件信封) 會有幾個重要信息,包括:這封信來自那個 MTA、是由誰所發送出來的、要送給誰、 主旨為何等等,至于內容 (類似信封內的信紙) 則是發信者所填寫的一些說明啰。如果你使用 dmtsai 的身份下達這個指令:
```
[dmtsai@www ~]$ echo "HaHa.." | mail -s "from vbird" dmtsai
```
然后將自己的信箱內容叫出來,如下所示:
```
[dmtsai@www ~]$ cat /var/spool/mail/dmtsai
From dmtsai@www.centos.vbird Mon Aug 8 18:53:32 2011 <==發信者的 email
Return-Path: <dmtsai@www.centos.vbird> <==這封信的來源
X-Original-To: dmtsai
Delivered-To: dmtsai@www.centos.vbird
Received: by www.centos.vbird (Postfix, from userid 2007)
id 6D1C8366A; Mon, 8 Aug 2011 18:53:32 +0800 (CST) <==郵件ID
# 這部份主要在講這封 email 的來源與目標收件者 MTA 在哪里的信息~
Date: Mon, 08 Aug 2011 18:53:32 +0800 <==收到信件的日期
To: dmtsai@www.centos.vbird <==收件者是誰啊!
Subject: from vbird <==就是信件標題
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20110808105332.6D1C8366A@www.centos.vbird> <==給機器看的郵件ID
From: dmtsai@www.centos.vbird <==發信者是誰啊!
HaHa..
```
由原本的信件內容我們可以看到 email 確實是兩部份,在標頭部分記錄了比較詳細的收、發件者數據, 以及相關的來源、目標之 MTA 信息等等。但你要注意的是,那個『Received:...』那一行資料是『會變動的』, 如同前面談到的 MX 標志,如果一封信由 MUA 傳送到 MTA 在由 MTA 傳送到 MX 主機后,才傳送到最終的 MTA 時, 那么這個 Received: 的數據將會記錄每一部經手過的 MTA 信息喔!所以你可以借著這個記錄數據慢慢的找回這封信的傳遞方向呢!
此外,這個郵件的標頭以及內容的分析部分,你還可以藉由某些分析軟件來進行過濾, 這部份我們將在后頭再慢慢的介紹給大家了解喔! ^_^!您先知道一封郵件至少有這些數據,以后咱們再慢慢的解釋啰!
* * *
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀