架設郵件伺服器,以正式上線為目標的話,是需要『固定 IP 』及『網域名稱』。
在一般小型企業或家庭網路,使用的 IP 很有可能是『非固定 IP 』。而一般架設伺服器,首先就是要將『非固定 IP 』改成『固定 IP 』方式。國內的 ISP 業者,例如像 Hinet 或 Seednet ,皆有提供 ADSL 的『 非固定 IP 』轉成『 固定 IP 』服務,當然費用上:固定制會比非固定制稍貴一些。通常稍具規模的中小企業,都已經是使用『 固定 IP 』。
一個網域名稱(Domain Name)對於一個郵件伺服主機是很重要的,這同時也是您架設好的郵件伺服器所使用的郵件地址,或許未來 Web 網站也有機會用到的。
依照台灣的規定:若是要申請 com.tw 結尾(通常是公司行號),須要有營利事業登記證。財團法人可以申請 org.tw,個人建議申請 idv.tw。若讀者想申請非 tw 結尾的網域名稱,國內有些公司可以代為申請與管理,或是也可以直接與國外公司購買。
在此主要是準備好軟硬體的配備,硬體配備主要與用量有關,也就是上線人數。軟體的部份:發行套件是以 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 安全性的設定。
| 通訊協定 | 埠號 | 功用 |
| smtp | 25 | 郵件遞送 |
| pop3 | 110 | POP3方式收信 |
| imap | 143 | IMAP方式收信 |

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

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


FC4 執行 system-config-services 的畫面

設定 mail Server 其中一項瓶頸即是『 網域名稱與 DNS 設定 』。事實上困難的不在設定流程,而是 DNS 的相關概念。以下就請讀者在實作過程中,一同瞭解 DNS 的概念。
第1步■開啟瀏覽器來到『 http://www.twnic.net.tw/ 』,進入頁面後會看到 whois 的查詢表單,這裡讀者可要好好的選個你喜歡的網域名稱,若是已被別人申請,也別太難過,換一個再試試吧!

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

第3步■完成申請與繳費後,會取得一組帳號密碼,這組帳號密碼是用來管理您的網域名稱用的。筆者接下來就以 pchome 的設定介面為例,介紹如何設定好網域名稱。開啟瀏覽器輸入網址『 http://myname.pchome.com.tw 』點選【管理我的網址】→【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.tw | 220.132.126.29 |
| 二組 | ns1.powermag.com.tw | 220.132.126.29 |
DNS 設定與 Mail Server 習習相關,所以筆者索性連 DNS Server 也一併架設與設定。若是讀者已有現成可用的 DNS Server,也可以將設定新增上去。
第1步■檢查是否已經安裝 dns 相關套件。在 Unix 裡使用的 DNS 套件名為『 bind 』,輸入『 rpm -qa | grep bind 』可查詢相關套件是否有安裝。使用 『 /etc/init.d/named start 』來啟動 DNS 服務。

第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; };
};

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

這裡的內容與 mail 最相關的重要設定,即『 MX 』的那一行。因為 mail Server 相互遞送信件時,是依靠『 MX 』紀錄的(Mail eXchange)。筆者此例為:『mail Server 若遇到要寄給 user@powermag.com.tw 的信件會與名為 mail.powermag.com.tw 的主機連繫,將 mail 遞送過去。』
第4步■測試 mx 紀錄是否正常。先使用『 service named restart 』重新啟動 named 後,使用 dig 來測試。輸入『 dig @localhost powermag.com.tw mx 』。此指令的意思是『向 localhost 本機詢問 powermag.com.tw 網域名稱的 MX 紀錄』

會有如下的回應:
... ;; 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 』設定開機自動啟動。

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 埠號。

第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。

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

dovecot 這個新服務,主要是用來管理 POP3 / IMAP 用的。若是讀者曾經有用過 Linux Mail Server,應該會發現早期的 imapd (透過 xinetd 啟動)現在已經被 dovecot 取代囉。接下來就開始設定 dovecot 。
請開啟並編輯 dovecot 的設定檔『 /etc/dovecot.conf 』找到這一行『 protocols = imap imaps pop3 pop3s 』,一般我們通常只提供 imap 與 pop3 的服務,所以改成『 protocols = imap pop3 』後,使用『 /etc/init.d/dovecot restart 』重新啟動 dovecot 服務。

使用者通常透過 outlook 這一類的軟體與 Linux mail Server 做溝通,這一類的軟體在 mail 的架構中稱為 MUA (Mail User Agent),大概意思是指使用者寫信、看信與送信的介面程式,這代理(Agent)的中介程式主要功能是負責看信、寫信與將信件傳送到 mail Server。常見的 MUA 請見下表:
| 運作平台 | 功能強大 | 擁有基本功能 | 簡單明瞭 |
| Linux | evolution | mozilla -mail | kmail(以 KDE 為基礎) |
| Windows | outlook | outlook express |
第1步■在 Linux 圖型介面下,使用指令『 evolution & 』開啟 evolution 主程式。(亦可點選【 開始功能表選單】→【網際網路】→【電子郵件】來啟動 evolution 主程式)。

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

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

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

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

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

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


以下針對建置與使用 Mail Server 經常問到的問題,來為各位讀者介紹。
在管理 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 代表設定成功了!
| 太簡單的密碼 | 較複雜的密碼 |
| 不足六碼(太短) | 六碼以上(夠長) |
| 都是數字或是英文單字(太單純) | 混用『英文字大小寫』、『數字』、『符號』 |

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

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

令一個常見的收不到信原因是 DNS 設定,若之前 DNS 的 MX 紀錄設定有正確的指向到此郵件主機,應該就不會發生這個情形。
假設有 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 紀錄指向到此主機喔!

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

這 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。
在 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 客戶端軟體重新試寄即可。

在 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 客戶端軟體重新試寄即可。
以上這種使用固定來源 IP 方式來開放 RELAY 幾乎可以解決大半客戶端主機寄信問題。但有些使用行動設備(例:筆記型電腦)使用的來源 IP 會浮動,無法固定下來。這只好使用令一種稱為『認證後寄信』方式,在經由客戶端啟用『認證後寄信』功能後,即可 RELAY 寄信。
客戶端軟體方面:以 evolution 設定『認證後寄信』來說,下拉【 功能表選單】→【編輯】→【preferences】,點選相關帳號後,呼叫出『帳號編輯器』對話盒,選擇到『傳送電子郵件』分頁,勾選『伺服器要求驗證』,按下[確定]。

因為 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 』驗證方式。

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

以下是一些常見的轉寄模式:
| 寄給 | 轉給 | 模式 |
| foo@aaa.com.tw | foo2@aaa.com.tw | 一對一 |
| foo@aaa.com.tw | foo2@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 即可。

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

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

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

多對一模式可由一對一方式多做幾次達成,讀者不難發現郵件的轉寄主要就是由『 ~/.forward 』(家目錄下 .forward 檔)與『 /etc/aliases 』控制。
在之前 evolution 收信範例中,是使用 POP3 來收 email,另一種常見的收信方式為 IMAP 。大部份郵件客戶端軟體都會支援這兩種方式,evolution 也不例外,下圖為 evolution 收 IMAP 信件執行時快照。

下為優缺點比較表:
| 通訊協定 | POP3(Port 110) | IMAP(Port 143) |
| 優點 | 可離線瀏覽信件 看信時反應速度快 | 不用一次將全部 的信件都收回來 |
| 缺點 | 必須一次將全部 的信件都收回來 | 需線上瀏覽信件 看信時反應速度較慢 |
簡單的說:POP3 是將信件一次收回,但如果遇到巨大郵件或較差的網路頻寬,就很容易發生信件收不下來的情形;而 IMAP 連線後,只會將所有的郵件主旨( Subject )傳到客戶端提供列表,需要瀏覽某一封信件時再向 Server 取得內文,好處是巨大信件或垃圾郵件可在遠端時就刪掉。
WebMail 是使用 Web Browser(像是 firefox 或 IE)來當做收發信件的介面,而 Web 主機收到來自客戶端請求後再透過程式與 Mail Server 溝通。常見的程式有 OpenWebMail(http://www.openwebmail.org/)也有許多商業的 WebMail 程式,使用 WebMail 會感覺像是用 IMAP 的方式瀏覽信件,對於經常使用不同電腦的使用者來說還蠻方便的。
下圖為智元科技(http://www.synage.com.tw/)所自行開發的產品 Netask 所內建 Webmail 功能。

架設 mail Server 常用到 MUA MTA MDA MailBox 這些名詞,很多都是簡稱,完整的名稱如下:
| 簡稱 | 完整名稱 | 軟體 |
| MUA | Mail User Agent 使用者代理 | evolution outlook |
| MTA | Mail Transfer Agent 傳送代理 | sendmail exim |
| MDA | Mail Deliver Agent 遞送(派送)代理 | procmail |

舉例來說:使用者開啟 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)
再以上例來說,這次假設 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 』。
在 MTA(上例 mx.aaa.com.tw) 還沒將信傳到令一個 MTA 之前(上例 mail.bbb.com.tw) ,會暫時存放在原 MTA Queue 的目錄(預設為 /var/spool/mqueue ),這稱為 mail Queue ,可以用 mailq 指令查詢還有那些信件還 Queue 在 Mail Server 上。
