電子郵件對於一般人來說,是越來越重要了,像鳥哥通常就是使用電子郵件來跟大部分的朋友聯絡,
而且,重要的文件與公事也幾乎是使用電子郵件來傳遞的呢!而在一般的個人電腦上面,我們通常是使用類似
Outlook express/Netscape/Mozilla 之類的 Client 端軟體,並透過 POP3/SMTP
協定來收發信件。
不過,遺憾的是,電子郵件其實並不安全!這點在一些
安全通報 上面就可以查閱的到了,不論是
MTA/MUA
都可能有漏洞的!而且,除了漏洞問題之外,更麻煩的是,廣告信件的大量發行,
造成我們用戶端的頻寬浪費,真的是很討厭!但是,電子郵件又是這樣的重要,
不能不收發電子郵件啊!那怎麼辦?這個時候我們就可以使用
Web 介面的 MUA 來進行電子郵件的收發啊!
那麼這種 webmail 的地位是甚麼呢?是否只要有 webmail 就不需要 mail server
了呢?當然不是這樣!
webmail 其實可以被當成是一種
MUA 來看待,也就是說,您可以將他想成與 outlook express 同等級的應用軟體;而透過這個
webmail 我們可以對 mail serve r進行電子郵件的存取。也就是說, webmail 要能夠使用,必須要架構在具有
WWW 及 Mail Server 的服務上面才行!這幾者之間的關係可以簡單的這樣看:
Server 端 Client
-------------------------
| Apache/Webmail<---|<---- Mozilla/IE(瀏覽器)
| | |
|<---SMTP-----| |
| | |
| /var/spool/mail/accout |
`-------------------------'
也就是說,當 Client 端以瀏覽器登入主機後,主機透過 webmail
提供的服務,讓登入的使用者可以讀取該主機內自己的郵件,並且,也可以透過主機的
smtp 協定來進行郵件的寄發!
架設前須知
如同前面的說明,webmail 要能夠正確的運作,其實還需要 www/mail 這兩種服務的存在才行!此外,由於
webmail 需要能夠正確的存取主機內的郵件檔案 (/var/spool/mail/account),所以,我們必須要提供
webmail 足夠的權力來存取才行。因此,您必需要確定:
- WWW Server (Apache) 已經順利運作;
- Mail Server (Postfix/sendmail) 已經順利運作;
- webmail 要求的前置軟體必須已經安裝:例如 openwebmail 需要
perl / suidperl / perl(CGI) / perl-Text-Iconv / perl-Compress-Zlib
等等的套件呢!其中 suid 方面的軟體,則是提供 webmail 存取權力的套件。
所以囉,在您架設 webmail 之前,請先確認您的主機提供的 WWW/Mail
服務是正確無誤的!此外,前驅套件也必須要沒有問題的安裝才行!
底下我們以目前相當熱門,並且是由台灣成大博士董仲愷主導發起的 Openwebmail
這個套件來進行安裝!這東西很不錯喔!您可以在底下的連結當中下載與 Red Hat/Fedora
有關的 RPM 檔案:
或者是下載原始檔案 (tarball):
底下鳥哥將以 FC1 及 Mandrake 10.0 作為測試的基準來安裝 openwebmai 喔!
因為 openwebmail 本身就有針對 Red Hat/Fedora 釋出 RPM 檔案,所以我們當然就直接以編譯好的
RPM 檔案來安裝即可!那如果是非 Red Hat/Fedora 怎麼辦?沒關係,可以使用原始碼來安裝啊!
FC1 的 RPM 安裝
請先確定 Postfix 或者 sendmail 已經安裝完畢,此外, Apache 也已經安裝好了!如果想要快速的架設好您的
Postfix + SASL 認證的話,可以這樣做:(更詳細的資訊請查閱:
http://linux.vbird.org0390postfix.htm)
# 0. 先確定所有的套件都已經安裝了,主要有:
postfix-2.0.16-1
cyrus-sasl-2.1.15-6
cyrus-sasl-md5-2.1.15-6
cyrus-sasl-devel-2.1.15-6
cyrus-sasl-plain-2.1.15-6
如果還有忘記寫上去的,還請繼續的安裝啊!並且,請移除底下的套件
sendmail
fetchmail
mutt
# 1. 先確定一下 /usr/lib/sasl2/smtpd.conf 存在,且內容為:
pwcheck_method: saslauthd
# 2. 確定一下 /etc/sysconfig/saslauthd 內容為:
MECH=shadow
# 3. 確定一下 main.cf 裡面有:
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain=
smtpd_recipient_restrictions =
reject_unknown_sender_domain
reject_unknown_recipient_domain
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
smtpd_client_restrictions =
permit_mynetworks
hash:/etc/postfix/access
permit_sasl_authenticated
reject_rbl_client relays.ordb.org
reject_rhsbl_client dsn.rfc-ignorant.org
smtpd_sasl_security_options = noanonymous
# 4. 然後啟動 saslauth 及 postfix 應該就可以啦!
|
然後,請先下載 FC1 所需要的前驅套件,請連結至:
http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/fc1/
下載所有的 RPM 套件,然後再安裝 openwebmail 2.40 版,整個安裝流程:
1. 安裝 openwebmail :
[root@test root]# rpm -ivh perl* # 假設所有的RPM都放在 /root 底下。
[root@test root]# yum update
# 這個動作僅只是要升級剛剛的套件而已;
[root@test root]# rpm -ivh openwebmail-2.40-1.i386.rpm
# 注意:在預設的情況下, openwebmail 會將檔案資料安裝至與 apache 有關的路徑
# 也就是 /var/www/data 與 /var/www/cgi-bin 底下,所以,如果您已經將 apache
# 以 tarball 方式安裝,導致擁有不同的 WWW Root 路徑時,最好使用 tarball
# 來安裝您的 openwebmail 啊!
2. 初始化設定:
[root@test root]# cd /var/www/cgi-bin/openwebmail
[root@test openwebmail]# ./openwebmail-tool.pl --init
# 因為 openwebmail 支援相當多種認證機制,因此,我們必須在使用 openwebmail
# 之前,先將 openwebmail 的相關設定做好!上面 openwebmail-tool.pl --init
# 就是在達成這樣的目標。此外,這個步驟會進行蠻長的一段時間喔!請耐心等候!
[root@test openwebmail]# cd etc
[root@test etc]# vi dbm.conf
# 找到並修改成底下幾行:
dbm_ext .db
dbmopen_ext .db
dbmopen_haslock yes
[root@test etc]# cd ..
[root@test openwebmail]# ./openwebmail-tool.pl --init
Welcome to the Open WebMail!
This program is going to send a short message back to the developer,
so we could have the idea that who is installing and how many sites are
using this software, the content to be sent is:
OS: Linux 2.4.22-1.2199.nptl i686
Perl: 5.008003
WebMail: Open WebMail 2.40 20040816
Send the site report?(Y/n)
sending report...
Thank you.
3. 進一步設定:
[root@test openwebmail]# cd etc
[root#test etc]# vi openwebmail.conf
# 找到這一行:
default_language en
# 改成這樣子:
default_language zh_TW.Big5
|
一般來說,設定成這樣就足夠您運作 openwebmail 了,不過,您的 WWW 主機必須要能提供
perl 的執行環境,因為 openwebmail 就是以 perl 寫成的啊!以 apache 為例,您必須要知道如何啟動
perl 的 CGI 執行環境:
[root@test root]# vi /etc/httpd/conf/httpd.conf
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
AddHandler cgi-script .cgi .pl
|
至少上面的設定要設定妥當才行啊!好了,那麼如何使用 openwebmail 呢?直接在您的瀏覽器上面輸入:
http://your.linux.server/cgi-bin/openwebmail/openwebmail.pl
就可以使用 openwebmail 囉!很簡單吧!不過,如果萬一您的認證一直無法成功的話,可以指定一下認證機制看看:
[root@test root]# cd /var/www/cgi-bin/openwebmail/auth
[root@test auth]# vi auth_unix.pl
# 找到底下:
my $passwdfile_plaintext = $conf{'passwdfile_plaintext'} || '/etc/passwd';
my $passwdfile_encrypted = $conf{'passwdfile_encrypted'} || '/etc/master.passwd';
# 改成這樣:
my $unix_passwdfile_plaintext="/etc/passwd";
my $unix_passwdfile_encrypted="/etc/shadow";
# 或者是修改底下這個檔案成為:
[root@test root]# vi \
/var/www/cgi-bin/openwebmail/etc/defaults/auth_unix.conf
# 其內容只需將
passwdfile_encrypted /etc/master.passwd
# 改為
passwdfile_encrypted /etc/shadow
# 這樣就算完成了。
|
MDK10.0 的 Tarball 安裝
如果您是使用 MDK 作為您的 Linux 系統時,由於 OpenWebMail 並沒有針對這個作業系統來設計
RPM 檔案,所以,這裡我們以 Tarball 來進行安裝。首先,請先確認一下您的 Postfix
與 Apache 已經安裝妥當。底下我們就完整的來談一談囉!(同樣的,更詳細的 Postfix
+ SASL 的 SMTP 身分認證資訊請查閱:
http://linux.vbird.org0390postfix.htm
)
# 0. 先確定一下底下這些套件都已經安裝了(使用 rpm 的方式來安裝的)
[root@test root]# rpm -qa | egrep '(sasl|postfix|imap)'|sort
cyrus-sasl-2.1.15-10mdk
imap-2002d-8mdk
libpostfix1-2.1.1-0.1.100mdk
libsasl2-2.1.15-10mdk
libsasl2-devel-2.1.15-10mdk
libsasl2-plug-anonymous-2.1.15-10mdk
libsasl2-plug-login-2.1.15-10mdk
libsasl2-plug-plain-2.1.15-10mdk
postfix-2.1.1-0.1.100mdk
# 若沒有安裝任何一個套件,請使用 urpmi 來安裝喔!
# 1. 建立 saslauthd 認證機制與 smtp 認證檔案:
[root@test root]# vi /etc/sysconfig/saslauthd
#SASL_AUTHMECH=pam
SASL_AUTHMECH=shadow
# 事實上,就是將認證機制修訂成為 shadow 就是了。
[root@test root]# mkdir /etc/postfix/sasl
[root@test root]# vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login
# 這一版的 postfix 比較奇怪,他的認證檔案預設就是放置在這裡喔!
# 2. 修訂 postfix 的設定檔 master.cf:
[root@test root]# vi /etc/postfix/master.cf
# 找到這個:
smtp inet n - y - - smtpd
# 改為這個:
smtp inet n - n - - smtpd
# 3. 修訂 postfix 的設定檔 main.cf:
# 基本上,內容就有點類似底下這樣:
# Postfix 在 MDK 10.0 底下的預設設定資料:
readme_directory = /usr/share/doc/postfix-2.1.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.1.1/samples
html_directory = /usr/share/doc/postfix-2.1.1/html
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/lib/postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
queue_directory = /var/spool/postfix
mail_owner = postfix
# 使用者的設定資料!
mynetworks_style = host
delay_warning_time = 4h
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) (Mandrake Linux)
unknown_local_recipient_reject_code = 450
smtp-filter_destination_concurrency_limit = 2
lmtp-filter_destination_concurrency_limit = 2
smtpd_sasl_path = /etc/postfix/sasl:/usr/lib/sasl2 # <== 就是這一行
smtpd_sasl_application_name = smtpd
relayhost = [seed.net.tw]
#上面這行很重要,如果想要以動態 IP 架站,就需要 ISP 的 relay host 才行!
#詳細資料請參考:(因為我的主機在seednet底下,所以....)
# http://phorum.study-area.org/viewtopic.htm?t=18621
# http://phorum.study-area.org/viewtopic.htm?t=22806
myhostname = hostname.domain.name # <==這裡請輸入您的主機名稱
mydomain = domain.name # <==這裡則是領域名稱
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions =
reject_unknown_sender_domain
reject_unknown_recipient_domain
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
smtpd_client_restrictions = hash:/etc/postfix/access, permit_sasl_authenticated,
reject_rbl_client relays.ordb.org,
reject_rhsbl_client dsn.rfc-ignorant.org
smtpd_sasl_security_options = noanonymous
notify_classes = resource, software
message_size_limit = 31457280
mailbox_size_limit = 1000000000
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks
# 4. 其他相關的檔案:
/etc/postfix/access
/etc/postfix/header_checks
/etc/postfix/body_checks
/etc/postfix/aliases
# 相關設定請參考上面提供的連結啊!
# 5. 開始啟動:
[root@test root]# /etc/rc.d/init.d/saslauthd start
[root@test root]# /etc/rc.d/init.d/postfix start
|
這樣就完成了 Postfix 的安裝與設定,再接下來則是 Apache 的安裝與設定了。
# 0. 利用 urpmi 來安裝所需要的所有的套件!
[root@test root]# urpmi apache2 php MySQL
Preparing... ###########################################
1:libmysql12 ###########################################
2:libapr0 ###########################################
3:apache-conf ###########################################
4:apache2-common ###########################################
5:perl-Data-ShowTable ###########################################
6:perl-Mysql ###########################################
7:apache2-modules ###########################################
8:apache2 ###########################################
9:libphp_common432 ###########################################
10:perl-CGI ###########################################
11:MySQL-client ###########################################
12:MySQL-common ###########################################
13:php-ini ###########################################
14:apache2-mod_php ###########################################
15:MySQL ###########################################
# 因為我再最早安裝時,並沒有選擇 WWW ,所以要安裝的資料就很多!
# 另外,請您做好 urpmi 的設定才行!
# 1. 開始啟動 httpd 囉!
[root@test root]# /etc/rc.d/init.d/httpd start
# 2. 讓 MySQL 在開機時不會自動啟動, httpd 則會自動啟動!
[root@test root]# chkconfig httpd on
[root@test root]# chkconfig mysql off
[root@test root]# chkconfig --list | grep 3:on
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
|
千萬注意,我們目前並沒有要使用 MySQL 的計劃,所以,當然就要將 MySQL
給他關閉啦!而 httpd 則是需要在開機的時候就與以啟動才行,
所以上面的第二個步驟才需要如此的設定喔!現在,您就可以在您的網址列輸入您的主機名稱,看看能不能連結
http 提供的 WWW 服務呢?!
現在,請注意,預設的狀態下, MDK 10.0 的 WWW 主網頁是放置在 /var/www/html
底下的,但是 MDK 卻沒有預設的 data 目錄,所以我們就必須要給予設定啦!您可以這樣做:
# 0. 將 openwebmail 解壓縮,並且移動到適當的目錄下:
[root@test root]# cd /usr/local/src
[root@test src]# tar -zxvf /disk1/software/openwebmail-2.40.tar.gz
[root@test src]# cd cgi-bin/
[root@test cgi-bin]# mv openwebmail/ /var/www/cgi-bin/
[root@test cgi-bin]# cd ..
[root@test src]# rmdir cgi-bin
[root@test src]# mv data/openwebmail /var/www/html/openwebmail_data
[root@test src]# rmdir data
# 同時請注意,您的主機上面必須要有 perl 模組的存在了才行!
# 我的 perl 模組有底下這麼多:
perl-MailTools-1.59-2mdk
perl-Crypt-SSLeay-0.51-3mdk
perl-Term-Readline-Gnu-1.14-5mdk
perl-Digest-SHA1-2.04-1mdk
perl-Mysql-1.22_19-9mdk
perl-MDK-Common-1.1.11-2mdk
perl-HTML-Parser-3.35-2mdk
perl-File-Slurp-2002.1031-3mdk
perl-Tk-800.024-4mdk
perl-SGMLSpm-1.03ii-6mdk
perl-SDL-1.20.0-8mdk
perl-ldap-0.31-2mdk
perl-Glib-1.021-3mdk
perl-Gtk2-1.023-3mdk
perl-IO-Tty-1.02-9mdk
perl-Gtk2-TrayIcon-0.03-3mdk
perl-Authen-SASL-2.04-2mdk
perl-Locale-gettext-1.01-11mdk
perl-TimeDate-1.16-3mdk
perl-HTML-Tagset-3.03-7mdk
perl-URI-1.25-1mdk
perl-Gnome2-Vte-0.02-1mdk
perl-devel-5.8.3-5mdk
perl-XML-SAX-0.12-3mdk
perl-Convert-ASN1-0.16-4mdk
perl-Data-ShowTable-3.3-9mdk
perl-5.8.3-5mdk
perl-DBI-1.40-2mdk
perl-Libconf-0.33-2.1.100mdk
perl-XML-Parser-2.34-1mdk
perl-CGI-3.00-2mdk
perl-URPM-0.94-11mdk
perl-Expect-1.15-6mdk
perl-Digest-HMAC-1.01-11mdk
perl-base-5.8.3-5mdk
perl-libwww-perl-5.76-3mdk
perl-XML-NamespaceSupport-1.08-3mdk
# 另外,也需要加入兩個必要的模組,您可以使用 FC1 的相關檔案,下載點:
# http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/fc1/
# rpm -ivh perl-Text-Iconv-1.2-fc1.i386.rpm perl-Compress-Zlib-1.16-12.i386.rpm
# 兩個就可以啦!
# 1. 初始化設定:
[root@test root]# cd /var/www/cgi-bin/openwebmail
[root@test openwebmail]# ./openwebmail-tool.pl --init
# 因為 openwebmail 支援相當多種認證機制,因此,我們必須在使用 openwebmail
# 之前,先將 openwebmail 的相關設定做好!上面 openwebmail-tool.pl --init
# 就是在達成這樣的目標。此外,這個步驟會進行蠻長的一段時間喔!請耐心等候!
[root@test openwebmail]# cd etc
[root@test etc]# vi dbm.conf
# 找到並修改成底下幾行:
dbm_ext .pag
dbmopen_ext none
dbmopen_haslock yes
[root@vbird etc]# vi openwebmail.conf
# 找到並修改成底下幾行:
domainnames auto
auth_module auth_unix.pl
mailspooldir /var/spool/mail
ow_cgidir /var/www/cgi-bin/openwebmail
ow_cgiurl /cgi-bin/openwebmail
ow_htmldir /var/www/html/openwebmail_data
ow_htmlurl /openwebmail_data
logfile /var/log/openwebmail.log
[root@test etc]# cd ..
[root@test openwebmail]# ./openwebmail-tool.pl --init
creating db /var/www/cgi-bin/openwebmail/etc/maps/b2g ...done.
creating db /var/www/cgi-bin/openwebmail/etc/maps/g2b ...done.
creating db /var/www/cgi-bin/openwebmail/etc/maps/lunar ...done.
Welcome to the Open WebMail!
This program is going to send a short message back to the developer,
so we could have the idea that who is installing and how many sites are
using this software, the content to be sent is:
OS: Linux 2.6.3-14mdk i686
Perl: 5.008003
WebMail: Open WebMail 2.40 20040816
Send the site report?(Y/n) y
sending report...
Thank you.
# 2. 修訂認證機制:
[root@test root]# vi /var/www/cgi-bin/openwebmail/auth/auth_unix.pl
# 找到:
my $passwdfile_encrypted = $conf{'passwdfile_encrypted'} || '/etc/master.passwd';
# 修改成:
my $passwdfile_encrypted = '/etc/shadow';
# 或者是修改底下這個檔案成為:
[root@test root]# vi \
/var/www/cgi-bin/openwebmail/etc/defaults/auth_unix.conf
# 其內容只需將
passwdfile_encrypted /etc/master.passwd
# 改為
passwdfile_encrypted /etc/shadow
# 這樣就算完成了。
|
然後連到您的主機:http://hostname/cgi-bin/openwebmail/openwebmail.pl
,就能夠看到您的 OpenWebmail 囉!同時,如果還是無法看到相關的咚咚,請查閱您的登錄檔!