鳥哥的 Linux 與 ADSL 私房菜 -------------------------------------------------------------------------------- 簡易 Mail Server 架設 -- Sendmail 設定 -------------------------------------------------------------------------------- 前言: 電子郵件帶來的好處: 在目前的社會當中,沒有電子郵件 ( e-mail ) 似乎是蠻奇怪的一件事!。可以說,現在 e-mail 已經成為一個很普遍的人與人之間的溝通管道了,電子郵件可以很快速的幫你將文件或訊息傳送到地球上的任何一個有網路存在的角落,當然,你也可以在任何有網路的地方,連上 Internet 去收取你的信件!很快樂不是嗎?是的!e-mail 的存在是相當重要的,你可以藉由這個電子郵件取得最即時的一手資料!你也可以利用他幫你聯絡好朋友,還可以用來把馬子哩!君不見前一陣子相當有名的『電子情書, You got a mail』這部電影嗎?呵呵!反正,電子郵件真的帶給目前繁忙的人們一個相當輕鬆獲得資訊的方式! 電子郵件衍生的問題: 不過,遺憾的是,只要是有人類的地方,就會有很多你意想不到的事情會出現了,當然,e-mail 也不例外,怎麼說呢? 我們來慢慢的分析一下吧: 電子郵件夾帶病毒:你可以常常聽到電子郵件所夾帶的病毒對吧!沒錯,利用電子郵件以及人們對於電子郵件的漫不經心的態度,使得以電子郵件為媒介的電腦病毒更容易『深入人群』當中吶!這個問題造成大大小小的傷害,如果發生在大企業當中,那可真是受不了那∼那個主管受的了一天到晚電腦重新安裝的∼而且萬一中毒的是大型主機,光是資料的損毀就可能讓公司倒閉了.... 怪客入侵事件:沒錯! e-mail 也是一個相當不安全的網路協定,你可以輕易的使用怪客軟體 ( Cracker ) 就可以取得使用者在利用 e-mail 傳送過程當中的,將他的帳號與密碼擷取下來,分析之後,並進一步的破解對方的郵件主機∼哇!真是亂可怕一把的! 廣告與垃圾信件:這個可說是目前各大 ISP 心中永遠的痛∼這些垃圾信件可以佔掉很多那少的可憐的頻寬,使得正常使用者連線速度與品質下降,更可能造成網路的停頓∼當然,常常收到垃圾信件的你,大概也不好過吧! 暴力攻擊事件:萬一你沒有將郵件主機設定好,嘿嘿!送信者可以藉由你主機收信的功能,發送大量的信件,讓你『一次收個夠!』灌爆你的主機硬碟,想要不當機都粉難∼ 真實社會的討厭事情:『黑函』!聽到會不會很害怕?當然很害怕啦!偏偏,使用 e-mail 就可以作很多的壞事∼這真是太不道德了∼ 不實的信件內容:只要注意到消基會的訊息就可以知道啦,不明來源的電子郵件說的內容,嘿嘿!不要輕易的相信,因為,很多可是以訛傳訛,結果,大家都被耍了的∼例如,你的朋友收到一封信,認為『哇!這是大事情』,所以在沒有求證的情況下,將信『轉寄』給你看,嘿!你的朋友寄給你的,當然要相信他啦!立刻再轉寄,如此一再地循環,嘿嘿!這個錯誤內容的訊息馬上就讓大家知道,更可怕的是『還會讓大家接受∼』所以,看到任何訊息時,請千萬要記得求證一下吶! 可怕吧!電子郵件會衍生出這麼多的問題說∼ 網管人員的痛: 因為 e-mail 的便利性,與郵件主機的容易受到惡意的攻擊,這兩個事件真的是很難分的清,怎麼說呢?如果為了使用者的便利性而大開便利之門,那麼,您的郵件主機大概用不了多久,就會被列入黑名單之中,進而成為大家的拒絕往來戶,呵呵!反而成為笑柄,並且反而造成了使用者的不便∼而如果管制得太嚴格,又顯的不夠人性化∼最起碼,你的主管就會不太滿意∼怎麼辦呢?!哈哈!沒錯啦!郵件主機就是這麼回事∼讓人又愛又怕的一個玩意兒,搞的定他,恭喜你,一切圓滿順利,搞不定他,主機被當成垃圾信件轉運站事小,丟掉工作可就『茲事體大』啦∼就因為他是這麼重要,但是又這麼難以搞定,所以啦,我們可要好好的學一學他吶! -------------------------------------------------------------------------------- 郵件伺服器運作原理: 既然要使用 e-mail ,當然就需要郵件主機伺服器囉 ( Mail Server )!不然你的信要怎樣寄出去呢?事實上,mail server 的原理說難不難,但是說簡單嗎∼似乎又有點難以理解ㄋㄟ∼,所以,底下我們要來談一談他的原理部分,然後再針對主機的設定來進行說明咯!底下,我們首先要講的,就是『Mail server 系統與 DNS 系統有什麼關連性?』這個部分新手最容易被搞混哩,是否要架設 mail server 就『宿命』的一定得架設 DNS 主機在你的主機上面嗎? -------------------------------------------------------------------------------- Mail 與 DNS 系統的相關性: 一直以來,Mail server 與 DNS 系統就是分不開的,怎麼說呢?今天如果你要寄電子郵件的話,那麼就得藉由郵件主機幫你將信件送出去,對吧!那麼我們在 DNS 那個篇幅裡面也談到了相當多的概念了,就是,人腦實在無法記憶住電腦網路的 IP 資料,因此,才會有所謂的 Domain Name System, DNS 主機,這個 DNS 主要的功能之一,就是將主機名稱轉譯成為 IP ,我想,這裡您應該也已經瞭解了,對吧!如果是『不瞭解』,那麼不要往下看了,請前往 簡易 DNS 伺服器 去瞧一瞧,瞧完了再回來繼續吧!OK!好了,既然如此的話,那麼使用郵件主機來寄信,並且不想要背主機所在的 IP ,那蛣M就一定需要讓你的主機名稱可以經由 DNS 系統來找到你的 IP 囉!對吧!沒錯,如果你真的要提供一個 Internet 上面的郵件主機,最好還是註冊一個合法的主機名稱,比較好記憶ㄋㄟ∼ 好了,接下來要討論的就是,既然我的主機需要 DNS 來轉譯主機名稱使成為 IP ,那麼我真的就得必須要架設 DNS 嗎?當然不是!要注意的是,我們剛剛提到的是『我就得在 Internet 上面註冊一個合法的主機名稱來對應 IP 』而不是『一定得要架設 DNS 在我的主機上面!』這個很重要,因為有太多的新手被 mail server 與 DNS server 的關係搞錯亂了!如果到這裡又混亂了!那麼請,真的,一定,回到 DNS 伺服器那篇去慢慢的再從頭讀一次,否則.....也就是說,我們需要的是『合法註冊過的主機名稱』就是了!所以,你可以使用動態 IP 去申請一個動態 IP 的領域名稱,也可以使用各大 ISP 提供的各項功能來註冊,反正只要能夠註冊一個領域名稱就是了!當然,你也可以自行去註冊一個 DNS 主機,並且在你的主機上面建立 DNS 系統,但這並非是必要的! 那麼,假設我的主機名稱對應 IP 已經成功的在 Internet 上面完成合法註冊了,這樣就好了嗎?是這樣沒錯啦!確實,只要有主機名稱對應到 IP ,亦即是有 A ( Address ) 這個 DNS 的標誌後,那麼就可以架設 mail server 了,並且,一般來說,應該不會有問題的!然而, DNS 系統本身還有其他的功能可以支援 mail server ,使 mail server 更穩定與具有更佳的避免信件遺失功能,所以,就有 MX 這個 DNS 的標誌產生啦!MX 這個 DNS 設定中的標誌,主要就是要給 mail server 用的,基本上, MX 就是 Mail eXchanger 的縮寫,他可以讓 Internet 上面的信件馬上找尋到 Mail 主機的位置,此外,由於 MX 後面可以接數字,因次,一個 domain 或者是一部主機,可以有多個 MX 標誌,這有什麼好處呢?主要的好處就是可以讓,當主要的 mail server 掛點時,由於有 mx 標號,因此,信件不會直接退回,而是跑到下一個 MX 設定的主機去,並且暫存在該處,等到主要的 mail server 起來之後,這個 MX 設定的主機就會將信件給他傳送到目的地!如此一來,甚至可以達到異地備援的功效呢!不只如此喔!MX 的功效還很多!最大的優點就是有點類似 router 的功能,我們或許可以稱之為 郵件路由 吧!當有了 MX 標誌之後,由於這是 DNS 的設定,所以當你要傳送 mail 的時候,那麼就可以直接依據 DNS 的 MX 標誌直接將信件傳送到該設定的 mx 郵件主機,而不需要去尋問到底郵件要寄到哪裡去!這功能相當的不錯的!因為可以讓你的郵件很快的而且正確的送達到目的地呢!此外,由於可以設定多個 mx ,因此,假設『此路不通』,也就是先使用的 mx 郵件主機不通的時候,那麼信件就會往下一個 mx 郵件主機傳送!這樣可以避免信件被退信的機會!當然就更加的穩定囉!不過,這裡也要特別強調, MX 『一定』要設定正確,否則,呵呵!反而會讓你的信件永遠在 Internet 上面流浪呢! 一般來說,郵件位址的寫法為: account@server.name 的寫法,在小老鼠 ( @ ) 前面的指的是『帳號』,至於 @ 後面的則是主機的名稱!當你寄出這樣的一封信時,首先,你的郵件主機會先去 DNS 系統尋找 server.name 這個主機名稱對應的 IP 與 MX 標誌,若有 mx 標誌,那麼這封 e-mail 將會把信先送到該 mx 主機,然後再由該 mx 主機將信件送達目的地 ( 就是 server.name 這個主機啦 ) ,而如果有多個 mx 標誌時,那麼這封 e-mail 會送到最優先的 mx 主機去(也有可能這部主機就是目的地主機喔!),然後交給該主機來處理囉!而如果沒有 mx 標誌的話,那麼在查得 IP 之後,信件才會慢慢的送達該郵件主機囉!在送達到郵件主機後,該主機則以前面的『帳號』將信件發送到各個使用者的郵件目錄下!所以囉,為什麼說 mail 與 DNS 系統相關性很高呢?嘿嘿!由上面的說明您應該就不難瞭解啦! ^_^ -------------------------------------------------------------------------------- 郵件的傳送流程、MUA、MTA、MDA 約略瞭解了 DNS 與 mail server 之間的關係之後,在接下來我們要瞭解的是,那麼 mail 到底是如何傳送到目的郵件主機的呢?底下我們分成『寄信』與『收信』兩個主要的郵件主機使用方式來加以介紹囉!先說明一下關於『寄信』的部分好了,通常我們都是使用桌上型電腦來寄信的,舉個例子來說好了,如果你以 Netscape 或者 Kmail 或者 OutLook Express 來寄信的時候,那麼那封信到底是怎麼送出去的呢?可以參考一下底下的圖示來說明: 圖一、電子郵件以郵件主機寄送信件示意圖 先來說明一下什麼是 MUA, MTA 與 MDA 什麼的,再來說信件怎麼傳送的好了! MUA ( Mail User Agent ):顧名思義, MUA 就是『郵件使用者代理人』,華特(what)?郵件還需要代理人,怎麼回事呢?喔!這是由於通常我們 Client 端的電腦都無法直接寄信的(不然幹嘛要郵件主機?),所以,需要透過 MUA 來幫我們傳達信件,不論是送信還是收信,Client 端的用戶都需要透過各個作業系統提供的 MUA 才能夠使用郵件系統。舉個例子來說, Windows 裡面的 OutLook Express, Netscape 裡面的 mail 功能與 KDE 裡面的 Kmail 都是 MUA 啦! MUA 主要的功能就是收受郵件主機的電子郵件,以及提供使用者瀏覽與編寫郵件的功能! MTA ( Mail Transfer Agent ) : MUA 是用在 Client 端上面的軟體,那麼這個 MTA 就是用在郵件主機上面的軟體啦!他也是主要的郵件伺服器喔!這個 MTA 就是『郵件傳送代理人』的意思。也來顧名思義一下,既然是『傳送代理人』,那麼使用者寄出的信,與使用者要收信時,就是找他 ( MTA ) 就對啦!因為他要負責幫我們使用者傳送嘛!沒錯!基本上, MTA 的功能有這些: 收受外部主機寄來的信件:既然是郵件主機,那麼『接收信件』想必就是主要的功能囉!呵呵,答對了!所以囉, MTA 最主要的功能就是收受外部來的信件,只要這個信件裡面有 MTA 內部的帳號時,那麼這封信就會被 MTA 收下來; 幫使用者傳送 ( 寄出 ) 信件:既然可以收信,那麼自然也就可以發信囉!沒錯啦!只要使用者具有合法的使用 MTA 的權力,那麼該使用者就可以利用這部 MTA 將他把信傳送出去!不過需要注意的是, MTA 會將信件送給目的地的 MTA 而不是目的地的 MUA 喔!不要搞錯了!(註:曾經有個朋友跟我說,要我傳資料給他,而因為他要接收我的信件,所以他的電腦 "指的是 Windows 那個 Client 端的電腦" 得一直開著,真是不方便!聽到這句話時,害我嚇了一跳∼這個觀念是不對的∼因為使用者使用的是 MUA ,而信件『僅會送達到 MTA 主機上面』而已,收、發信件時,都需要透過 MTA 來幫忙處理的!所以,使用者在使用郵件編輯器"MUA"將資料編輯完畢之後,按下送出,並且成功的送到 MTA 之後,接下來的事情就是 MTA 的工作了,跟使用者的 Client 端這部電腦 "一點關係也沒有了" ) 讓使用者自己的信可以收回去:使用者可以將放置在郵件主機的信件收到自己的個人電腦上面收看。 大致的功能就是這些啦!通常我們所說的 Mail server ( 郵件伺服器 ) 就是指 MTA 而言的! MDA ( Mail Delivery Agent ) : 『郵件遞送代理人』主要的功能就是將 MTA 所收受的信件,依照信件的流向 ( 送到哪裡去 ) 來將該信件放置到本機帳戶下的郵件檔案中 ( Mailbox )!或者是再經由 MTA 將這個信件送到下個 MTA 去!而如果信件的流向是到本機當中時,這個郵件代理人的功能可不止是將由 MTA 傳來的郵件放置到每個使用者的 Mailbox 而已,他還可以具有郵件分析 ( filtering ) 與其他相關的功能呢!這個功能很了不起喔!怎麼說呢?具兩個例子來說好了: 如果你知道某個廣告信件的主旨都是固定的,例如『AV情色XXX』,你想將這種信件直接給他丟掉垃圾桶,可以嗎?當然可以囉!透過 MDA 郵件分析的功能,就可以將信件丟棄啦! 如果有一天你要出差去,看樣子可能一個星期碰不到電子郵件了,但是你又不想讓一些朋友認為你在耍大牌都不回信的....這個時候你就可以利用 MDA 的功能,讓郵件主機分析到,當要送給你這個使用者的帳號的信出現時,就自動回覆一封回信,讓寄件者知道你在忙碌中....呵呵!這樣的功能是否很不錯呢?還不止這樣喔!其他的等一下後面再提吧! Mailbox :『郵件信箱』說穿了,就是在你主機上面的一個目錄下的,某個人『專用』的信件收受檔案啦!舉個例子來說,系統管理員 root ,在預設的情況下,他會有個信箱,預設的檔案是在 /var/spool/mail/root 這個檔案就是了,一個帳號都會有一個自己的信箱喔!然後,當 MTA 收到 root 的信時,就會將該封信件存到 /var/spool/mail/root 這個檔案中囉!使用者可以透過程式來將這個檔案裡面的信件資料讀取回去喔! 好了,瞭解了 MUA, MTA 與 MDA 之後,再來說到那麼如何將信寄出去呢?可以分為底下幾個步驟: Step 1 使用者利用 MUA 寄信到 MTA 上面:通常我們使用 MUA ( 例如 Outlook express ) 寫信的時候,你總是要定義出幾個咚咚: 發信人與發信網站:對啦,總是要有這個資訊才行的嘛!這個發信網站就是等一下 Step 2 接收信件的那個 MTA 啦; 收信人與收信網站:是的,就是 account@e-mai.server 的樣式啦!那個 account 就是該 e-mail.server 裡面的帳號啦! 好了,你在圖一左上角的那部機器上面,也就是『本地端用戶使用電腦』利用 MUA 的功能 ( 例如 Outlook express 好了 ) 寫好了信之後,按下 MUA 的那個『傳送』的按鍵,MUA 就會依據你所定義的主機位址將信發送到 MTA 上面; Step 2 MTA 收到自己的信件,交由 MDA 發送到該帳號的 MailBox 當中:如果在 Step 1 所收到的信件中,那個 e-mail.server 就是 MTA 自己,此時 MTA 會將該信件交由 MDA 去處理,將信件放置在收進者的信箱中; Step 3 MTA 將信再轉送出去:如果由 Step 1 來的信件的收件人並不是 MTA 的內部帳號,那麼該封信將會被再轉送出去!由 Step 1 及 Step 3 的動作,我們也稱為 Relay (郵件轉遞) 的功能喔! Step 4 遠端 MTA 收受本地的 MTA 所發出的郵件:遠端的 MTA 會收受我們這部 MTA 的信件,並將該信件交給他的 MDA 來處理 ( Step 5 ) ,此時,信件會存放在遠端的 MTA 上面,等待使用者登錄讀取或者下載回去! 整個流程大致上就是這樣。這個時候,你由左上角的 MUA 將信件寄出之後,最後信件將會存放在右邊那部 MTA 主機裡面喔!還沒有到達你的朋友的電腦 ( 就是右邊的 MUA 那部電腦 ) !這個時候,就要繼續談到收信的動作了!收信的動作有點像這樣: 圖二、用戶端收受郵件主機的電子郵件示意圖 遠端用戶使用的電腦直接連接到他的 MTA ,跟 MTA 要求察看自己的 mailbox 是否有信件,而 MTA 透過 MDA 去檢查之後,如果有信件的話,就會將他傳送回使用者的 MUA 中!同時,根據 MUA 的不同設定, MTA 會選擇將該 mailbox 清除掉,或者繼續保留!若繼續保留的話,那麼下次使用者再次的接收信件時,保留的信件會再次的被下載,因此,通常使用者 MUA 都是預設刪除掉 MTA 上面的 Mailbox 內容的!接下來我們得談一談,那麼寄信與收信使用的是什麼協定呢? -------------------------------------------------------------------------------- 使用的協定 總是得瞭解一下使用的協定吶!我們在寄信的時候,亦即由 MUA 將信件發送到 MTA 的過程中,以及 MTA 將信轉遞到下一個 MTA 的功能,目前絕大部分的郵件主機都是使用 SMTP ( Simple Mail Transfer Protocol ) 這個協定,port number 為 25 啦!在寄信的時候,你的 MUA 會主動的連接 MTA 的 port 25 ,然後將信經由 MTA 的 smtp 協定 ( port 25 ) 而送出去!而郵件主機 MTA 在轉遞的時候,也是經由下一部 MTA 的 port 25 來將信送出去的!所以囉,不論你是使用什麼 MUA 或 MTA 郵件架設軟體,只要大家都支援 smtp ,那麼信件就可以順利的流傳囉! 收信呢?收信則是 MUA 經由 POP ( Post Office Protocol ) 協定來連接到 MTA 的使用者 Mailbox,以讀取或者下載使用者在 Mailbox 當中的信件。,目前常用的 POP 協定為 POP3 ( Post Office Protocol version 3 ),這個協定產生的 port number 為 110 ,所以,你的 MUA 經由 MTA 的 port 110 將信件由 MTA 的 mailbox 當中將信件收到本地端的 MUA 上面供你瀏覽!同樣的,只要 MTA 與 MUA 同時支援 POP3 這個協定,那麼信件就可以自由的收受了!此外,目前也很流行使用 IMAP 這個協定來收受信件。在 pop3 的收信協定中,一般來說,當 client 端收完了主機端的信件之後,則該信件會主動的被主機端所刪除!不過, IMAP 則可以避免這個問題! IMAP 具有讓使用者 ( client 用戶端 ) 自行定義信件放置的目錄功能,以及是否要儲存下載的信件之後,原信件是否保留在主機上面的功能!目前我們常見的 Web 介面的電子郵件使用,大部分就是以 imap 來達成的! 所以我們知道了!通常一部提供收發信件的 MTA ( 不考慮 Web 介面的郵件主機 ) 至少需要兩個協定,分別是 SMTP 與 POP3 !而且,只要你的 MUA 與 MTA 同時均支援 SMTP 與 POP3 ,那麼彼此就可以溝通囉!這也是為什麼你使用 Outlook express 寄出的信,但是你的朋友可以使用 Netscape 收下來的原因!總之,就是『網路協定』的溝通啦! -------------------------------------------------------------------------------- 什麼是 Relay 與認證機制 由圖一的寄信流程圖裡面的第三步驟 ( step 3 ) 中,我們知道, MTA 在分析收到的郵件之後,如果收件者不是本身主機的帳號,則會將該信件再傳送到下一個 MTA 上面,這個由 MTA 幫忙轉信的功能就稱為 Relay 啦。那麼在這個功能當中,您有沒有發現一件奇怪的事情啊!那就是:『是否任何人都可以使用我的 MTA 郵件主機伺服器來傳送他的郵件呢?』這個問題涉及到 Mail Server 的設定技巧了!如果設定不良的話,例如早期的 Sendmail 版本中,他就沒有針對使用者來進行管制,也就是說,任何人都可以使用這樣的一部郵件主機來達到信件傳送的目的!這種主機我們稱為『Open Relay』的電子郵件主機喔!這裡請仔細的思考一下,如果我的 MTA 對於寄信的人沒有一個限制的話,結果會如何呢?呵呵!沒有錯,結果就是任何人都可以使用你的 MTA 來發信了!那有什麼好可怕的?我們在前言的地方就已經稍微說過了,那個所謂的『廣告信、垃圾信件』的問題,而如果你的 MTA 沒有對寄信的人作限制的話,由於任何人都可以使用你的 MTA 來發信,你的 MTA 將會變的『很笨重!』什麼意思?那就是,你的 MTA 將會幫任何人寄信,如此一來,你的『網路頻寬將會被廣告信件所用光!』結果將導致你的 MTA 變成『Open Relay 主機黑名單的一份子∼』!!! 為了避免這個問題,所以,目前所有新版的郵件主機伺服器架設軟體 ( Mail server packages ) 預設的情況之下,都不會對外完全的開放 Relay 的功能的!預設通常僅『針對主機 ( localhost ) 開放 Relay 的功能!』,不過,這樣的 MTA 是可以收受來自 Internet 上面的,註明收件者是我們 MTA 主機內部帳號的信件的,因此, MTA 在『收信』上面是沒有問題的! 但是關閉了 Relay 之後,雖然可以避免掉我們 MTA 主機被當成廣告信發送站,不過如此一來又造成了一些困擾!何解?因為通常我們僅針對主機,或者一些規範的 IP 或者是網段等信任的主機來開放他們的 Relay 的功能,所以在這個設定的範圍內的 Client 端電腦可以自由的收發信件,至於沒有規範到的 IP 來源的寄信信件,將完全的擋掉。然而萬一您使用的是 ADSL 計時制的呢?又或者您是常常在外面出差的大老闆,則你的 IP 將『不會固定』,完蛋啦∼怎麼辦?既不能完全開放 Relay ,又沒有固定 IP ,無解了嗎?呵呵!還好,有所謂的 郵件認證機制 來幫我們解決這個困境啦! 所謂的『郵件認證機制』就是在剛剛我們圖一的寄信流程圖中,在 MTA 當中加入需要檢查發信者的『帳號與密碼』比對的功能,當 MTA 接到來自 Client 端的傳信需求時,會檢查來自 Client 端的認證比對(帳號密碼),如果帳號與密碼比對正確,則開始接受信件並幫忙轉信,如果比對不正確則將該 MTA 並不會接受該封信件,直接在 Client 端顯示『不接受您的信件』之類的訊息喔!目前有相當多種的郵件認證機制,這裡我們偏向於介紹目前廣為使用的 SMTP 郵件認證這個機制。 所謂的 SMTP 郵件認證機制,顧名思義,就是在 smtp 這個協定上面動手腳的一個機制囉!亦即是在寄信的時候,(由 MUA 到 MTA 那個 step 1 的步驟中 ),我們的 MTA 主機『一定要求檢驗 MUA 發信者的帳號與密碼!』這樣的功能!果真能做到這一點的話,那麼你的 MTA 就可以在經過認證之後,提供認證者的 Relay 功能,而不需要針對某些信任網域或 IP 來分別設定開放 Relay 的功能啦!因為經由『認證』的機制,你的 MTA 會去分析寄信者的相關資訊,通過後才會接受信件並幫他們寄信,否則就不接受信件!呵呵!沒錯!就是這樣!透過這樣的機制,您將不需要規範 Relay 的 IP 或網段,直接交給 SMTP 郵件認證來幫你管理你寄件者的 Relay 功能,從此以後,你的 Clients 就不會常常向你抱怨說 MTA 不穩定囉! 我們底下將介紹使用 cyrus-sasl 這種密碼驗證的認證機制囉!好了!底下我們將要介紹一下目前郵件伺服器佔有率上面應該依然是第一的 sendmail 這個 mail server 的架設! -------------------------------------------------------------------------------- 套件安裝: 使用 RPM 來安裝 Sendmail 實在是『快樂得不得了∼』太簡單了∼目前提供 Sendmail 做為郵件主機伺服器的主要為 Red Hat 這個 Linux distribution ,至於其他的 Linux distribution 是否提供 Sendmail 就得請您自行到該官方網站上面查詢一下囉!底下我們主要是以 Red Hat 7.x 以及 Red Hat 9 的 Linux 系統做為 Sendmail 的介紹,此外, OpenLinux server 3.1.1 亦是使用此一相關功能套件的喔!那麼需要安裝哪些套件呢?還記得我們在 Mail Server 使用的協定裡面談到的幾個基本的協定吧?亦即是 SMTP 與 POP3 這兩個,此外,由於 Sendmail 必須『讀入』一些資料庫格式,所以也必須要安裝相關的資料庫的函式庫喔! 不過,如果您的系統是比較老舊的,例如 Red Hat 6.x 以前的版本,又或者是您的系統本來就不存在 Sendmail ,例如 Mandrake 等其他版本的 Linux distribution 時,那麼您就得使用 Tarball 的方式來安裝了! ( 事實上,幾乎所有的 Linux distribution 都會納入 sendmail ,只是有些套件,例如 Mandrake 預設是安裝 postfix 就是了! ) 安裝 Tarball 的 Sendmail 真是一件很『雪特』的苦差事,而且安裝的不夠好的話,還有可能產生一些設定上的困擾,此外,安裝的過程當中,使用到很多的『天書一般的設定檔案與牛屎一般的一大沱設定資料』,這些資料如果沒有一定程度的 Sendmail 架構知識,是無法安裝起來的,還有還有, Tarball 安裝的話,最好是所有的 Sendmail 相關套件都一起安裝,而不是分開來安裝,所以,鳥哥將 Sendmail 的 Tarball 安裝方法放在最後面,希望您至少看完『主機的設定』該節的完整內容,以及瀏覽過『關於郵件主機安全的設定』之後,再來嘗試以 Tarball 完整的安裝起屬於您自己的 Sendmail 郵件主機喔! 好了,底下我們就來安裝 Sendmail 及 POP3 這兩個郵件伺服器上面的元件吧! -------------------------------------------------------------------------------- 使用 RPM 安裝 sendmail ( 適用於原本 Linux 就是使用 sendmail ) 如果您是使用 Red Hat 7.3 以前的版本,例如 Red Hat 7.1, 7.2, 7.3 ,或者是 Open Linux Server 3.1.1 的話,那麼請先確定一下底下的套件是否已經安裝上去了呢? [root@test root]# rpm -qa | grep sendmail sendmail-cf-8.11.6-3 sendmail-8.11.6-3 # 若有屬性相依的問題時,請將您的原版安裝光碟拿出來, mount 上去後, # 仔細的,一個一個的將相依的套件安裝上去囉! ^_^ [root@test root]# rpm -qa | grep m4 m4-1.4.1-5 [root@test root]# rpm -q mailx mailx-8.1.1-22 那個 sendmail 就是主要的郵件伺服器程式, sendmail-cf 是一些設定檔案, 這兩個套件是『一定』要安裝的!至於那個 m4 的套件,則是轉換 sendmail 設定檔的一支程式囉!也要安裝喔!而那個 mailx 就是提供最簡單的 mail 這支寄信與收信的套件啦!由於我的測試系統是 Red Hat 7.2 ,所以使用的算是比較舊一點點的 sendmail 8.11.6 版,如果您想要換裝新版的 sendmail 8.12.xx 的話,請參考底下『Tarball 完整安裝 Sendmail 伺服器』的步驟!不過,這裡我們先還是玩一玩這個預設的版本即可!記得喔!安裝完畢之後,請到 Red Hat 的網站上面去下載更新的 RPM 來更新吧 http://www.redhat.com/apps/support/errata/!或者是台灣的映射站喔!ftp://linux.sinica.edu.tw/pub1/redhat/updates/ -------------------------------------------------------------------------------- 使用 RPM 安裝 IMAP 套件 這個 IMAP 套件,就是負責收信的 POP3 那個協定啦!請使用 RPM 確認他已經安裝在您的系統上面囉! [root@test root]# rpm -qa | grep imap imap-devel-2001a-1.72.0 imap-2001a-1.72.0 那個 imap 就是我們主要的 POP3 那個協定的套件囉!如果您是使用 Open Linux 的話,那麼設定檔應該會是在 /etc/inet.d 內,而如果是使用新的 xinetd 的話,那麼設定檔就會是在 /etc/xinetd.d 裡面囉!等一下我們再來好好的談一談啦! ( 註:本章節並沒有談到 imap 這個協定的設定與應用,事實上, imap 這個套件同時提供了 pop2, pop3, imap 等協定的設定與相關功能喔! ) -------------------------------------------------------------------------------- 主機的設定: 知道如何安裝 Sendmail 之後,接下來,我們得瞭解一下在郵件伺服器架設之前,您需要先進行什麼樣的工作呢? 若想要架設的郵件主機未來是對 Internet 提供服務的,那麼請確定您已經申請了『主機名稱』或者已經具備有『經過合法授權的 DNS 主機』的服務了!重要的地方在於你的主機必須能夠讓大家在 Internet 上面查詢的到啊! 雖然有 A 這個 DNS 的標誌就可以架設 Mail server ,不過,畢竟有 MX 標誌還是比較好的,所以,特別提醒大家,如果要架設 Mail Server ,最好(非必要)還是請您的上層 DNS 主機幫您設定 MX 標誌,或者,您自己擁有 DNS 主機管理權時,可以自行設定 MX 這個標號才好! 好了,既然是玩 Sendmail ,那麼就得瞭解一下 sendmail 的相關檔案與說明囉! -------------------------------------------------------------------------------- Sendmail Server 的檔案架構與基礎說明 Sendmail 幾乎所有的設定檔都安置在 /etc/mail 底下,不過,如果你是以 RPM 安裝的話,那麼還有所謂的 sendmail-cf 的設定檔,這個就是使用 M4 在進行 sendmail.cf 設定的程式!由於 Sendmail Server 所使用到的套件並不少,這包括有 sendmail, imap 以及 m4 等等,我們針對這些套件來談一談每個目錄與檔案下的資料吧! 設定檔: Sendmail 的設定檔幾乎全部都在 /etc/mail 底下,但是也不一定!因為還需要看當初你建立 sendmail.cf 這個主要設定檔時,將各個檔案放置的地點而定!這部份可以使用 RPM 的方式來反查出你的設定檔案的路徑。Sendmail 與相關套件的設定檔與相關的說明為: /etc/mail/sendmail.cf 或 /etc/sendmail.cf:這個就是 sendmail 的主要設定檔,所有的參數都是他在管理的!但是,這個檔案內的各個設定被號稱為『天書』,所謂的天書就是『非一般人看的懂得!』,就連 sendmai 官方網站自行開發出來的設定程式也都『告誡大家不要手動編輯這個檔案』,所以這裡我們也不談這個檔案的內容啦!但是既然這個是主要設定檔,那麼又不要讓大家手動編輯,那我要怎樣進行 sendmail 設定的修改呢?這個時候就需要使用到 M4 這個指令了! m4 可以將簡單的一些環境設定參數,重新以內定的函式庫或者函式定義來『製作』 sendmail.cf 這個設定檔呢!sendmail 預設的 sendmail.cf 放置在 /etc/mail/sendmail.cf ,但是某些 Linux distributions 則將他改放在 /etc/sendmail.cf 這裡∼ /usr/share/sendmail-cf/cf/xxxx.m4 :剛剛我們提過那個 sendmail.cf 對吧!而由於這個檔案最好不要手動修改,所以需要使用到 m4 這支程式。 m4 可以將一個簡單的環境設定檔轉成 sendmail.cf ,那個環境設定檔就是 sendmail-cf 這個套件所提供的啦。在 Red Hat 7.x 的系統中,主要的環境設定檔就是 /usr/share/sendmail-cf/cf/redhat.mc 這個檔案喔!不過,在 Red Hat 7.3 以後的所有 Red Hat Linux 版本當中,這個檔案被移動到 /etc/mail/sendmail.mc 了!至於其他的 Linux 版本則請參考你的 sendmail-cf 套件的內容! /etc/mail/local-host-names :這個檔案主要用來處理一個主機同時擁有多個主機名稱時候的收發信件主機名稱問題。這個檔案的用途可大了!當你的主機擁有多個 HOSTNAME 的時候,例如我的主機擁有三、四個主機名稱,那麼是否每個名稱都可以用來做為收受信件的主機名稱 ( To: .. ) 呢?並非如此!如果你的主機名稱為 test1.your.domain 以及 test2.your.domain ,而且這兩個 hostname 您都希望可以用在收受電子郵件,果真如此,那麼,你就必需將這兩個名字都寫入 local-host-names 這個檔案當中,一個主機名字佔用一行。注意:沒有寫入這個檔案的『你的主機名稱』,那信件將無法正確的寄達這部主機喔∼例如:www.vbird.adsldns.org、vbird.adsldns.org這兩個主機名稱的 ip 都是相同的,也就是指向同一台機器上。假設這台主機名稱預設為 vbird.adsldns.org,那在預設情況下,寄給 userid@vbird.adsldns.org 都是 ok 沒有問題的!但是寄給 userid@www.vbird.adsldns.org 就會出現錯誤。其中原因是因為沒有告訴 MTA 除了 vbird.adsldns.org 這個主機名稱外,還有 www.vbird.adsldns.org 也是指向這台主機上。所以寄給 userid@www.vbird.adsldns.org 會出現錯誤,通常就是 mail loop to me,要不然就是不允許 relay 的錯誤情況。 /etc/mail/access.db :這個是『規定誰可以或不可以使用本郵件伺服器的資料庫』,要轉成這個資料庫需要藉由 makemap 以及 /etc/mail/access 檔案的配合!這個檔案可以說是 Sendmail 裡面最重要的『使用者權限管理』的資料了!在後面我們會繼續說明。 /etc/mail/aliases.db 或 /etc/aliases.db :這個 aliases.db 是用來設定『信箱別名』的一個咚咚!你可以藉由這個檔案的設定來規範你的『群組收信』喔!不過,還需要藉由 aliases 及 newaliases 來做成這個檔案才行! /etc/mail/statistics :這個檔案在記錄 Sendmail 收發信件的相關資訊喔! 執行檔: Sendmail 的執行檔也不少,得說一說: /usr/sbin/sendmail:就是 sendmail 的主要執行檔啦!他會讀取 sendmail.cf 這個檔案的設定內容喔。你在發送信件時,就是使用這支程式啦!啟用這支程式之後,預設的啟用的 port 是 25 咯。 /usr/sbin/ipop3d:sendmail 的功能是在處理寄信問題,而 ipop3d 就是處理 client 的收信問題啦!如果你的 Mail Server 希望提供用戶端使用 Netscape 或 OutLook express 來收信,那麼就需要提供這個服務才行!這個服務的設定檔在 Red Hat 當中是在 /etc/xinetd.d/ipop3 ,如果是 Open Linux server 3.1.1 的話,那就會變成在 /etc/inet.d/imap 這個檔案中。注意: pop3 是由 imap 套件所提供的,並沒有包含在 sendmail 套件之中喔! /usr/sbin/makemap:主要將 access 轉成 access.db 的資料庫製作的執行檔; /usr/sbin/mailstats:將 /etc/mail/statistics 檔案讀出來的一支程式!可以查看到目前為止 Sendmail 工作共傳送、接收多少郵件囉! /usr/bin/newaliases:將 /etc/mail/aliases 轉成 /etc/mail/aliases.db 的執行檔! /usr/bin/mailq:用來觀察 /var/spool/mqueue 這個郵件暫存目錄的資料情況的指令! /usr/bin/m4:這個就是將 *.mc 檔案轉成 *.cf 檔案的主要執行檔囉!需要搭配 sendmail 原始碼,或者是 sendmail-cf 這個套件才行!注意: m4 是也需要額外的安裝的一個套件喔!sendmail 原本套件中並未包含 m4 這個套件! 郵件相關目錄: sendmail 接收下來的郵件放置在哪裡呢? /var/spool/mail :這個是郵件『收受下來之後,每個使用者信件放置的目錄』,一個帳號會使用掉一個檔案,例如你的帳號為 test ,那麼你的信在 Server 中時,就是 /var/spool/mail/test 這個檔案了!此外,你的 POP3 的協定亦是使用這個目錄中的 mailbox 做為預設的郵件取得的檔案資料。 /var/spool/mqueue:當郵件由於對方主機的問題,或者是網路的問題,而無法送出去時,那麼該封郵件將會暫時的存放在這個目錄下,然後主機會每隔大約 30 ~ 60 分鐘重新嘗試傳送一遍,通常設定在五天內該封信件還寄不出去,那就會退給原發信者了! /var/spool/clientmqueue:這是新的 sendmail 8.12 版本才會出現的佇列目錄 (您如果想要以 tarball 安裝 sendmail 的話,請務必參考本章底下的說明,這個目錄的權限設定相當的重要喔!) 。 大致上的檔案就是這樣啦!接下來談一下如何設定 sendmail 吧! -------------------------------------------------------------------------------- 使用 m4 來 |
本站公告:〔您越需要我們,我們就越有創意〕 | 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕 |
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 | 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」 |