本人刚开始考虑使用的是postfix+mysql+sasl+courier-map+sqwebmail(详见我发的《中小规模 POSTFIX邮件系统》),但是在配置SMTP认证方面没有成功,而且公司的邮件系统又要求使用邮件列表功能,没有找到解决方案,公司的领导又拿着鞭子在后面催赶,所以就使用Qmail了,因为Qmail的资料和软件比较丰富,而且高人也比较多,有问题也有高人帮忙,所以就使用了它。
网上Qmail安装设置的资料很多,我也是参考这些资料完成各项设置的,我写这篇档案的目的是为了避免我忘记设置过程(年纪轻轻的就有了健忘症,痛苦……..),再者我发到网上也让各位高人看看还有什么地方存在问题,那些需要改进,废话少说,言归正传!
一. 本文档所需软件
1. ucspi-tcp-0.88.tar.gz
http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
2. checkpassword-0.90.tar.gz (可选)
http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
3. cmd5checkpw-0.22.tar.gz http://members.elysium.pl/brush/cmd5checkpw/dist/cmd5checkpw-0.22.tar.gz
4. qmail-1.03.tar.gz
http://cr.yp.to/software/qmail-1.03.tar.gz
5. qmail-1.03.patch (Qmail补丁,这个补丁主要是处理有些DNS响应不完全遵从RFC标准,返回大于512字节的DNS应答包时可能出现的问题。)
http://www.ckdhr.com/ckd/qmail-103.patch
6. qmail-smtpd-auth-0.31.tar.gz(Qmail补丁) http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.30.tar.gz
7. vpopmail-5.3.16.tar.gz
http://www.inter7.com/devel/vpopmail-5.3.16.tar.gz
8. Vpopmail汉化文件
http://www.cw-isquare.com/en-us
9. autorespond.tar.gz
http://www.netmeridian.com/e-huss/autorespond.tar.gz
10. ezmlm-0.53.tar.gz
http://cr.yp.to/software/ezmlm-0.53.tar.gz
11. sqwebmail-3.5.0-CN.tar.gz sqwbmail中文软件包
http://www.cw-isquare.com/ sqwebmail-3.5.0-CN.tar.gz
12. Qmail-smtpd.c
http://www.cw-isquare.com/qmail-smtpd.c
13. Qmail-smtpd.path (修正Qmail auth smtp中电子邮件地址任意的patch)
http://www.cw-isquare.com/qmail-smtpd.patch.txt
14. Mysql
我是用/usr/ports进行安装的mysql
注意:
1. 所有程序下载后放在/down目录下。
2. 在安装FreeBSD4.7时请把/home和/var尽量分的大一些,因为/home目录是作为所有用户的邮件存放目录,/var是日志存放目录。
3. 一下所有操作都是在root权限下进行的,因为root用户对系统拥有全部的权限,所以操作时请进了小心,不要由于误操作带来不必要的麻烦。
二. DNS设定
我自己没有DNS服务器,负责解析的是我们母公司的DNS服务器,我使用nslooks –q=mx mail.localhost.com命令可以查看到已经绑定到我们公司的IP地址上。
注:mail.localhost.com为我们公司域名,以下相同。
三. Mysql的安装
#cd /usr/ports/database/mysql323-server
#make install
#cd work/mysql-3.23.52
#scripts/mysql_install_db
#cp support-files/my-medium.cnf /etc/my.cnf
#/usr/local/bin/safe_mysqld & 启动mysql服务
#echo “/usr/local/bin/safe_mysqld &” >> /etc/rc.local 使mysql能随系统启动时一起启动
#/usr/local/bin/mysqladmin –u root –password ‘123456’ 修改mysql用户root密码
添加与root用户相同权限的用户vpopmail,在安装vpopmail时要用到
#cd /usr/local/bin
#./mysql -u root –p
#Mysql>use mysql;
#Mysql>grant select,insert,update,delete,create,drop on vpopmail.* to vpopmail@localhost identified by '12345678';
或者安装webmin对数据库进行管理,如果使用以上命令不能使vpopmail用户拥有所有权限,请到webmin的mysql项进行修改。
四. 安装TCPSERVER
1. 安装ucspi-tcp
#cd /down
#tar zxvf ucspi-tcp-0.88.tar.gz
#cd ucspi-tcp-0.88
#make setup check
2. 生成tcp.smtp.cdb
#cd /etc
#touch tcp.smtp
#ee tcp.smtp 加入一下内容
127.0.0.1:allow,RELAYCLIENT=""
#cd /usr/local/bin
#./tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
五. 安装cmd5checkpw
#cd /down
#mkdir /usr/man
#mkdir /usr/man/man8
#tar zxvf cmd5checkpw-0.22.tar.gz
#cd cmd5chedkpw-0.22
#make
#make install
如果你不需要对/etc/passwd中的用户开放mail,则不需要安装checkpassword,因为我不需要,所以我没有安装。如果你要使用参考一下方法:
#cd /down
# tar zxvf checkpassword-0.90.tar.gz
# cd checkpassword-0.90
# make setup check
六. 安装Qmail
1. 建立Qmail目录
#mkdir /var/qmail
#mkdir /var/qmail/alias
2. 添加组和用户
#pw groupadd nofiles
#pw groupadd qmail
#pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
#pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
#pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
#pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
#pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
#pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
#pw useradd qmails -g qmail -d /var/qmail -s /nonexistent
在添加一个系统用户admin作为邮件管理用户
#pw useradd admin –g wheel
3. 给Qmail打补丁
#cd /down
#tar zxvf qmail-1.03.tar.gz
#patch –d ./qmail-1.03 < qmail-103.patch DNS补丁
#tar zxvf qmail-smtpd-auth-0.30.tar.gz
#cd qmail-smtpd-auth-1.30
#cp base* README.auth ../qmail-1.03
#patch -d ../qmail-1.03 < auth.patch
4. 编译Qmail
#make setup check
5. ./config-fast mail.localhost.com
6. 修正SMTP认证信息任意输入和任意更改电子邮件发件人地址的补丁
#cd /down
#cp qmail-smtpd.c ./qmail-1.03
#cp qmail-smtpd.patch.txt ./qmail-1.03
#cd qmail-1.03
#patch < qmail-smtpd.pathch.txt
#make qmail-smtpd
#cp qmail-smtpd /var/qmail/bin
7. 设置投递方式
#cp /var/qmail/boot/home /var/qmail/rc
#ee /var/qmail/rc 修改以下内容
exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ splogger qmail
8. 添加别名用户
#touch /var/qmail/alias/.qmail-root
#touch /var/qmail/alias/.qmail-postmaster
#touch /var/qmail/alias/.qmail-mailer-daemon
#echo postmaster /var/qmail/control/bouncefrom
注意:/var/qmail/control/locals中必须有缺省域名,否则投递失败的邮件将不知锁踪。
9. 停止Sendmail服务
#chmod 0 /usr/sbin/sendmail
#mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
#cp /var/qmail/bin/sendmail /usr/sbin/sendmail
#vi /etc/rc.conf
#ee /etc/rc.conf 修改如下选项
sendmail_enable="NO"
七. 安装vpopmail
1. 建立目录
#mkdir /home/vpopmail
#mkdir /home/vpopmail/etc
2. 建立组及用户
#pw groupadd vchkpw
#pw useradd vpopmail –g vchkpw
3. 安装vpopmail
#tar zxvf-5.3.12.tar.gz
#ee vmysql.h 修改一下内容
#define MYSQL_UPDATE_SERVER "localhost" (mysql服务器名)
#define MYSQL_UPDATE_USER "vpopmail" (用户名)
#define MYSQL_UPDATE_PASSWD "123456" (改成你设置的密码)
#define MYSQL_READ_SERVER "localhost" (mysql服务器名)
#define MYSQL_READ_USER "vpopmail" (用户名)
#define MYSQL_READ_PASSWD "123456" (改成你设置的密码)
4. 创建tcp.smtp文件(或者使用/etc/tcp.smtp)
#ee /home/vpopmail/etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
5. 进行编译:
#./configure
--prefix=/home/vpopmail \\指定安装路径
--enable-mysql=y \\是否应用Mysql数据库
--enable-incdir=/usr/local/include/mysql \\Mysql数据库include文件所在目录
--enable-libdir=/usr/local/lib/mysql \\Mysql数据库lib文件所在目录
--enable-default-domain=localhost.com \\定义虚拟域名
--enable-passwd=n \\是否使用系统密码验证方式
--enable-defaultquota=52428800 \\定义缺省邮箱大小,10485760为10MB,20971520为20MB,52428800为50MB
--enable-tcprules-prog=/usr/local/bin/tcprules \\指定tcprules目录
--enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp \\指定tcprules应用规则文件
--enable-vpopuser=vpopmail \\vpopmail的用户
--enable-vpopgroup=vchkpw \\vpopmail的组
--enable-ip-alias-domains=n \\在虚拟域中允许通过反向IP地址查找虚拟域名
--enable-roaming-users=y \\是否支持外地用户的SMTP的RELAY
--enable-sqwebmail-pass=y \\sqwebmail的密码支持
# make
# make install-strip
#chmod +s /home/vpopmail/bin/vchkpw
八. 编辑pop3和smtp的启动脚本
1.#cd /etc
#ee rc.local 添加一下内容
#!bin=bash
csh -cf '/var/qmail/rc &'
/usr/local/bin/tcpserver -c 100 -v –l mail.localhost.com -H -U -R 0 pop3 \ /var/qmail/bin/qmail-popup test.mydomain.com /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
LOG_AUTH=1
export LOG_AUTH
# 1003为用户qmaild的id号,1002为组nofiles的id号
/usr/local/bin/tcpserver -H -R -l mail.localhost.com -t 1 -c 100 -v -p –x \ /etc/tcp.smtp.cdb -u 1003 -g 1002 0 smtp /var/qmail/bin/qmail-smtpd \ /home/vpopmail/bin/vchkpw /usr/bin/true /bin/cmd5checkpw /usr/bin/true &
2.reboot
3.检查是否能够添加虚拟域
#cd /home/vpopmail/bin
#./vadddomain mail.localhost.com
如果添加失败一定要删除虚拟域,然后查看mysql数据库是否有安装vpopmail时自动添加的数据库,如果没有请检查mysql用户vpopmail是否拥有对数据库拥有全部权限,然后重新安装vpopmail程序。
#./vdeldomain mail.localhost.com
九. 重新编译mysql数据库
#/home/vpopmail/bin/vdeldomain mail.localhost.com
#/usr/local/bin/mysql –u root –p
use vpopmail;
drop table vpopmail;
create table vpopmail (
pw_id int(5) unsigned NOT NULL auto_increment,
pw_name varchar(32) NOT NULL default '',
pw_domain varchar(64) NOT NULL default '',
pw_passwd varchar(40) NOT NULL default '',
pw_uid int(11) default NULL,
pw_gid int(11) default NULL,
pw_gecos varchar(64) default NULL,
pw_dir varchar(160) default NULL,
pw_shell varchar(20) default NULL,
pw_clear_passwd varchar(16) default NULL,
PRIMARY KEY (pw_id),
KEY pw_name (pw_name,pw_domain)
) TYPE=MyISAM;
退去数据库:quit
重新添加虚拟域和用户
#cd /home/vpopmail/bin
#./vadddomain mail.localhost.com 输入postmaster密码,这是以后使用qmailadmin管理虚拟域mail.localhost.com的密码
#./vadduser test 输入密码test
检查数据库vpopmail的vpopmail表是否有你添加的用户。
使用客户端foxmail或者outlook测试用户test@localhost.com, 用户名test(或者 test@localhost.com,因为localhost.com作为默认域名,所以不用输入test后面的@localhost.com),密码 test,选择smtp需要认证看能不能使用该帐户进行收发邮件。
十. 安装apache
下载apache_1.3.26.tar.gz到/down目录
#tar zxvf apache_1.3.26.tar.gz
#cd apache_1.3.26
#./configure --prefix=/usr/local/apache --with-mysql=/usr/local/bin --enable-shared=max
#make
#make install
#/usr/local/apache/bin/apachectl start
#echo “/usr/local/apache/bin/apachectl start” >> /etc/rc.local
十一. 安装qmailadmin
1. 安装ezmlm
#cd /down
#tar zxvf ezmlm-0.53.tar.gz
#cd ezmlm-0.53
#make
#make man
#make setup
或者加入ezmlm的mysql支持
或者加入ezmlm的mysql支持
(ezmlm-idx包含有对ezmlm的修正和补充,他们是一个整体。
tar -zxvf ezmlm-0.53.tar.gz
tar -zxvf ezmlm-idx.0.40.tar.gz
mv ezmlm-idx-0.40/* ezmlm/
cd ezmlm-0.53
patch < idx.patch
make mysql #MySQL 支持
make clean
make man
make ch_GB #汉字GB2312支持
make setup)
以上只是一个方法,我没有安装成功,出现一个小小的问题,由于我得邮件列表不算太大,所以我就没有尝试在此安装,如果你需要mysql支持,你可以试一试!
2. 安装autorespond
#cd /down
#tar zxvf autorespond.tar.gz
#cd /autorespond
#gcc -Wall -o autorespond autorespond.c
#cp autorespond /usr/local/bin/autorespond
3. 安装qmailadmin
#cd /down
#tar zxvf qmailadmin-1.0.6.tar.gz
#cd qmailadmin-1.0.6
#./configure
#make
#make install-strip
4. 汉化qmailadmin的管理页面
#cd /down
#cp en-us /usr/local/share/qmailadmin/html/en
5. 测试qmailamdin
http://mail.localhost.com/cgi-bin/qmailadmin
输入域:mail.localhost.com
输入postmaster的密码,也就是你添加虚拟域mail.localhost.com是的密码
十二. 安装sqwebmail
1. 安装sqwebmail
#cd /down
#tar zxvf sqwebmail-3.5.0-cn.tar.gz
#cd sqwebmail-3.5.0
#./configure --without-authpam --with-db=db --enable-webpass=yes --without-authpwd --without-authshadow --without-authmysql --with-authldap --with-authuserdb --with-authpwd --with-authvchkpw --without-authdaemon
#make configure-check
#make
#make install-strip
#make install-configure
如果你要同时使用系统用户和虚拟用户:
#系统用户采用shadow验证,虚拟域采用vchkpw验证,禁止其他验证方式
echo “authvchkpw authshadow” > /usr/local/share/sqwebmail/authmodulelist
2. 测试sqwebmail
http://mail.localhost.com/cgi-bin/sqwebmail
使用用户test,密码test,看看时候能够登录进取和收发邮件!
3. 修改apache
#cd /usr/local/apache/htdocs
#touch index.html
#ee index.html 输入一下内容:
<html>
<head>
<title>MAIL SYSTEM</title>
<meta http-equiv=”Content-Type” content=”test/html;charset=gb2312”>
<meta http-equiv=”refresh” content=”0;url=http://mail.localhost.com/cgi-bin/sqwebmail”>
</head>
<body bgcolor=”#FFFFFF” test=”#000000”>
</html>
此时你就可以通过:
http://mail.localhost.com
直接来访问sqwebmail了。
十三. 结束语
至此,一个支持web收发邮件和smtp认证、mail from auth的邮件系统已经建立起来了,该系统支持用户漫游功能,支持web页面管理虚拟域。
由于本人技术有限,而且没有任何写作功底,错误之处在所难免,如有发现请批评指正,谢谢!
十四. 鸣谢:
感谢网上的很多网友发表的Qmail方面的文档,我的这个安装笔记就是借鉴他们的文档完成的,感谢gadfly对smtp认证和mail from auth方面的帮助。
十五. 附录
1.Qmail的主要配置文件
badmailfrom none qmail-smtpd 黑名单地址
bouncefrom MAILER-DAEMON qmail-send 退回邮件
bouncehost me qmail-send 退回邮件
concurrencylocal 10 qmail-send 本地同时投递邮件的数目
concurrencyremote 20 qmail-send 同时投递至远程主机的数目
defaultdomain me qmail-inject 默认域名
defaulthost me qmail-inject 默认主机名
databytes 0 qmail-smtpd 邮件的最大容量 (0=无限制)
doublebouncehost me qmail-send
doublebounceto postmaster qmail-send
envnoathost me qmail-send 没有"@"的默认域名
helohost me qmail-remote 主机名
idhost me qmail-inject Message-ID的主机名
localiphost me qmail-smtpd 本地IP的替代名
locals me qmail-send 传递至本地的域名
me 系统正式域名 various
morercpthosts none qmail-smtpd 第二个rcpthosts
percenthack none qmail-send 使用 "%"格式的域名
plusdomain me qmail-inject
qmqpservers none qmail-qmqpc QMQP服务器的IP地址
queuelifetime 604800 qmail-send 在队列中邮件保存的时间(秒)
rcpthosts none qmail-smtpd 接收邮件的域名
smtpgreeting me qmail-smtpd
smtproutes none qmail-remote
timeoutconnect 60 qmail-remote SMTP连接超时时间
timeoutremote 1200 qmail-remote 等待远程主机的时间
timeoutsmtpd 1200 qmail-smtpd SMTP客户连接超时的时间
virtualdomains none qmail-send 虚拟域名
2.vpopmail参数附录:
--enable-roaming-users=n|y
当pop3认证通过后,是否打开对该用户的邮件转发(mail relay),缺省是关闭的。若设置该选项为y,当某个用户通过了pop3认证,则将其IP地址加入许可通过该邮件服务器进行relay的列表中。一个名为clearopensmtp的cronjob程序可以用来实现在这一段时间以后从允许转发邮件地址列表中将该IP地址清除。这个选项要求以-x /etc/tcp.smtp.cdb选项来使用tcpserver 运行smtp服务器。
--enable-hardquota=size|n size为具体的数字
设置或打开磁盘限额功能,NOQUOTA缺省为50M,这里=后面的数字单位为字节,如果要限制磁盘限额为10M就需要使用下面这个配置参数:
--enable-hardquota=10000000
若磁盘限额超出,将拒绝接受该用户的新邮件,并返回一封拒绝信息邮件,其中的信息可以定制。
--enable-default-domain=name
该选项为设定缺省域名,推荐将所有的域都设置为虚拟域,并选中一个作为缺省域。对于缺省域的用户,其通过接受邮件时,只需要在用户名中设置其邮件用户名即可,对于其他非缺省域的用户,则需要将用户名设置为<user>@<virtualdomain> 的格式才能通过pop3接受信件。
--enable-ip-alias-domains=y|n
允许通过反向解析来查看虚拟域。缺省情况下,每个域使用基于虚拟域的名字,也就是用户必须在pop3用户名中提供相应的域信息,也就是<user>@<virtualdomain>.当然也可以使用enable-default-domain配置选项来覆盖该要求。Vpopmail同样支持基于IP地址的虚拟域,若该选项打开则用户不需要在pop3用户名中提供@< virtualdomain>,vpopmail自动对该用户连接的服务器IP地址进行反向解析,若解析得到一个域名,则vpopmail使用该名字作为域,例如:IP.x.x.x对应域名test.com,用户设置pop3服务器的IP地址进行反向DNS查询,得到test.com域名,用户使用test作为用户名,vpopmail使用test.com。
--enable-relay-clear-minutes=360
允许漫游用户通过邮件服务器的转发邮件的时间段。 若--enable-roamin-users=y,则该选项设置clearopensmtp应该保持该IP在允许列表中的时间,缺省是3小时。
Mysql options
--enable-mysql=n|y
使用mysql,缺省是no.允许通过将账号存放在mysql数据库中来认证用户。
意:在配置和编译以前需要修改文件vmysql.h,正确的设置mysql服务器的 name/ip, mysql用户和mysql用户密码。该用户必需要拥有创建数据库和在其中创建表格的权限。
--enable-sqlincdir=
sql头文件的目录,缺省为/usr/local/mysql.
--enable-sqllibdir=/usr/lib/mysql
库文件libmysqlclient.a的目录,缺省为/usr/lib/mysql
--enable-sqllibs=mysqlclient
mysql库名,缺省为libmysqlclient.a.
--enable-large-site=n|y
缺省值为no,使用该选项是为了适应大量用户的情况。缺省的vpopmail将所有的域信息存放在同一个table-vpopmail中,这对于一般情况下具有很好的效率。但是对于大量用户的系统,则需要将该选项设置为yes。这时候,vpoomail将为每个域创建一个table。最主要的区别是域名不存放在数据库中,因为表格包含了域名。对于大于500,000+的用户,这可以节省大量的磁盘空间。但是对于有大量虚拟域的系统可能会影响 mysql的性能。
Vpasswd/cdb options
--enable-ucspi-dir=dir
编译好ucspi包的目录位置,使用该目录来设定ucspi-tcp软件包的路径,缺省为../ucspi-tcp-0.84。vpopmail需要使用该目录中的头文件和两个.a文件。
Logging options
--enable-logging=e|y|n
打开(y)或关闭(n)使用syslog进行log,或e仅仅log错误信息。设置log级别,缺省仅仅记录pop认证错误信息。
--enable-log-name=vpopmail
设置log名
User/group options
--enable-vpopuser=vpopmail
若使用其他的用户来安装该软件包,则在该选项中指定组名。
--enable-vpopgroup=vchkpw
若使用其他的组来安装该软件包,则在该选项中指定组名。
--enable-admin-email=email-address
系统管理员的电子邮件地址。
Directory and file location options
--enable-tcpserver-file=/etc/tcp.smtp tcpserver –x
使用的邮件转发配置文件的存放目录,缺省为/etc
--enable-qmaildir=dir
qmail的安装目录指定,缺省为/var/qmail。
--enable-tcprules-prog=/usr/local/bin/tcprules
tcprules程序的安装位置,缺省为/usr/local/bin
--enable-apop-file=/etc/apop-secrets
apop密钥存放目录
Other options
--enable-apop=y|n
允许或禁止apop认证,缺省是yes
--enable-passwd=y|n
允许或禁止/etc/passwd(或shadow)认证。覆盖自动配置,缺省的配置程序将自动检测系统是使用passwd或shadow密码,通过设置该选项为no,可以禁止所有的/etc/passwd账号认证。