利用 FreeBSD 组建轻量级邮件系统

12/3/2006来源:Qmail人气:8397

系统功能与特点:
组建简单成本低:
使用免费但十分优秀的网络操作系统 FreeBSD + 各种优秀的自由软件。无须担心版权问题。对设备整体要求低。
系统有极高的可维护性:
除两个可选模块外,所有软件均采用 ports 树安装,因此系统组建时间短。并能随时升级用上最新最安全的系统软件和安全补丁。
安全性高:
由于采用 UNIX 系统,你不用过于担心病毒问题!所有 windows 上的病毒都对你的邮件系统都是“无效”的!你还可以另外安 装邮件防病毒插件。
整个邮件系统(SMTP、POP、WEBMAIL)还采用了 SSL (安全套接层)传输,能保证整个传输过程中的数据被加密防止被他人盗窃 。有着极高的安全性、稳定性。
界面美观:
Openwebm : 一个十分优秀的 web mail ,本地化语言,简单宜用。还有网络硬盘、SSH 功能。
组合灵活:
系统支持 SMTP、POP、SSL、Webmail 等功能。各功能模块(如 POP、SSL)有相当的选择余地能自由组合,能为不同的用户、 用户组定义不同的邮箱大小。

综述:是一个适合用于企业、学校、个人或其它要高安全性、高性能等站点的小型邮件系统。

本文说明与介绍:
# 此符号开头是注释内容,可加入到相应的配置文件中去。
<== 此符号是本人对此项功能或参数的附注说明、解释,请不要加入到文件中去。
Ssl :安全套接层,用来加密传输过程中的数据。在此系统中此功能是可选部分。
Qpoper POP SERVER:一个使用 mail client 程序收信的服务。在此系统中此功能是可选部分。

所需系统与软件环境:
FreeBSD 4.8 十分优秀的 NET OS

Sendmail SMTP SERVER
安装路径:系统自带

Apache 2.0.47 WEB SERVER
安装路径:/usr/ports/www/apache2

Openssl 0.97 SSL TOOL
安装路径:/usr/ports/security/openssl

Openwebmail 2.10 WEB MAIL
安装路径:/usr/ports/mail/openwebmail/

qpoper POP SERVER
安装路径:/usr/ports/mail/qpopper/
Stunnel 4.04 SSL 服务 TOOL
安装路径:/usr/ports/security/stunnel/


使用 PPPOE 上网,动态 ip

域名申请:
到 www.dns0755.net 申请免费(或收费)域名!有关使用请参考该网站的相关说明。本例是 xiaohua.dns0755.net

演示主页面:
http://xiaohua.dns0755.net <== 不使用 SSL
https://xiaohua.dns0755.net/ <== 使用 SSL

Openwebmail Login 演示页面: <== 强制使用 SSL (可选)
https://xiaohua.dns0755.net/cgi-bin/openwebmail/openwebmail.pl
注意:本例中 Openwebmail 是使用 OS 系统用户作数据库

Mail client 程序演示服务器(可用 Kmail、OutlookFoxmail 等):
SMTP SERver: xiaohua.dns0755.net <== 使用明文传输, 端口: 25
xiaohua.dns0755.net <== 使用 SSL 传输,端口: 465
POP SERver: xiaohua.dns0755.net <== 使用明文传输, 端口: 110
xiaohua.dns0755.net <== 使用 SSL 传输,端口: 995

演示用户:
用户名、密码:guest
用户名、密码:guest1

启动时自动转发 IP 解释 xiaohua.dns0755.net 域名。
将 www.DNS0755.net 客户端程序放到 /usr/local/dns/ 中去,并配置好你的域名。在 /etc/crontab 中加入:

@reboot xiaohua /usr/local/dns/DNSClient # 启动时自动执行
*/4 * * * * xiaohua /usr/local/dns/DNSClient # 每 4 分钟执行一次(可选,但建议使用)

其中上面的 xiaohua 是本系统的一个用户。表示用 xiaohua 这个用户执行 /usr/local/dns/DNSClien 这个程序。


系 统 安 装
为保证一次成功安装并能用上最新版本的软件,在安装前请先升级你的整个 ports 树。升级前你要安装了 cvsup 软件。可到 http://www.cn.freebsd.org/ports/index.html 下载,然后用 pak_add 命令安装。或用你的 FreeBSD CD 来安装。完成后继续。

cp /usr/src/share/examples/cvsup/ports-supfile /root/

修改 ports-supfile ,将 :
*default host=CHANGE_THIS.FreeBSD.org
改成
*default host=cvsup.cn.FreeBSD.org
接着升级你的 ports 树,执行:
cvsup ports-supfile

升级开始。升级速度视乎你的接入速度。一般半小时内可完成。完成后再安装其余的软件。

安装 Apache 2.0.47:
cd /usr/ports/www/apache2
make install clean

请自行参考有关 apache 的文档配置站点首页及启动 apache 服务。

安装 Openwebmail:
cd /usr/ports/mail/openwebmail/
make install clean

安装 Openwebmail 的文件系统配额与 http 压缩功能模块(此功能可选):

http://openwebmail.com/openwebmail/download/packages/Quota-1.4.6.tar.gz
http://openwebmail.com/openwebmail/download/packages/ComPRess-Zlib-1.21.tar.gz

下载后 tar 解压,然后进入相应的目录下运行以下命令安装:

perl Makefile.PL
make
make install

OK,Openwebmail 应该起来了,试打入 :
http://you_server/cgi-bin/openwebmail/openwebmail.pl
应该看到 login 画面了!HTTP资料压缩传送功能也应该能用!这样整个 Apache 与 Openwebmail 就起来了。马上用一个系统内的帐户上去看看!
非常漂亮的 Openwebmai 的 login 页面

Opnewebmail 主界面1

Opnewebmail 主界面2

Openwebmail 高级配置:
配置文件在 /usr/local/www/cgi-bin/openwebmail/etc/ 下。共有三个相关文件。但只修改
openwebmail.conf 就行了。

15:10 [xiaohua] [/usr/local/www/cgi-bin/openwebmail/etc] ls -l openwebmail.*
total 8146
-rw-rw-rw- openwebmail.conf <== 用户定义配置,用户可修改
-rw-r--r-- openwebmail.conf.bak <== 这是我的备份文件,不算数
-rw-r--r-- openwebmail.conf.default <== 系统全局配置,不要修改
-rw-r--r-- openwebmail.conf.help <== 配置文件的说明

☆注意:
修改配置前请先备份原配置文件,并仔细“参考、阅读”原 openwebmail.conf 文件再进行配置系统!本文所提到的选项并不一定会出现在原文件中,也不一定是你需要的!更多信息请参考其余两个文件(但最好不要修改)。

以下是我的 openwebmail.conf 文件(只对有需要的作说明)

domainnames auto <== 这里设定域名,请设成你相应的域名,如:xiaohua.dns0755.net
auth_module auth_unix.pl <== 认证方式使用你的 OS 上的系统用户,也可用 sql 、ldap
mailspooldir /var/mail
dbm_ext .db
dbmopen_ext none
dbmopen_haslock no
ow_cgidir /usr/local/www/cgi-bin/openwebmail
ow_cgiurl /cgi-bin/openwebmail
ow_htmldir /usr/local/www/data/openwebmail
ow_htmlurl /openwebmail
logfile /var/log/openwebmail.log
spellcheck /usr/local/bin/ispell
default_language zh_CN.GB2312 <== 使用语言。此部分为手工加入。
default_dateformat yyyy-mm-dd <== 日期格式。此部分为手工加入。
default_hourformat 24
savedsuid_support yes

<== 这是邮局个性化签名
================================================

致此!

欢迎光临海鹰的家! ( https://xiaohua.dns0755.net )

================================================

海鹰:大海之鹰!生命由海而来,随海而去!
┏━━━━━━━━━━━┓
┃■■■■■■■■■  ┃
┗━━━━- 85% ━━━━┛
离成功还有 15%
================================================



<== 自动回信内容
您好:
来信已收到了,我会尽快处理!
你的信件'$SUBJECT' 。致此!!
I will not be reading my mail for a while.
Your mail regarding '$SUBJECT' will be read when I return.


#### 以下是磁盘配额部分,此部分为手工加入。
#### 使用 OS 的文件系统配额。并需在/etc/fstab 中启用配额功能及安装了OS FS 配额模块才能正常使用。
#### 用户配额使用 edquota 命令在系统中设定。可针对用户或组独立设置,很灵活。
quota_module quota_unixfs.pl

############### 下面两项一起使用 #############
#quota_module quota_du.pl <== 使用 openewbmail 配额功能

# 设定使用者能使用的空间上限. 单位:Kbyte 。 这个设定只有在 quota_module
# 不传回使用者 quota 上限时(如 quota_du.pl) 才会被使用。
#quota_limit 82420 <== 设定配额上限,只在使用 quota_du.pl 时有效

☆注意:
quota_unixfs.pl 与 quota_du.pl 两者只能用一个,不能两个同时用。使用 quota_unixfs.pl(OS Files system disk QUOTA) 时会比较灵活,可为不同用户、组设不同的配额。但性能可能相对比 quota_du.pl 差小许。

#一般情形下, 使用者的空间使用状况会显示在视窗的外框上边。但是当使用者空间用量超过其上限的
#quota_threshold% 时,会有一个较明显的 quota 使用量显示在页面的上方以提醒使用者。
quota_threshold 75 <== Quota 警告值:75%

attlimit 900000

# 当使用者空间已满时, 是否自动删除各信匣中过旧的邮件以取得一些空间。
delmail_ifquotahit no

# 当使用者空间已满时, 是否自动?除网络磁盘中过旧的文件以取得一些空间。
delfile_ifquotahit no

############ 系统安全部分。此部分为手工加入。#############
enable_rootlogin yes <== root 可以 login
enable_sshterm no <== 允许用户使用 ssh 功能
forced_ssl_login yes <== 强制使用 ssl login

########### 以下部分为系统信息(OS、版本等控制)此部分为手工加入。############
enable_about no # 是否显示关于功能
about_info_software no # 是否显示软件信息
about_info_protocol no # 是否显示使用协议
about_info_server no # 是否显示服务器信息
about_info_client no # 是否显示客户信息

########### 自动回信标题 ###########
default_autoreplysubject 您好!这是一封从“海鹰邮局”的自动回信。

########## 邮局 login 画面信息。此部分为手工加入。###########
# 原图像位置 /usr/local/www/data-dist/openwebmail/images/openwebmail.gif
logo_url %ow_htmlurl%/images/hy2.gif <== 自定义的邮局的 logo,我的是一只鸟
logo_link https://xiaohua.dns0755.net/ <== 自定义的邮局 logo 上的 URL,本站首页

让 sendmail 能收取 xiaohua.dns0755.net 的信
让 sendmail 能收取 xiaohua.dns0755.net 的信,须将 xiaohua.dns0755.net 加入到 sendmail 中去。

cd /etc/mail
ee local-host-names

写入 xiaohua.dns0755.net 这个域名,保存退出。

make cf
make install

重启 sendmail
killall -HUP sendmail

从其它地方写一封信给 xiaohua.dns0755.net 看能不能收到。正常时应该能收到!


使用 SSL 让你的 Web mail 信息更安全

在 apache 2 中使用 ssl ,要先安装 openssl :
cd /usr/ports/security/openssl
make install clean

利用 openssl 创建与自签发 Apache 2 的证书 -- CA :
cd /usr/local/etc/apache2/
mkdir ssl.key
mkdir ssl.crt
openssl genrsa 1024 > ssl.key/server.key

显示信息如下:
15:50 [/usr/local/etc/apache2/] openssl genrsa 1024 > ssl.key/server.key
Generating RSA private key, 1024 bit long modulus
...++++++
............++++++
e is 65537 (0x10001)

只让 root 才能访问 CA 证书:
chmod 400 ssl.key/server.key

利用 CA 创建一个自签署的 CA 证书。命令:

cd /usr/local/etc/apache2/
openssl req -new -key ssl.key/server.key -x509 -days 365 -out ssl.crt/server.crt

会要你填入相关信息,如下:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN <== 两个字母的国家代号
State or Province Name (full name) [Some-State]:GD <== 省份
Locality Name (eg, city) []:FSNH <== 城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:FreeBSD <== 公司
Organizational Unit Name (eg, section) []:I386 <== 部门
Common Name (eg, YOUR name) []:Xiaohua <== 你的姓名
Email Address []:bdiy2010@yahoo.com.cn <== 你的 E_mail
-----BEGIN CERTIFICATE-----
MIIDXzCCAsigAwIBAgIBADANBgkqhkiG9w0BAQQFADCBgjELMAkGA1UEBhMCQ04x
CzAJBgNVBAgTAkdEMQ0wCwYDVQQHEwRGU05IMRAwDgYDVQQKEwdGcmVlQlNEMQ0w

部分省略……

zyeGykJ+9xm53nWeruNSbJu3qnYBMQl4SUyWwluJwF02wB/xBdcnJxpkbgw3i9EE
TPw17kxTA9d5u/nZ5jQoFPOesv+exr7bhMj0/A+fWX+qEV+vAKKalii7GsDdkFdk
2QqG
-----END CERTIFICATE-----
15:56 [xiaohua] [/home/xiaohua]

OK,证书到此已完成了。接下来要让 apache 运行在 ssl 模式,运行:
apachectl stop
apachectl startssl

在游览器中用 https://you_server 看能否正常游览你的首页。正常时游览器会提示你证书信息。确定后应能看到以前的首页。注意:因为证书是自签发,有些游览器会提示证书不可信,不用管它!OK,整个传输过程已不是明文传输了。

浏览器提示证书信息

建立有 SSL 功能的 SMTP、POP 服务器

用 web 方式收发邮件的安全问题解决了。但 SMTP、POP 上的还是明文传输的。下面介绍如何做有 SSL 功能的 SMTP、POP 服务器。

安装 POP server:

cd /usr/ports/mail/qpopper/
make install clean

qpoper 服务要用 inetd 启动。安装完成后修改 /etc/inetd.conf 文件,加入一行:
pop3 stream tcp nowait root /usr/local/libexec/qpopper qpopper -s

检查是否启动了 inetd ,请检查 /etc/rc.con 中的 inetd_enable="YES" 项。只要不是设
inetd_enable="NO" 就不用管它了。如果要手工启动 inetd 只须键入 inetd 。要重启 inetd :
killall -HUP inetd




安装 stunnel 以支持 SMTP、POP 的 SSL

Port: stunnel-4.04_2
Path: /usr/ports/security/stunnel

cd /usr/ports/security/stunnel
make <=== 注:这里面先只用 make ,不能一屁股的 make install clean

接下来要为 stunnel 创建证书:
make cert

到这步时会要你填入相关信息。请参考 Apache 与 openssl 部分。完成后会提示你证书已安装到 /usr/local/etc/ 中去了。看是否有个 stunnel.pem 文件。

12:22 [xiaohua] [/usr/ports/security/stunnel] ls -l /usr/local/etc/stunnel.*
-rw------- 1 root wheel 1746 Aug 21 18:29 /usr/local/etc/stunnel.pem

☆注意:请确定在提问 Common Name (FQDN of your server) 时写入你的服务器名。本例是 xiaohua.dns0755.net
下面是部分信息摘录:

Country Name (2 letter code) [PL]:CN
State or Province Name (full name) [Some-State]:China-GD
Locality Name (eg, city) []:FSNH
Organization Name (eg, company) [Stunnel Developers Ltd]:FreeBSD
Organizational Unit Name (eg, section) []:I386
Common Name (FQDN of your server) [localhost]:xiaohua.dns0755.net <== 写入你的域名
/usr/local/bin/openssl x509 -subject -dates -fingerprint -noout -in stunnel.pem
subject= /C=CN/ST=China-GD/L=FSNH/O=FreeBSD/OU=I386/CN=xiaohua.dns0755.net
notBefore=Aug 23 10:20:40 2003 GMT
notAfter=Aug 22 10:20:40 2004 GMT
md5 Fingerprint=28:08:6C:7B:B2:9C:0E:16:EF:3F:BA:38:E5:32:37:04
install -m 600 /usr/ports/security/stunnel/work/stunnel-4.04/tools/stunnel.pem /
usr/local/etc/

make install clena <=== 完成最后的安装

安装完成了,但还没能正常运行 stunnel 。还有很多事要做了!
cd /usr/local/etc/stunnel/
cp stunnel.conf-sample stunnel.conf

修改这个 stunnel.conf 文件,将:

cert = /usr/local/etc/stunnel/mail.pem
改为:
cert = /usr/local/etc/stunnel.pem

将 [s1]、[s2] 这两部分内容(所有)注释或删除掉,然后保存退出。

创建 stunnel 的运行目录:

cd /var/tmp
mkdir stunnel
chown stunnel:stunnel

OK,马上可以运行 stunnel 了。不过在运行前建议你先检查你系统当前的端口情况。运行
sockstat -4 你会见到很多东西。从中你可以看到你正在运行的服务。

sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
www httpd 16552 4 tcp4 *:443 *:*
www httpd 16434 3 tcp4 *:80 *:*
www httpd 16434 4 tcp4 *:443 *:*
root httpd 129 3 tcp4 *:80 *:*
root httpd 129 4 tcp4 *:443 *:*
root sendmail 91 4 tcp4 *:25 *:*
root inetd 83 4 tcp4 *:110 *:*

接着起动 stunnel 吧。如果顺利,系统不会返回任何信息给你:

/usr/local/etc/rc.d/stunnel.sh.sample start

再运行 sockstat -4 ,如果你见到有 stunnel、995、465 端口等信息了就代表你已经成功了!

17:37 [xiaohua] [/home/xiaohua] sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
www httpd 16643 3 tcp4 *:80 *:*
www httpd 16643 4 tcp4 *:443 *:*
www httpd 16434 3 tcp4 *:80 *:*
www httpd 16434 4 tcp4 *:443 *:*
stunnel stunnel 171 7 tcp4 *:465 *:* <==ssl smtp server
stunnel stunnel 171 6 tcp4 *:995 *:* <==ssl pop server
root sendmail 91 4 tcp4 *:25 *:* <==原来的 smtp server
root inetd 83 4 tcp4 *:110 *:* <==原来的 pop server


让 stunnel 随启动时“正常”自动运行

因为在 make cert 时已经写入了 xiaohua.dns0755.net 。如果启动时 stunnel 解释不到相应的 IP 就不能正常启动。为此要让 stunnel 正常启动我们还要做两件事:

修改 /etc/rc.con ,将 PPPOE 启动方式改为 AUTO
ppp_mode="auto"

这样,系统在完全拨通号前是不会执行 rc.d 的脚本!不过启动时间会变长一点!


cd /usr/local/etc/rc.d/
cp stunnel.sh.sample zstunnel.sh
因为 rc.d 是按脚本的第一个字母做顺序启动的。这样 stunnel 将被最后执行。就能保证 stunnel 随系统正常启动而不用手工干预了。

客户端设置:
因为采用了 SSL ,所以Kmai 、OUTLOOK 等要选上 SSL 、及修改服务器的端口!详细请见下面的插图。


FAQ集:

1、问:我用的系统发现不能发送大的附件,请问怎样设置发送邮件的大小?
答:修改 /etc/mail/sendmail.cf ,找到
# maximum message size
#O MaxMessageSize=1000000 <== 1M

增加一行:
O MaxMessageSize=50000000 <== 50M,应该够大了 ^_^

完成后重启 sendmail

2、问:Openwebmail 在那申请用户帐号?
答:Openwebmail 本身没有此功能,除非有人写一个。它是用操作系统上的系统用户作数据库的。所以这样就一定程序上提高了安全性。你不用担心别人天天在你的系统上申请一堆没有帐号,或发上无数的垃圾邮件到你的系统上。否则你的系统很快就没空间了。要增加用户请用 adduser 、/stand/sysinstall 工具增加。还可通过 ssh 、webmin 等工具进行远程管理。Openwebmail 还支持 MySQL、ldap 等功能,你可以试一下。

3、问:我想更多了解 Openwebmail ?
答:到 /usr/local/www/data-dist/openwebmail/ 下看看吧,里面有一堆文档,不过全是 E 文的。

4、邮件客户端程序不能发邮件,但通过 WEB 方式能收发,怎么回事?
答:这主要是 DNS 问题造成。目前发现 www.dns0755.net 有不稳现象。甚至发现有假冒 IP 现象。造成本人有一阵子也无法正常使用 Kmail、OUTLOOK ,本人的网站也无法正常浏览等。这时可以通过 openwebmail 来发信了。或者通过 IP 来访问邮件系统。
如果你条件许可,那我十分建议你申请一个固定 IP 、域名。如果这样,这个问题就能圆满解决了。

5、我还有更多的问题?
答:如果你有更多问题,请到以下 UNIX 论坛找我( xiaohua ),我会尽量为你解答,只要是我知道的。
http://community.FreeBSDChina.org/ www.chinaunix.net http://forum.cnfug.org/index.php?act=idx


6、我发现文章有错误。
答:非常好,同时希望你能告知作者!如果你有任何意见也可以告知作者!感谢! J

7、注:近日发现本人前域名 xiaohua.dns0755.net 被人冒充IP 了,导致无法正常浏览。现已改为:http://bsdroot.dns0755.net 。要试用系统请将相应主机名改为 bsdroot.dns0755.net 。


作者简介:
网络妮称:Xiaohua (英文)、海鹰(中文)
主页:http://bsdroot.dns0755.net (新) MSN、E_mail:bdiy2010@yahoo.com.cn

作者的梦想:
1、和我最好的朋友、最爱的女人去海南天涯海角,去山海关合照。那一定是一件很开心的事。
2、期望有一天,我和她能成为一对海鹰,在无边无际的大海上
自由飞翔。飞到我们想去的地方:天涯海角。从此不再分开

致谢:
所有曾经帮助过我的所有朋友、网友、网站!

参考信息:
中国、台湾等各大 FreeBSD、UNIX 网站等。太多了,不能一一列出!实在抱歉!希望各站长不要见怪!! ^_^
,