电子邮件对于一般人来说,是越来越重要了,像鸟哥通常就是使用电子邮件来跟大部分的朋友联络,
而且,重要的文件与公事也几乎是使用电子邮件来传递的呢!而在一般的个人电脑上面,我们通常是使用类似
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 啰!同时,如果还是无法看到相关的咚咚,请查阅您的登录档!