郵件伺服器(mail Server)建置全記錄

作者:徐秉義(Albert Hsu)

須要特別準備的東西

架設郵件伺服器,以正式上線為目標的話,是需要『固定 IP 』及『網域名稱』。

一個固定 IP 位址

在一般小型企業或家庭網路,使用的 IP 很有可能是『非固定 IP 』。而一般架設伺服器,首先就是要將『非固定 IP 』改成『固定 IP 』方式。國內的 ISP 業者,例如像 Hinet 或 Seednet ,皆有提供 ADSL 的『 非固定 IP 』轉成『 固定 IP 』服務,當然費用上:固定制會比非固定制稍貴一些。通常稍具規模的中小企業,都已經是使用『 固定 IP 』。

Tips:若是使用中華電信 ADSL 線路,可以在 http://service.hinet.net/2004/adslstaticip_faq.htm 網頁中查詢『ADSL非固定制配發固定IP』的相關消息。至於其它家 ISP 業者,請洽詢相關網頁或服務人員。

一個網域名稱

一個網域名稱(Domain Name)對於一個郵件伺服主機是很重要的,這同時也是您架設好的郵件伺服器所使用的郵件地址,或許未來 Web 網站也有機會用到的。

依照台灣的規定:若是要申請 com.tw 結尾(通常是公司行號),須要有營利事業登記證。財團法人可以申請 org.tw,個人建議申請 idv.tw。若讀者想申請非 tw 結尾的網域名稱,國內有些公司可以代為申請與管理,或是也可以直接與國外公司購買。

Note:台灣的網域名稱申請,是由 TWNIC (台灣網路資訊中心)總管,授權民間機構代為受理網域註冊, TWNIC 網址為 http://www.twnic.net.tw/。國外網域則由 http://www.internic.net/ 授權給民間企業受理網域註冊,例如:『 http://www.networksolutions.com 』、『 http://www.register.com 』

準備 Linux 主機

在此主要是準備好軟硬體的配備,硬體配備主要與用量有關,也就是上線人數。軟體的部份:發行套件是以 Linux Fedora Core 4 為例,搭配 sendmail + dovecot 郵件應用程式。

硬體配備建議規格

現今電腦規格日新月異,而且 Linux 對硬體要求原本就不高。讀者會發現,隨隨便便拿一台桌上型電腦就可以上線當 Linux Server。筆者在此提供些實際經驗:以台灣 30 到 50 個上線人數的中小企業,建議記憶體為 512 MB 到 1 GB 左右為佳,至於其它配備,只要不是太舊(三、五年前)或是有問題的硬體(可能會造成主機不穩定),您的 Linux 主機就會穩穩的提供全年無休的 Mail 服務。

軟體建置

第1步■先將基本的 Linux 安裝起來,筆者以下使用的範例是 Fedora Core 4(以下簡稱 FC4),大部份的安裝步驟與一般無異,唯需要注意的是『防火牆』與『 SELinux 』相關設定。在此建議讀者將上述兩項功能暫時先關閉,等到一切設定完成後在來設定這兩項提高 Linux 安全性的設定。

Tips:若是讀者對防火牆設定有一定的程度了解的話,不妨參考以下的表格來設定 Mail Server該開啟那些 Port(埠)

通訊協定埠號功用
smtp25郵件遞送
pop3110POP3方式收信
imap143IMAP方式收信
Note:關於『 SELinux 』的設定,可參考本刊第七期『 SELinux 設定術 』有詳細的介紹。SELinux 可於安裝時做設定或關閉其功能,若是已經安裝好,則在命令列輸入『 system-config-securitylevel 』即可呼叫出『防火牆與 SELinux 』設定畫面(或是點選【 開始功能表選單】→【桌面】→【系統設定】→【安全等級】做設定)。

selinux.png

第2步■在此例中使用的『 MTA 』是 FC4內建的『 sendmail 』,使用指令『rpm -q sendmail』來查詢 sendmail 套件是否有安裝,並使用『 /etc/init.d/sendmail start 』來啟動 sendmail 服務

sendmail.png

進階學習:管理 sendmail 服務的指令
常見的 Linux 發行套件均可用『/etc/init.d/sendmail 』查看 sendmail 的用法;『/etc/init.d/sendmail start』啟動 sendmail;『/etc/init.d/sendmail stop』停掉 sendmail。除此之外,像以下要控制『 dovecot 服務』的話,只要把『 sendmail 』換成『 dovecot 』即可。這種『/etc/init.d/xxx』的架構在 Linux 很常見,一般稱為 initscripts(初使化腳本檔),在微軟的系統中也有類似的程式稱為『服務管理』,其實在 Linux / Unix 稱為 Daemon(守護神)的在微軟稱做 Service(服務)。這也就是 Unix 的服務程式常有個『d』結尾的原因。(『d』是『daemon』的簡寫),像是 httpd 或是 mysqld 等等。像 Fedora / RedHat / Mandriva 可以透過指令『service sendmail』、SuSE 透過指令『rcpostfix』,都可以控制 mail 服務,其實只是『初使化腳本檔』(Initial Scripts)比較方便的使用方法而已!

第3步■使用指令『 rpm -q dovecot 』,來查詢 dovecot 是否有安裝,並使用『 /etc/init.d/dovecot start 』來啟動 dovecot 服務

dovecot.png

進階學習:設定開機後自動執行『 sendmail 』與『 dovecot 』
若是 sendmail 與 dovecot 在重新開機後沒有自動啟動的話,每次重開機都需要再手動啟動,這會是相當麻煩的一件事。建議讀者若是使用 Fedora / RedHat 系列 Linux 的話,可以使用指令『ntsysv』呼叫出選單介面的控制畫面,找到並標記『 sendmail 』與『 dovecot 』後,再按下[OK]即可。這樣 sendmail 與 dovecot 就會於開機後自動啟動。

ntsysv

Tips:其它類似『ntsysv』能控制各服務是否於開機啟動的,還有指令模式的『chkconfig』以及圖型模式的『system-config-services』(Fedora專用)

FC4 執行 system-config-services 的畫面

system-config-services

網域名稱申請與設定

設定 mail Server 其中一項瓶頸即是『 網域名稱與 DNS 設定 』。事實上困難的不在設定流程,而是 DNS 的相關概念。以下就請讀者在實作過程中,一同瞭解 DNS 的概念。

第1步■開啟瀏覽器來到『 http://www.twnic.net.tw/ 』,進入頁面後會看到 whois 的查詢表單,這裡讀者可要好好的選個你喜歡的網域名稱,若是已被別人申請,也別太難過,換一個再試試吧!

twnic

第2步■找到您想要申請的網域名稱後,由於 twnic 將網域名稱申請轉給民間機構處理,所以你可以任選一家你喜歡的網域公司,依照網頁上的流程,購買網域名稱。

register

Note:關於網域費用的部份,各家業者差別不大,大約每年幾佰元。感受到的差別在於各家設定介面您習不習慣與服務人員的服務態度(如果你曾與業者通電話或是 email 才感受的到)

第3步■完成申請與繳費後,會取得一組帳號密碼,這組帳號密碼是用來管理您的網域名稱用的。筆者接下來就以 pchome 的設定介面為例,介紹如何設定好網域名稱。開啟瀏覽器輸入網址『 http://myname.pchome.com.tw 』點選【管理我的網址】→【DNS設定】輸入帳號密碼後,會看到如下的畫面。

dns

輸入的內容如下表:再此的設定範例中使用的網域名稱為『 powermag.com.tw 』,dns 伺服器名稱設定成『 ns.powermag.com.tw 』與『 ns1.powermag.com.tw 』 IP 設定為『 220.132.126.29 』若讀者有兩個以上的真實 IP ,也可以使用不同的 IP 位址。

 

-DNS名稱HOST/IP 位址
一組ns.powermag.com.tw220.132.126.29
二組ns1.powermag.com.tw220.132.126.29
Note:這裡『 ns.powermag.com.tw 』 與 『 ns1.powermag.com.tw 』一般要對應到兩個不同 IP 的主機(這樣子才有備援的功能),但筆者只取得一個 IP ,所以就把那兩台皆對應到同一個 IP 了。
Note:在台灣的 DNS 伺服器名稱較喜歡名為『 dns.網域名稱 』與筆者所用的『 ns.網域名稱 』不同,但筆者發現外國比較喜歡用『 ns.網域名稱 』,也就習慣用『 ns.網域名稱 』。

DNS Server 建置與管理

DNS 設定與 Mail Server 習習相關,所以筆者索性連 DNS Server 也一併架設與設定。若是讀者已有現成可用的 DNS Server,也可以將設定新增上去。

DNS 服務基本介紹

第1步■檢查是否已經安裝 dns 相關套件。在 Unix 裡使用的 DNS 套件名為『 bind 』,輸入『 rpm -qa | grep bind 』可查詢相關套件是否有安裝。使用 『 /etc/init.d/named start 』來啟動 DNS 服務。

Note:DNS 的套件名稱為『 bind 』但服務名稱為『 named 』,請讀者小心注意。

bind

第2步■設定 named 的設定檔『 named.conf 』。使用編輯器(本例是用 vi )開啟『 /etc/named.conf 』後,找到『... localdomain ...』那個區段後,仿製出您所要管理的網域名稱(此範例為 powermag.com.tw )。

zone "powermag.com.tw" IN {
        type master;
        file "powermag.com.tw.zone";
        allow-update { none; };
};

zone

第3步■接下來要做出這個 zone 的紀錄檔案( record )。可使用『 cp -a /var/named/localdomain.zone /var/named/powermag.com.tw.zone 』複製一類似的附本,再加以修改『 /var/named/powermag.com.tw.zone 』這個檔案成如下:

Note:此『 /var/named/powermag.com.tw.zone 』需對應到第2步的『 file "powermag.com.tw.zone" 』
$TTL    86400
@               IN SOA  ns root  (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN NS           ns
                IN NS           ns1
                IN MX 10        mail
ns              IN A            220.132.126.29
ns1             IN A            220.132.126.29
mail            IN A            220.132.126.29

zone2

這裡的內容與 mail 最相關的重要設定,即『 MX 』的那一行。因為 mail Server 相互遞送信件時,是依靠『 MX 』紀錄的(Mail eXchange)。筆者此例為:『mail Server 若遇到要寄給 user@powermag.com.tw 的信件會與名為 mail.powermag.com.tw 的主機連繫,將 mail 遞送過去。』

Tips:若是要套用設定,需注意將『 powermag.com.tw 』換成您的網域名稱、『 220.132.126.29 』換成您的 IP。

第4步■測試 mx 紀錄是否正常。先使用『 service named restart 』重新啟動 named 後,使用 dig 來測試。輸入『 dig @localhost powermag.com.tw mx 』。此指令的意思是『向 localhost 本機詢問 powermag.com.tw 網域名稱的 MX 紀錄』

dig

會有如下的回應:

...
;; QUESTION SECTION:
;powermag.com.tw.               IN      MX

;; ANSWER SECTION:
powermag.com.tw.        86400   IN      MX      10 mail.powermag.com.tw.

;; AUTHORITY SECTION:
powermag.com.tw.        86400   IN      NS      ns.powermag.com.tw.
powermag.com.tw.        86400   IN      NS      ns1.powermag.com.tw.

;; ADDITIONAL SECTION:
mail.powermag.com.tw.   86400   IN      A       220.132.126.29
ns.powermag.com.tw.     86400   IN      A       220.132.126.29
ns1.powermag.com.tw.    86400   IN      A       220.132.126.29

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct 27 10:15:38 2005
;; MSG SIZE  rcvd: 137
...

首先先瞭解倒數第三行『 SERVER: 127.0.0.1#53(127.0.0.1) 』意思是與『127.0.0.1 這台主機詢問』。於是他回答『 powermag.com.tw. 86400 IN MX 10 mail.powermag.com.tw. 』這個 powermag.com.tw 名稱有 MX 紀錄指到 mail.powermag.com.tw,後續『 mail.powermag.com.tw. 86400 IN A 220.132.126.29 』 mail.powermag.com.tw 有 A 紀錄指到 220.132.126.29 這個 IP。

第5步■設定開機自動啟動 dns Server。使用『 chkconfig / ntsysv / system-config-services 』一類的指令設定下次開機自動啟動 named。下圖是使用 chkconfig 的情形。使用指令『 chkconfig --list named 』列出、『 chkconfig named on 』設定開機自動啟動。

chkconfig

sendmail 架設與調整

FC4 內建的 sendmail 因為安全因素,所以預設值只開放『 127.0.0.1 』也就是『 localhost 』介面來傳輸信件。要開放能夠對外傳輸,須修改 sendmail 設定檔 sendmail.cf(位於 /etc/mail/ 目錄下) 。

第1步■使用『 netstat -na 』指令會看到有一行『tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 』的那一行,意思是 sendmail 用 IP 127.0.0.1 聽 25 埠號。

Tips:您也可以使用『 netstat -na | more 』分頁瀏覽或 『 netstat -na | grep -w 25 』更快速的找到您所想看到的資料。以下是使用到 grep 的情形。

grepnetstat.png

第2步■編輯 sendmail 設定檔『 /etc/mail/sendmail.cf 』找到如下的一行『 O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA 』將 127.0.0.1 修改成 0.0.0.0。

sendmailcf.png

第3步■輸入指令『 service sendmail restart 』重新啟動 sendmail,再度使用第1步的『 netstat -na 』指令測試與檢查,會發現原來 LISTEN 『 127.0.0.1 』會變成『 0.0.0.0 』,表示 sendmail 已對外開放傳送與接收信件。

0000

dovecot 架設與調整

dovecot 這個新服務,主要是用來管理 POP3 / IMAP 用的。若是讀者曾經有用過 Linux Mail Server,應該會發現早期的 imapd (透過 xinetd 啟動)現在已經被 dovecot 取代囉。接下來就開始設定 dovecot 。

Tips:sendmail 其實只單純提供 smtp 的服務,而 POP3 與 IMAP (主要是 mail 客戶端軟體與 Server 連接時使用到)需由其它軟體來提供服務,早期的套件名為『 imapd 』現在為『 dovecot 』,筆者使用經驗上來看, imapd 是透過 xinetd 啟動而 dovecot 是單獨啟動(standalone)的方式,也就因為如此 dovecot 的效能更好,除此之外 dovecot 的功能更強大,設定清楚明瞭,有興趣可到 http://wiki.dovecot.org/ 一探究竟。

請開啟並編輯 dovecot 的設定檔『 /etc/dovecot.conf 』找到這一行『 protocols = imap imaps pop3 pop3s 』,一般我們通常只提供 imap 與 pop3 的服務,所以改成『 protocols = imap pop3 』後,使用『 /etc/init.d/dovecot restart 』重新啟動 dovecot 服務。

進階學習:imaps 與 pop3s 皆是其『imap 與 pop3 Over SSL 』的傳輸方式,在傳輸時加密與解密,能使傳輸期間安全性提高許多。但一般用戶大多還是使用 imap 與 pop3 ,不一定會使用到 imaps 與 pop3s,較注重安全性的用戶可考慮使用 imaps 與 pop3s。

dovecotconf

使用 mail 客戶端軟體作測試

使用者通常透過 outlook 這一類的軟體與 Linux mail Server 做溝通,這一類的軟體在 mail 的架構中稱為 MUA (Mail User Agent),大概意思是指使用者寫信、看信與送信的介面程式,這代理(Agent)的中介程式主要功能是負責看信、寫信與將信件傳送到 mail Server。常見的 MUA 請見下表:

 

運作平台功能強大擁有基本功能簡單明瞭
Linuxevolutionmozilla -mailkmail(以 KDE 為基礎)
Windowsoutlookoutlook express

Tips:在 Windows 平台下可嘗試使用『 thunderBird 』,她的功能性與 outlook express 、 mozilla -mail 差不多,而且效能不錯呦!您可以在『 http://moztw.org/ 』下載到中文版的 thunderBird ,並還提供 Mac(蘋果電腦)版供使用!

使用 evolution 做郵件客戶端

第1步■在 Linux 圖型介面下,使用指令『 evolution & 』開啟 evolution 主程式。(亦可點選【 開始功能表選單】→【網際網路】→【電子郵件】來啟動 evolution 主程式)。

evolution

Note:在第一次啟動 evolution 會有設定精靈,以下是使用設定精靈方式介紹。

第2步■下一步後會看到『 身份 』這個對話盒,在完整名稱填入『 您的名稱 』(例:祝英台)、電子郵件地址填入『 您的郵件帳號 』(例:username@yourdomainname.com.tw』,之後按[下一頁]。

id

第3步■看到『 接收電子郵件 』對話盒,下拉『 伺服器類型 』選單,選擇『 pop 』,主機輸入『 您的 mail Server 名稱 』(通常為 DNS 中 MX 紀錄所指向到的主機,例:『 mail.powermag.com.tw 』),再按[下一頁]。

recievemail

第4步■一般會使電腦自動檢查新信件,勾選此選項後按[下一頁]。

recievemailopt

第5步■接下來到寄信主機的設定,在主機的欄位填入『 mail.powermag.com.tw 』按[下一頁]。

send

Note:這寄信『 主機欄位 』其實不一定會與收信主機相同,最合理的寄信主機應該設定為『 離您客戶端最近的 mail Server 』且須確認此 mail Server 能願意『 Relay 』(轉送)您的信件。( RELAY 設定會在後續介紹)

第6步■給這個帳號取個名字(在 evolution 裡面使用),按[下一頁]。

name

第7步■接下來是選擇時區,點選『台灣』後,按[下一頁],接著按下[套用]。

timezone

finish

Mail Server 常見問題

以下針對建置與使用 Mail Server 經常問到的問題,來為各位讀者介紹。

該如何管理 mail 的帳號與密碼?

在管理 mail Server 的帳號與密碼方面,在本例中是使用『系統帳號與系統密碼』,筆者這樣說,就一定還有別的方法來管理帳號密碼(詳見:進階學習)。

使用系統帳號,要小心一點,別讓『郵件帳號能夠執行 Shell Command』,要達到此目的,就把使用者的 Shell 變成 『 /sbin/nologin 』或『 /bin/false 』,千萬別設定成『 /bin/bash 』這一類可下命令的介殼,接下來介紹如何『 建立帳號 』與『 設定密碼 』的步驟,您可使用圖型模式『 system-config-users 』或文字模式『 useradd 』建帳號、『 passwd 』設密碼。

指令模式:用 root 身份的終端機介面輸入『 useradd -m -s /sbin/nologin albert 』來建立一個名為 albert 的帳號,參數 -m 代表需要建立家目錄、 -s /sbin/nologin 代表使用 /sbin/nologin 當做 Shell(介殼)。接下來使用『 passwd albert 』來設定 albert 這個帳號的所使用的密碼(也就是收信時用的帳號密碼),若你把密碼設定的太簡單,系統會回應些訊息(如範例),但最後的一行 successfully 代表設定成功了!

Tips:何謂太簡單的密碼或是較複雜的密碼?一個好的密碼建議為字碼四類至少使用三類,並且超過六碼。四類分別是:『英文字小寫』、『英文字大寫』、『數字』與『符號』
太簡單的密碼較複雜的密碼
不足六碼(太短)六碼以上(夠長)
都是數字或是英文單字(太單純)混用『英文字大小寫』、『數字』、『符號』

useradd

以下為『 system-config-users 』的設定畫面。(或是點選【 開始功能表選單】→【桌面】→【系統設定】→【使用者與群組】做設定)。

system-config-users

進階學習:Mail Server 除了使用系統帳號外,很有可能是使用虛擬帳號,虛擬帳號有些是用檔案來管理(就不是系統中的 /etc/passwd、/etc/shadow),若帳號數量更多需要較高效能時,也可以考慮使用資料庫來存取帳號密碼,有些常見於中大型 Mail Server 架構中,像是使用 NIS 或 LDAP,也是不錯的選擇!

寄信件給這台郵件主機,都沒收下來!這怎麼回事?

在 sendmail 設定中預設有個『 /etc/mail/local-host-names 』,請將此主機要收的網域名稱信件(以 albert@powermag.com.tw 為例,則輸入 powermag.com.tw),皆寫到這個檔案中,一個名稱換一行,最好重新啟動 sendmail 喔!這個設定的意思是告訴 sendmail,只要是列在此檔案中的名稱,就是本機所承認的郵件名稱。

localhostnames

令一個常見的收不到信原因是 DNS 設定,若之前 DNS 的 MX 紀錄設定有正確的指向到此郵件主機,應該就不會發生這個情形。

一台主機可以管理多個 mail Domain 嗎?

假設有 albert@aaa.com.tw 與 albert@bbb.com.tw 與 albert@mail.aaa.com.tw 皆希望由此實體主機做收發信件的工作,理論上是可以的。

在此還有兩種不同的情況,一是希望 albert@aaa.com.tw 與 albert@bbb.com.tw 與 albert@mail.aaa.com.tw 皆使用同一組帳號密碼與信箱,這比較容易,只要將 aaa.com.tw 與 bbb.com.tw 與 mail.aaa.com.tw 一行一行的寫到『 /etc/mail/local-host-names 』後,重新啟動 sendmail 即可。當然這些名稱 DNS 也要設定好 MX 紀錄並將 A 紀錄指向到此主機喔!

multidomain

若是需求是使用不同的一組帳號密碼與信箱,則難度較高,筆者稱為此種設定為『 單一實體主機管理多網域郵件 』,最常遇到的重覆像是『 service 、 webmaster 』諸如此類的常用帳號,這基本上並不太可能只使用系統帳號來搞定,筆者有使用『 exim 』( 角色與 sendmail 相同為 MTA )+ 『 dovecot 』實作出來,有機會再與讀者介紹。

糟糕!我的信件無法透過此 mail Server 寄出,訊息為『 Relay Denied 』

下圖為 evolution 發生 RELAY Denied 的情形

relaydeny

這 mail RELAY 其實是我們 mail 客戶端軟體,經由 smtp 通訊方式與郵件主機溝通後,透過此主機將信件轉遞(RELAY)出去的意思。

例如:使用 mail 客戶端軟體 outlook express,經由 smtp 通訊方式與郵件主機 msa.hinet.net 溝通,透過此主機將信件轉遞(RELAY)出去給 service@yahoo.com.tw。但若只是寄給此主機上的帳號,則不算是 RELAY(例如寄給 service@msa.hinet.net)

早期 mail Server 通常會 RELAY 別台主機信件,但後來因為廣告信件氾濫,廣告信廠商他們都想藉由別人的 Mail 主機將廣告發出去(造成大流量是其一、令其它主機與使用者厭惡是其二)。所以後來一般的 Mail Server 預設都不 RELAY 別台主機的 mail,要開放 RELAY 皆是有條件的 RELAY 而不是全部開放。例如: msa.hinet.net 郵件主機只開放從 hinet 管理的 IP 才可以透過他發信,從別處來(例如:seednet IP)發信就不 RELAY。

開放來源為特定網段或特定 IP 能夠發信

在 sendmail 可經由修改 /etc/mail/access,來開放來源為特定網段或特定 IP 能夠發信,例如:輸入內容『 211.21.50.83 』為單一 IP、『 192.168.2 』為開放 192.168.2.0 到 192.168.2.255 這些主機,請先使用『 cd /etc/mail 』切換到相關目錄下,編輯好 access 檔案後,輸入『 make restart 』此指令會重新將 access 製作成 access.db 並重新啟動 sendmail 在用 mail 客戶端軟體重新試寄即可。

make

在 sendmail 可經由修改 /etc/mail/access,來開放由特定網段或特定IP,例如:輸入內容『 211.21.50.83 』為單一 IP、『 192.168.2 』為開放 192.168.2.0 到 192.168.2.255 這些主機,請先使用『 cd /etc/mail 』切換到相關目錄下,編輯好 access 檔案後,輸入『 make restart 』此指令會重新將 access 製作成 access.db 並重新啟動 sendmail,之後再用 mail 客戶端軟體重新試寄即可。

Note:sendmail 主程式並不會讀取 /etc/mail/access,取而代之是讀取 /etc/mail/access.db 這個 db file(二進位檔案),主要是因為如此一來使得效能更好。事實上早期還需要使用一個指令『 makemap 』將 access 轉成 access.db,後來因為 Linux 越來越人性化,很多步驟皆包在 Script 檔(此例為位於 /etc/mail 下執行 make restart)來運行。

Tips:此種由於加強效能而將『文字檔轉成二進位 data 』檔在 Linux 下還蠻常見的,例如: /etc/mail/access.db 、還有待會介紹到的 /etc/aliases.db ,事實上不只 sendmail 會用這招,其它程式也會,像是系統 Library 搜尋路徑 /etc/ld.so.conf(文字檔) 與 /etc/ld.so.cache( db 檔)便是一例。

使用『認證後寄信』來開放發信

以上這種使用固定來源 IP 方式來開放 RELAY 幾乎可以解決大半客戶端主機寄信問題。但有些使用行動設備(例:筆記型電腦)使用的來源 IP 會浮動,無法固定下來。這只好使用令一種稱為『認證後寄信』方式,在經由客戶端啟用『認證後寄信』功能後,即可 RELAY 寄信。

客戶端軟體方面:以 evolution 設定『認證後寄信』來說,下拉【 功能表選單】→【編輯】→【preferences】,點選相關帳號後,呼叫出『帳號編輯器』對話盒,選擇到『傳送電子郵件』分頁,勾選『伺服器要求驗證』,按下[確定]。

auth

因為 evolution 的功能強大,所以支援驗證類型方式較多,有些也比較安全,但其它常見的郵件客戶端軟體(例:outlook),一般只支援『 PLAIN 』(明碼)方式,但因為 sendmail 預設不開啟以『 PLAIN 』方式來驗證(嫌不夠安全),接下來介紹如何修改 sendmail 能支援一般客戶端軟體的『 PLAIN 』認證後寄信。

伺服端軟體方面:需修改『 /etc/mail/sendmail.cf 』找到『 #O AuthMechanisms=EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5 』這一行改成『 O AuthMechanisms=EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5 LOGIN PLAIN 』使 sendmail 能使用『 plain 』驗證方式。

plain

這裡需要注意的是:sendmail 認證後寄信是透過一個名為『 saslauthd 』的服務所執行,故我們需啟動此服務。輸入『 service saslauthd start 』啟動、『 chkconfig saslauthd on 』設定開機自動啟動。而剛才有改過 sendmail 設定檔,所以使用『 service sendmail restart 重新啟動 sendmail 。

Note:修改 sendmail.cf 一般建議使用『 m4 』來修改,但因為筆者只修改極小部份,就直接編輯 sendmail.cf 檔。

sasl

郵件轉寄

以下是一些常見的轉寄模式:

 

寄給轉給模式
foo@aaa.com.twfoo2@aaa.com.tw一對一
foo@aaa.com.twfoo2@aaa.com.tw
foo4@aaa.com.tw
一對多
foo@aaa.com.tw
foo3@aaa.com.tw
foo2@aaa.com.tw多對一

在此 mail 帳號簡單分成『 實體 』(有系統帳號、有家目錄)與『 別名 』(使用 /etc/aliases 別名出來的),實體與別名使用上最大的差別就是別名要轉給實體才可以收信。

一對一模式:若想做到 foo@aaa.com.tw(實體)轉給 foo2@aaa.com.tw(實體)的話,在 foo 的家目錄(預設為 /home/foo ),寫一個『 .forward 』,內容為 foo2 即可。

forward

一對一模式中,若想做到 foo@aaa.com.tw(別名)轉給 foo2@aaa.com.tw(實體)的話,編輯『 /etc/aliases 』的最下方,輸入『 foo:    foo2 』記得要下 『 newaliases 』更新成 /etc/aliases.db。

Note:alias 是別名的意思,此例中 foo 為 foo2 的別名。

aliases

一對多模式:實體方式依然是編輯 『 .forward 』,一個 mail 帳號換一行,也可轉送給外部 mail Server 帳號。本例子是會轉給本機的 foo2 與 foo4 與 alberthsu@synage.com.tw(外部帳號),以下為 /home/foo/.forward 內容。

foo2
foo4
alberthsu@synage.com.tw
Note:轉出並不會留信件在原信箱,若有此需求再加上此帳號名稱於 .forward 檔,但行首須多一個『 \ 』。以下為 /home/foo/.forward 留一份的設定情形。
\foo
foo2
foo4
alberthsu@synage.com.tw

forwardmulti

一對多模式:別名方式依然是編輯 『 /etc/aliases 』,使個逗點做分隔,也是可以轉送給外部 mail Server 帳號。本例子是會轉給本機的 foo2 與 foo4 與 alberthsu@synage.com.tw(外部帳號),以下為 /etc/aliases 其中一行內容。記得改過 aliases 須輸入 『 newaliases 』更新。更詳細的設定可參考『 man aliases 』

...
foo: foo2, foo4, alberthsu@synage.com.tw
...

manaliases

多對一模式可由一對一方式多做幾次達成,讀者不難發現郵件的轉寄主要就是由『 ~/.forward 』(家目錄下 .forward 檔)與『 /etc/aliases 』控制。

IMAP 與 POP3 的比較與實際運用

在之前 evolution 收信範例中,是使用 POP3 來收 email,另一種常見的收信方式為 IMAP 。大部份郵件客戶端軟體都會支援這兩種方式,evolution 也不例外,下圖為 evolution 收 IMAP 信件執行時快照。

evolutionimap

下為優缺點比較表:

 

通訊協定POP3(Port 110)IMAP(Port 143)
優點可離線瀏覽信件
看信時反應速度快
不用一次將全部
的信件都收回來
缺點必須一次將全部
的信件都收回來
需線上瀏覽信件
看信時反應速度較慢

簡單的說:POP3 是將信件一次收回,但如果遇到巨大郵件或較差的網路頻寬,就很容易發生信件收不下來的情形;而 IMAP 連線後,只會將所有的郵件主旨( Subject )傳到客戶端提供列表,需要瀏覽某一封信件時再向 Server 取得內文,好處是巨大信件或垃圾郵件可在遠端時就刪掉。

WebMail 簡介

WebMail 是使用 Web Browser(像是 firefox 或 IE)來當做收發信件的介面,而 Web 主機收到來自客戶端請求後再透過程式與 Mail Server 溝通。常見的程式有 OpenWebMail(http://www.openwebmail.org/)也有許多商業的 WebMail 程式,使用 WebMail 會感覺像是用 IMAP 的方式瀏覽信件,對於經常使用不同電腦的使用者來說還蠻方便的。

下圖為智元科技(http://www.synage.com.tw/)所自行開發的產品 Netask 所內建 Webmail 功能。

netask

MUA MTA MDA MailBox 之間關係

架設 mail Server 常用到 MUA MTA MDA MailBox 這些名詞,很多都是簡稱,完整的名稱如下:

 

簡稱完整名稱軟體
MUAMail User Agent
使用者代理
evolution
outlook
MTAMail Transfer Agent
傳送代理
sendmail
exim
MDAMail Deliver Agent
遞送(派送)代理
procmail

mail

舉例來說:使用者開啟 outlook(MUA)程式寄信給 user@bbb.com.tw ,smtp 主機設定為 mx.aaa.com.tw,假設 mx.aaa.com.tw 使用 sendmail(MTA)當做 mail Server,發現是要給 bbb.com.tw 的信件(不是給 mx.aaa.com.tw 這台主機的),於是向 DNS 問 bbb.com.tw 的 MX 紀錄,結果 bbb.com.tw 的 MX 紀錄指向到 mail.bbb.com.tw 這台主機, mx.aaa.com.tw 於是將此封信傳給 mail.bbb.com.tw (也是 MTA ),mail.bbb.com.tw 收到後,發現是屬於他的信件,再交給 procmail (MDA)派送到 user 這個帳戶的信箱(MailBox)

Note:是不是屬於此主機的信件,在 sendmail 是由 /etc/mail/local-host-names 來判定。以上例來說: mx.aaa.com.tw 的 /etc/mail/local-host-names 檔案內容不可以有 bbb.com.tw,而 mail.bbb.com.tw 的 /etc/mail/local-host-names 檔案內容卻一定要有 bbb.com.tw。(假設兩台主機皆使用 sendmail 當 MTA
Note:MailBox 一般位於 /var/spool/mail/$USER(使用者名稱)。

再以上例來說,這次假設 outlook 是要寄給 user@aaa.com.tw, smtp 主機設定不變依然是 mx.aaa.com.tw,假設 mx.aaa.com.tw 的 /etc/mail/local-host-names 檔案內容有 aaa.com.tw 則 mx.aaa.com.tw 就會直接將信由本機 procmail 派信給本機郵件帳戶。特別注意的是:『 這樣並不算 RELAY 』。

使用 mailq 指令來查詢還未寄出的信件

在 MTA(上例 mx.aaa.com.tw) 還沒將信傳到令一個 MTA 之前(上例 mail.bbb.com.tw) ,會暫時存放在原 MTA Queue 的目錄(預設為 /var/spool/mqueue ),這稱為 mail Queue ,可以用 mailq 指令查詢還有那些信件還 Queue 在 Mail Server 上。

mailq

Valid XHTML 1.0 Strict Valid CSS! Get Firefox

Creative Commons License
This site is licensed under a Creative Commons Attribution 2.5 Taiwan License.