Home | SmbFTPD | Forum |
|
第十七章 郵件伺服器進階應用 基本的郵件伺服器已能滿足大多數人的需求,但經過一段時間之後,您可能會遇到更多的使用者要求。例如,開始有人報怨垃圾信太多、有人希望可以使用網頁收發信件等等。本章將介紹一些郵件伺服器的應用,讓您的伺服器功能更加強大。 讀完本章後,您將了解下列主題:
17.1 虛擬郵件主機 如果我們想要在同一台機器上收多台主機的信件,或者想要在一台主機上設定可以 "收" "發" 信件的虛擬帳號 (如果只要收,可以簡單的設定 aliases 即可),我們可以經由虛擬主機的設定來達成。假設有二個 Domain Name,一個是 abc.com,另一個是 old.cde.com。這份文件包含了二種設定方式:一個是讓二個 domain name
收到的信對映到一台機器上的使用者,也就是說不能有不存在的虛擬使用者;另一個設定是讓你可以設定不同的虛擬使用者對映到不同機器上的任何使用者。不管我們要做哪一種設定,都必需要先設定
DNS。 17.1.1 DNS 設定 為了要讓寄出去的信知道要往哪一台主機上送,必須要先設定 DNS。假設我們現在已經有一台設定好 DNS 的主機,hostname 是 abc.com。我們要讓 abc.com 處理 old.cde.com 的信件的話,最簡單的方式就是將 mail.cde.com 指向 abc.com (CNAME records),也就是二個 doamin 有同樣的 IP。不過這樣一來,old.cde.com 就不能獨立存在了,也就是說不會有一台機器的 hostname 名為 old.cde.com,並提供 FTP、www(也可以有虛擬主機)、telnet等服務。 因此,我們要使用的是改變 DNS 的 MX record。設定只有處理該主機的郵件時,才將 old.cde.com 轉向 abc.com。請在你的 DNS 中加入下列設定:
完成後要重新讀設定檔並等一段時間設定才會在網路上生效。接著我們就可以來做 sendmail 的設定了。 17.1.2 對映到同一台機器的真實使用者 第一種設定的使用時機,例如你的公司主機原來是 mail.cde.com,現在換成了 abc.com,你希望讓原本的使用者 jack@mail.cde.com 和新的 jack@abc.com 都能由 jack@abc.com 來收信。這種設定很簡單,只要編輯 /etc/mail/relay-domains 及 /etc/mail/local-host-names 這二個檔案,加入要增加收信的主機名稱即可。以本例而言,除了那二個檔案原本的內容外,要再增加一行:
這樣了不管是原本 mail.cde.com 或是真正主機名稱 abc.com 的信件,都可以由 abc.com 的相同的使用者收信。 17.1.3 可以擁有虛擬使用者 第二種設定是讓我們可以設定一個虛擬的帳號,並且可以利用它來送信。這個設定是經由編輯 /etc/mail/virtusertable 來達成。相同的,我們在 abc.com 這台主機中設定它的 virtusertable。我們以下列二個 virtusertable 的例子來說明,請注意,二個欄位間的空白是用 tab 鍵,而非使用空白鍵: 範例一:
上面的例子中,凡是寄給 joe@mail.cde.com 的信都會送給本地使用者 jschmoe。而以 joe@mail.cde.com 寄出的信收件人所看到的寄件人一樣是 joe@mail.cde.com,如果在寄信時要身份認證的話,必須使用 jschmoe 的帳號及其密碼。接下來,寄給 jane@mail.cde.com 的信會送給 jdoe@othercompany.com,剩下來所有給 mail.cde.com 的信都會送給本地 jschmoe 這個使用者。 範例二:
這一個例子中,第一行和範例一一樣,凡是寄給 joe@mail.cde.com 的信都會送給本地使用者 jschmoe。而凡是寄給 bogus@mail.cde.com 都會回應沒有這個使用者。第三行如果是寄給 list@mail.cde.com 的信,都會轉給本地的 yourdomain-list 這個虛擬使用者,你可以在 /etc/aliases 中加入關於 yourdomain-list 這個使用者的信要怎麼處理,怎麼設定別名。最後一行,凡是其他非上述三行使用者的信,都交由在 othercompany.com 這台機器上相對映的使用者來處理。 你可以依照上面的範例來編輯你的 virtusertable,完成編輯後,必須要使用以下指令來將這些檔案做成 sendmail 能接受的 DB 格式: # makemap hash virtusertable.db < virtusertable # newaliases 都完成後,我們就可以到別台機器使用虛擬帳號來試試收發信。假設我們要使用的虛擬帳號是上述範例一中的第二行 jane@mail.cde.com,以 outlook 中的設定為例,所設定的 E-mail 仍然是 jane@mail.cde.com,如下圖所示: 圖 17-1 所設定的 pop3 及 smtp 主機也是 mail.cde.com。但是使用者及密碼是 othercompany.com 上的使用者 jdoe 及其密碼,如下圖所示: 圖17-2 在上圖中,如果 othercompany.com 在寄信時要身份認証,則上圖中 "外寄郵件伺服器" 的選項 "我的伺服器需要驗證"必須打勾。如此一來您就可以使用 jane@mail.cde.com 來收發信,而且在別人收到信時會顯示寄件人是 jane@mail.cde.com。 17.2 垃圾信及病毒防護 全拜電子郵件所賜,經由網際網路,我們可以很快的傳送郵件。然而,卻有人利用電子郵件從事令人不悅的廣告發送行為。垃圾郵件可以說是目前網路上最令人厭惡的行為,相信常使用電子郵件的讀者們每天一定都會收到許多垃圾信件。所有伺服器上處理的使用者都要處理這些垃圾郵件簡直是太浪費資源了。而且,除了垃圾信外,郵件中所夾帶的病毒也十分危險,萬一有人不小心打開了具有病毒的信件,接下來又是另一場災難。 面對這些垃圾信及病毒信,我們有更好的解決方式,就是使用 MailScanner 加上病毒防護的功能,讓我們的郵件伺服器更加安全、好用。MailScanner 是一套免費的軟體,很多網站都使用它來過濾垃圾信件。除了垃圾信外,我們還可以外掛其它模組,以支援病毒掃瞄。另外,我們也可以用它來阻擋具有特定的副檔名附件的郵件。您可以到 http://www.sng.ecs.soton.ac.uk/mailscanner/ 找到更多關於 MailScanner 的說明。 使用 MailScanner 的好處是我們原本安裝的 Sendmail 不需要做任何的修改,只要將 Sendmail 跑在 MTA only 的模式即可。 17.2.1 MailScanner 架構說明 在沒有安裝任何垃圾信處理軟體之前,在寄信、或者由其它伺服器收到信件時,我們的伺服器會先判斷該信件是否為本機的信件,如果是,則呼叫 MDA (mail 這支指令),將信件放到 /var/mail 目錄下。如果是要給其它伺服器的信件,則放到 /var/spool/mqueue 下,Sendmail 會定時檢查該目錄,並將信件傳送出去。示意圖如下所示: 圖 17-3 在有了 MailScanner 後,當 Sendmail 收到信後,會先將信件放到 /var/spool/mqueue.in 中。接下來 MailScanner 會定時去檢查該目錄下的檔案,經過 MailScanner 掃瞄檢查後,合法的郵件會被放到 /var/spool/mqueue 中。接下來的處理程序就和原本 Sendmail 的處理一樣。示意圖如下: 圖 17-4 MailScanner 在檢查郵件時有很多功能,它使用了一些外掛模組來檢查垃圾信及病毒信。詳細的檢查過程如下:
圖 17-5 當 MailScanner 判斷某封信件為垃圾信時,它有幾種處理模式,包含附加標記在主旨上後送出、退信、刪除、隔離、轉寄等等。我們在使用 MailScanner 之後,應該要先在郵件的主旨上附上標記後送出。當有使用者發現不是垃圾信卻被設為垃圾信時,我們可以將該信件的寄件者加入白名單中 (就是不檢查信件的寄件者清單)。如此運作一段時間都沒問題後,再使用比較嚴格的方式,進行退信或刪除。如此一來,我們才不會遺漏正常的信件。 MailScanner 的功能十分強大,但是設定卻很容易,我們只要進行一些基本設定,即可以擁有強大的垃圾信及病毒掃瞄功能。 17.2.2 安裝 MailScanner FreeBSD 已經將 MailScanner 放入 ports 中,我們只要使用 ports 來安裝即可。除了 MailScanner 外,我們還要安裝 SpamAssassin 及防毒軟體 ClamAV。 首先請使用下列指令安裝 MailScanner: # cd /usr/ports/mail/mailscanner/ # make install 接著會出現一個進階選項的視窗,請將 SpamAssassin 及 ClamAV 打勾。 安裝完 MailScanner 後,我們要先初始化設定檔: # make initial-config 由於 MailScanner 會取代原本 Sendmail 的部份功能,而 Sendmail 只要啟用 MTA 模式即可,所以我們先編輯 /etc/rc.conf 並停用原本的 Sendmail。
接著,我們必須先進行一些基本的設定。我們在 rc.conf 中設定開機時要啟動 MTA 及 MailScanner。另外在防毒軟體方面,我們必須設定定時更新病毒碼。請先編輯 /etc/rc.conf 並加入下列這幾行:
上述設定將會在開機時啟動 freshclam 這支程式,預設每二小時會去檢查一次是否有新的病毒碼要下載。另外 由於 MailScanner 會在信件進來時,先將信件放到 /var/spool/mqueue.in 中,我們必須先建立下列 MailScanner 所必須使用的目錄: # mkdir -p /var/spool/mqueue.in # mkdir -p /var/spool/MailScanner/incoming # mkdir -p /var/spool/MailScanner/quarantine 這樣我們就已經完成了大部份的設定,接下來我們必須進行 MailScanner 的細部設定。MailScanner 的設定檔位於 /usr/local/etc/MailScanner/MailScanner.conf,如果您希望快速的設定好 MailScanner,以下是幾個必須修改的地方:
最後,您就可以重開機以使用 MailScanner 的功能了。 17.2.3 設定 MailScanner 除了上述的設定外,MailScanner 及 SpamAssassin 還有很多的設定項目可以修改,相關的設定檔全部都放在 /usr/local/etc/MailScanner 中。我們先來說明一下這些設定檔的用途:
MailScanner.conf 是最主要的設定檔,我們先來看看幾個比較常用的項目:
filename.rules.conf 可以用來設定郵件附件中不允許哪些副檔名。在 filename.rules.conf 中已經有一些預設的副檔名,如果您想要允許某些副檔名,可以修改該檔案。例如,我們如果想要允許 .exe 檔,則可以在下列這一行前加上「#」:
spam.whitelist.rules 及 spam.blacklist.rules 可以用來設定黑白名單。如果您有信件被誤判為垃圾信,可以在白名單中加入讓寄件來源,如此一來,該信件就不會再被當作垃圾信了。 反之,如果有垃圾信沒有被判斷為垃圾信,則可以自行在黑名單中加入。這二個檔案的格式一樣,以 spam.whitelist.rules 為例:
它有三個欄位,第一個欄位是指定要檢查的是來源或目的地,第二個是設定來源,第三個欄位為 yes 表示是白名單。以上述內容為例,是設定所有從 friends.net 所寄來的信件都不是垃圾信。另外,我們也可以直接使用 IP 或網域。 17.2.4 MailScanner 進階管理 在 MailScanner 上線後,我們必須先將設定放鬆一點,例如在判斷是垃圾信時,不要退件或刪除,還是先寄給使用者。如果使用者發現不該是垃圾信的郵件被誤判,則可以將該信件加入白名單中。經過一段時間的測試都沒問題了,再設定將高分數的垃圾信刪除、並退回低分數的垃圾信。 當有誤判時,我們必須要檢查郵件源始檔,知道誤判原因後,才能將該寄信者加入白名單中。我們來看一下一封垃圾信的標頭: 圖 17-6 我們可以看到這封信的分數是 7 (有 7 個 s),表示這是垃圾信。如果您覺得判斷是否為垃圾信的分數太低,很多不是垃圾信也會被當成垃圾信,則可以將 MailScanner.conf 中的「Required SpamAssassin Score」調低。筆者使用的是 5。 當一封信被判斷是垃圾信時,如果您選擇將它隔離,則隔離的信件會放在 /var/spool/MailScanner/quarantine 中。當郵件附件中包含不合法的檔名時,收信者會收到下列信件: 圖 17-7 如果您打附件,則會有下列內容:
如果有使用者要求要取回該檔案,您可以看一下上列附件的內容,並依它所說明的位址 (以上列為例是 /var/spool/MailScanner/quarantine/20051001/j91Db6xx015931 這個目錄) 取回檔案。 17.3 Open WebMail Open WebMail 是一套由國人開發的多國語 Web Base 的郵件軟體。它不僅可以讓我們從網頁上收發信件,還包含了一些強大的功能。例如,拼字檢查、行事曆、網路硬碟等等。安裝它之後,使用者可以從任何電腦經由瀏覽器收發信件,真的很方便。 17.3.1 系統需求 在安裝 Open WebMail 前,你必須先安裝具有 CGI 功能的 Apache 伺服器,如果你是照本書的說明安裝,那麼你的伺服器就具有這項功能了,只要你有編輯 httpd.conf 將 CGI 的功能啟動。除此之外,在開始安裝 Open Webmail 之前,我們必須先安裝下列套件。 Open WebMail 使用具有 SUID 功能的 suidperl,但由於 suidperl 有危險性,所以 FreeBSD 將 suidperl 的功能關閉了。因此,在安裝之前,我們必須先安裝具 SUID 功能的 Perl。請注意,由於 Perl 有很多相關的模組,如果您之前有更新過 port tree,則現在要安裝的 Perl 版本可能和原本系統中的版本不同,將會造成很多程式無法運作。所以,如果您之前有做過 port 的更新,您應該要使用 portupgrade 來安裝 Perl。 我們使用 portupgarde 來安裝 Perl,如果您還沒有安裝 portupgrade,請使用下列指令安裝: # cd /usr/ports/ports-mgmt/portupgrade # make install clean 關於 portupgrade 的說明,請先參考「軟體安裝」一章。接下來,我們就可以使用 portupgrade 來更新 Perl 了。請先使用 perl -v 來查看您目前所使用的 Port 版本,FreeBSD 6.0 預設是使用 Perl 5.8.x,所以我們使用下列指令更新: # portupgrade -rf "perl-5.8.*" -m "ENABLE_SUIDPERL=yes" # ln -s /usr/local/bin/suidperl /usr/bin/suidperl 接下來,我們就可以來安裝一些 Open WebMail 所需的軟體了,如果在安裝過程中,您發現這些軟體已經安裝過了,則可以跳過該軟體。首先,為了要有檢查附加檔案的功能,必須安裝 MIME-Base64,我們可以使用下列指令安裝: # cd /usr/ports/converters/p5-MIME-Base64 # make install clean 為了具有拼字檢查功能,必須安裝 ispell,請以 ports 安裝: # cd /usr/ports/textproc/ispell # make install clean 為了要支援 MD5 加密,我們必須安裝 perl 的 MD5 模組: # cd /usr/ports/security/p5-MD5 # make install clean 為了要讓 Open Webmail 可以有語言轉換的能力,我們必須安裝Text-Iconvv: # cd /usr/ports/converters/p5-Text-Iconv # make install clean 另外,還要先安裝 libnet 這個網路模組: # cd /usr/ports/net/p5-Net # make install clean 您的 Apache 必須支援 CGI,請編輯 httpd.conf,找到關於你網頁根目錄設定的地方,並在 Options 選項中加入 ExecCGI,並設定好 cgi-bin 的所在目錄:
接著請重新啟動 Apache 就做好事前的準備了。 17.3.2 安裝 Open WebMail 您可以到下列網址取得最新版的 Open Web Mail。 http://turtle.ee.ncku.edu.tw/openwebmail/download/ 假設您網頁根目錄在 /home/www 中,而在 apache 中所設定的 cgi-bin 目錄是在 /home/www/cgi-bin 中。請將取得的檔案放到你的網頁根目錄去,並 cd 到你的網頁根目錄。執行下列指令以將取得的檔案解壓縮: # tar -zxvBpf openwebmail-2.51.tar.gz 解壓縮後會在 cgi-bin 中產生一個目錄為 openwebmail, 存放 Open WebMail 的主要程式;另外會產生一個 data 的目錄,在 data 目錄下也有一個 openwebmail 的目錄,該目錄存放 openwebmail 非 cgi 的資料(如圖片、聲音等)。我將 /home/www/data/openwebmail 的目錄搬到 /home/www/openwebmail。並將 cgi-bin 目錄下的 openwebmail 搬移到 /home/www/cgi-bin 目錄中。現在 openwebmail 的 cgi 程式位於 /home/www/cgi-bin/openwebmail 中,非 cgi 檔案位於 /home/www/openwebmail 中,我們要記住的就是這二個目錄的位置以方便下列的設定。 最後要修改 /home/www/cgi-bin/openwebmail/etc/openwebmail.conf,更改你的參數設定,尤其是路徑。基本上要修改的地方有:
我們接著要初始化 Open Webmail,請執行下列指令: # /home/www/cgi-bin/openwebmail/openwebmail-tool.pl --init 您會被要求是否要送出系統資訊到 Open Webmail 的總部,如果您不想送出任何資料,只需按 N 即可。最後我們就可以使用 http://yourhost/cgi-bin/openwebmail/openwebmail.pl 來連到登入的首頁,請使用系統中的使用者帳號 (root 不能登入) 及密碼登入,登入後畫面如下圖所示。 圖 17-8 Open WebMail 是台灣人寫的軟體,它的使用手冊非常豐富,您可以點選登入首頁的「說明」部份來查看使用手冊。
|