測試認證後寄信功能,建置Open WebMail
中小企業Mail Server實務設定

2009-04-29
之前分成上中下三篇介紹了單機Mail Server收發郵件、使用客戶端收信的設定與調整、郵件安全議題,以及Mail Server之間遞送信件、Sendmail設定、郵件RELAY概念,並說明如何使用和設定圖形收發郵件軟體Evolution、郵件通訊協定POP與IMAP的特性差異、郵件伺服端帳號別名功能、郵件伺服器RELAY設定等等。延續同一主題,本文繼續介紹相關內容。
本文將從認證後寄信功能開始談起,並提及一些實務上較常更改的設定,例如~/.forward檔案撰寫、控制Dovecot提供的服務、Smart Host設定以及Open WebMail的建置等等,仍按照先前實作的測試環境,簡介如下:

A主機 172.18.0.191 郵件伺服器,接收寄「郵件帳號@foo2.com.tw」信件
B主機 172.18.0.108 郵件伺服器,接收寄「郵件帳號@foo.com.tw」信件
C主機 172.18.0.176 郵件客戶端,使用Evolution新增郵件帳號測試收發信件

認證後寄信功能

在前一期下篇文章中曾提到郵件伺服器RELAY設定,主要是以發信的客戶端來源IP來做鎖定,這種鎖定方式適合用在來源主機是固定IP或是固定於某個IP區段的方式。

遇到使用者在不固定IP的地點發送郵件(譬如出差在外)或是使用3G上網等等,這種來源IP不固定卻要用自己的伺服器來寄信時,就很難利用先前介紹的鎖定來源IP設定,來解決不能寄信的問題。

建議使用「認證後寄信」來解決這個問題,也就是寄信時需要帳號密碼認證。以下先介紹郵件客戶端程式Evolution認證後寄信的設定。

在Evolution啟用認證後寄信功能

在新增Evolution郵件帳號精靈「傳送電子郵件」頁面內,伺服器組態下方有一個「伺服器要求驗證」選項(預設為勾選),如果勾選,代表啟用認證後寄信功能。

在Sendmail啟用認證後寄信功能

由於將在B主機實作認證後的寄信功能,所以必須讓Sendmail啟用此功能,設定方法如下:

使用指令「cd/etc/mail/」切換到「/etc/mail/」目錄下,接著編輯sendmail.mc檔案。在sendmail.mc檔案內利用auth關鍵字尋找,找到認證後寄信的相關內容,如下圖所示,將以下兩行原本位於行首的「dnl」註解去掉即可。

修改之後,接著在「/etc/mail/」目錄下陸續執行「make」、「make restart」指令,讓設定生效。

啟用saslauthd並設定開機自動啟動

在剛才sendmail.mc檔案註解說明中,近中央有一行「Please remember that saslauthd needs to be running for AUTH.」附註,意思是「若要認證後寄信功能正常,請記得要啟動saslauthd這個服務」。所以,接著使用指令「/etc/init.d/saslauthd restart」重新啟動saslauthd服務。若是第一次停用,會出現FAILED的提示訊息,這並不會影響設定。隨後,使用指令「chkconfig saslauthd on」設定開機時自動啟動服務。

指令測試認證後寄信功能

接著,執行指令「telnet mail.foo.com.tw 25」連線到主機的25埠,並輸入郵件通訊指令「EHLO localhost」。回應的訊息內若出現「250-AUTH LOGIN PLAIN」,就表示啟用了認證後寄信功能。最後,輸入「QUIT」離開郵件通訊的指令介面。

使用Evolution測試認證後寄信功能

使用Evolution測試認證後寄信時,會跳出輸入SMTP密碼的畫面。認證成功後,就可以寄信。

提高Sendmail的Log Level

開啟認證後寄信的功能之後,意味著只要擁有一組能夠認證的帳號密碼,就可以發送信件。若是放任使用者隨意設定密碼,很可能輕易被猜中,並把這台郵件伺服器當作垃圾信、病毒信、廣告信的發送站,因此需要拉高Sendmail紀錄等級(Log Level),才看出是用那一組帳號密碼認證來寄信。

以下是將Log Level由原先的9拉高至14的示範。先執行指令「cd/etc/mail/」切換到「/etc/mail/」目錄內,接著編輯sendmail.mc檔案。在sendmail.mc檔案內利用LOG_LEVEL關鍵字搜尋,如下圖所示找到紀錄等級相關內容,將其中的LOG_LEVEL由原先的「9」改成「14」。

修改之後,在「/etc/mail/」目錄下陸續執行指令「make」、「make restart」,讓設定生效。

Log Level提高後的maillog觀察

提高Log Level之後,測試認證後寄信功能。在「 /var/log/」目錄下的maillog檔案中搜尋「authid」關鍵字,就可以找到是哪個帳號認證後寄信。下圖是使用less觀察maillog範例,請注意,圖中黑點游標右方的「authid=foo」,就是使用foo帳號來認證後寄信的紀錄。

使用者自訂郵件轉遞

使用者如果想要把信件轉遞(forward)給別的帳號時,只要在自己的家目錄下產生一個名為.forward檔案即可,這是一個以點開頭的隱藏檔案。以B主機上的foo3帳號為例,填寫內容範例如下:

foo
foo@foo2.com.tw
\foo3

第一行foo是指轉遞給這台主機foo帳號;第二行foo@foo2.com.tw是指轉遞給foo@foo2.com.tw帳號;第三行\foo3表示將保留一份郵件備份在這個foo3帳號,所以帳號前面要加上\反斜線。

實際操作可能遇到的問題

下圖是實際操作的情況,在B主機建立帳號foo3之後,使用帳號foo3來建立.forward檔案,檔案內容如同先前所述,並寄送一封測試信給自己。

首先,執行指令「useradd foo3」新增帳號foo3,此時預設的介殼是「/bin/bash」。接著,使用指令「su - foo3」將身分切換成foo3(當介殼是「/bin/bash」的時候才能夠登入到執行指令的介面),並且使用指令「vim .forward」編輯.forward檔案內容。最後,執行指令「mail foo3」寄送自我測試信件。

maillog觀察

寄送完畢發現並未如預期地轉遞信件,於是觀察maillog,此時發現一個「/home/foo3/.forward: Group writable file」訊息。

.forward檔案的權限建議值

使用指令「ls -l .forward」觀察此檔案的權限是「rw-rw-r--」(數字表示法為664),所以這個檔案開放群組權限能夠讀寫其內容。既然Sendmail指出群組寫入.forward檔案權限似乎過大,所以使用指令「chmod g-w .forward」去除群組的寫入權限。

再度觀察.forward檔案權限,更改之後為「rw-r--r--」(數字表示法為644)同群組的成員就只能唯讀。再度寄信自我測試,這次就正常轉遞了。

umask指令與「檔案/目錄產生的預設權限」有關

下頁圖示先以root身分使用umask指令觀察數值0022,並以touch指令產生檔案、執行mkdir指令製作目錄,並使用ls指令配合「-ld」選項來觀察其權限。

接著使用指令「su - foo」切換身分成foo。在Red Hat使用者帳號的umask值預設是0002,產生檔案與目錄並觀察其權限。然後使用指令「umask 0027」將值設定成0027,來產生檔案與目錄,並且觀察其權限。 最後,再度使用foo進行登入,umask值恢復成預設的0002,意思是暫時變更umask值,而不影響下次的登入情況,除非將設定寫入bash初始化執行的檔案中。

三種umask數值範例只看後三位數較容易了解,分別是022、002、027,其建立檔案與目錄的預設權限,整理如下表:

umask數值 檔案的權限 目錄的權限
022(0022) -rw-r--r--(644) drwxr-xr-x(755)
002(0002) -rw-rw-r--(664) drwxrwxr-x(755)
027(0027) -rw-r-----(640) drwxr-x---(750)

umask的mask有「面具」、「遮蔽」之意,將其數值一一拆開來看,常用的有三種,分別是0不遮(開放完整存取權限)、2遮住寫入的w(意味著唯讀)、7完全遮住(完全不開放存取),其他的數值(1 3 4 5 6)不是不能用,而是比較少用到,詳細的umask基礎與運算法,可參考後述網址文章(http://www.study-area.org/linux/system/linux_fs.htm)內關於umask的那一段敘述。

控制Dovecot提供的服務

本文上篇曾提到Dovecot預設提供四個服務,若需要控制四個服務是否開啟或關閉,則修改「/etc/dovcot.conf」設定檔內「protocols = imap imaps pop3 pop3s」這一行設定。

若想只開放加密連線的收信方式,則將該行內的註解拿掉,改成「protocols = imaps pop3s」,然後重新啟動Dovecot。

Smart Host設定

遇到伺服器希望將外寄的信件交由另一台主機幫忙送信時,則調整sendmail.mc檔案內的SMART_HOST設定即可。另一台主機若需要開放RELAY,則按照先前介紹的方法來設定即可。

下圖是編輯sendmail.mc檔案的快照,複製其中原來的一行「dnl define(`SMART_HOST', `smtp.your.provider')dnl」並取消其開頭的dnl註解,之後改寫成「define(`SMART_HOST', `mail.foo2.com.tw')dnl」,這樣外寄的信件就會全部送往mail.foo2.com.tw主機。記得在「/etc/mail/」目錄下執行指令「make」與「make restart」,這樣設定才會生效。

建置Open WebMail

Open WebMail是網頁介面(Web-Based)郵件收發軟體,安裝之後就可以透過網頁瀏覽器來收發電子郵件。

筆者到Open WebMail站台的Download連結
(http://openwebmail.org/openwebmail/download/redhat/rpm/
packages/rhel5/readme.txt)
找到一個readme.txt,然後依照說明操作。先新增一個yum client設定檔案「/etc/yum.repos.d/openwebmail.repo」,然後使用yum安裝Open WebMail。操作步驟說明如下:

安裝Open WebMail

先使用指令「cd/etc/yum.repos.d/」切換到「/etc/yum.repos.d/」目錄下,接著使用指令
「lftpget http://openwebmail.org/openwebmail/download/redhat/rpm/release/
openwebmail.repo」將openwebmail.repo檔案下載到「/etc/yum.repos.d/」目錄內。隨後使用指令「yum install -y openwebmail」安裝Open WebMail。

筆者遇到缺少相依套件的狀況,所以先自行下載並安裝perl-Text-Iconv套件。供RHEL5使用的perl-Text-Iconv套件檔案perl-Text-Iconv-1.7-2.el5.i386.rpm位於
「http://openwebmail.org/openwebmail/download/redhat/rpm/packages/rhel5/
perl-Text-Iconv/perl-Text-Iconv-1.7-2.el5.i386.rpm」,可以使用wget工具直接下載。下載完成之後,使用指令「rpm -ivh perl-Text-Iconv-1.7-2.el5.i386.rpm」安裝perl-Text-Iconv套件。

初始化Open WebMail

使用指令「/var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init」初始化Open WebMail,然後存取郵件主機「http://localhost.localdomain/cgi-bin/openwebmail/openwebmail.pl」或「http://localhost.localdomain/webmail」。若名稱解析正確無誤,就可以將localhost.localdomain替換成正確的主機名稱或IP位址,例如mail.foo.com.tw。

如果httpd仍未安裝、沒啟動,可使用指令「yum install -y httpd」安裝,並執行指令「/etc/init.d/httpd restart」來重新啟動。若想讓httpd開機時自動啟動,則執行指令「chkconfig httpd on」。

記得開啟防火牆的80埠。至於SELinux,openwebmail的readme.txt指示必須關閉,所以必須設定成permissive或disabled。處理防火牆和SELinux都可以使用指令「system-config-securitylevel」來完成。若只是暫時關掉SELinux來測試Open WebMail,使用指令「setenforce 0」即可。

下圖為Open WebMail登入畫面,使用一般帳號即可登入,例如foo。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!