Written by hefish@cn99.com
version 0.01
Last Updated: 2000-9-23
1、条件
我们拥有:
* 一个顶级的域名:czlib.net;
* 一台运行RedHat Linux 6.1的服务器,主机名mail.czlib.net。
2、目标
我们的要求:
* 将mail.czlib.net作为邮件服务器;
* 实现类似user@czlib.net的邮件地址;
* 将邮件账号和系统账号分离开,以便于管理。
3、构想
* 使用qmail来架设邮件服务器;
* 用vpopmail来实现邮件账号和系统账号的分离。
4、实现
4.1 DNS的配置
这不是本文所着重的部分,所以不会深入去讲。首先在DNS服务器上,将
mail.czlib.net指向正确的IP地址;然后在czlib.net域添加一条MX纪录,
将czlib.net域的邮件服务器设置为mail.czlib.net。然后重启DNS,运行
nslookup命令:
[root@mail /root]# nslookup
Default Server: dns.czlib.net
Address: 61.132.98.126
> set querytype=MX
> czlib.net
Server: dns.czlib.net
Address: 61.132.98.126
czlib.net preference = 20, mail exchanger = mail.czlib.net
mail.czlib.net internet address = 61.132.98.122
能看到类似mail exchanger的信息,就说明DNS配置完毕了。
4.2 工具的安装
在安装qmail之前,我们需要安装一些运行qmail所必须的工具程序。这些程序包括:
* rblsmtpd-0.70.tar.gz
* ucspi-tcp-0.84.tar.gz
* daemontools-0.53.tar.gz
安装这些工具并不麻烦,只需将他们解开后,make一下就可以了。下面了安装纪录:
# tar zxvf rblsmtpd-0.70.tar.gz
# cd rblsmtpd-0.70
# make
# make setup check
(这将把rblsmtpd-0.70安装到/usr/local/bin下)
# tar zxvf ucspi-tcp-0.84.tar.gz
# cd ucspi-tcp-0.84
# make
# make setup check
(这将把ucspi-tcp-0.84安装到/usr/local/bin下)
# tar zxvf daemontools-0.53.tar.gz
# cd daemontools-0.53
# make
# make setup check
(这将把daemontools-0.53安装到/usr/local/bin下)
注意,尽管这些工具都有了新版本,但可能
4.3 qmail的安装
4.3.1 建立qmail的目录
首先保证/var下有足够的空间,
#mkdir /var/qmail
4.3.2 添加必要的用户
# groupadd nofiles
# useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
# useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
# useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
# useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
# groupadd qmail
# useradd qmailq -g qmail -d /var/qmail -s /nonexistent
# useradd qmailr -g qmail -d /var/qmail -s /nonexistent
# useradd qmails -g qmail -d /var/qmail -s /nonexistent
4.3.3 编译qmail
# tar zxvf qmail-1.03.tar.gz
# cd qmail-1.03
# make setup check
4.3.4 初步配置qmail
# cd qmail-1.03
# ./config
如果你的DNS没有问题,这一步不会有什么问题,如果通不过,而且您认为你的
DNS没有问题的话,可以试试下面的命令:
# ./config-fast mail.czlib.net
(实际使用时,用你的机器名来替换mail.czlib.net)
4.3.5 安装qmail的别名
qmail至少需要3个别名,一个是系统管理员也就是root,另两个是postmaster
和mailer-daemon,后两个是qmail的管理员。我们需要把这三个别名转向到具体的
人那儿。
# cd ~alias
# echo hefish > .qmail-root
# echo hefish > .qmail-postmaster
# echo hefish > .qmail-mailer-daemon
这里我把这三个别名都指向我本人。你可以根据实际情况设置。
4.3.6 设置qmail的启动文件
# echo ./Maildir/ > /var/qmail/control/defaultdelivery
然后在/var/qmail/下建立一个rc文件,内容如下:
#!/bin/sh
# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver
# messages by default
exec env - PATH="/var/qmail/bin: $PATH" qmail-start "`cat /var/qmail/control/defaultdelivery`" accustamp
然后修改/var/qmail/rc的属性,使之变为可执行。
# chmod +x /var/qmail/rc
4.3.7 停止Sendmail服务器
很可能你安装RedHat Linux的时候安装并启动了Sendmail,这时候我们需要把
它终止。当然如果你没有运行Sendmail,就可以跳过这一步。
# killall -TERM sendmail
# mv /usr/lib/sendmail /usr/lib/sendmail.old
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
4.3.8 建立qmail的控制脚本
#!/bin/sh
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin
export PATH
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
case " $1" in
start)
echo -n "Starting qmail: qmail-send"
supervise /var/supervise/qmail/send /var/qmail/rc |
setuser qmaill cyclog /var/log/qmail &
echo -n " qmail-smtpd"
supervise /var/supervise/qmail/smtpd tcpserver -v -x/etc/tcp.smtp.cdb -u $QMAILDUID -g $NOFILESGID 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | setuser qmaill accustamp | setuser qmaill cyclog /var/log/qmail/smtpd &
echo "."
;;
stop)
echo -n "Stopping qmail: qmail-smtpd"
svc -dx /var/supervise/qmail/smtpd
echo -n " qmail-send"
svc -dx /var/supervise/qmail/send
echo "."
;;
stat)
echo "Checking qmail-send"
svstat /var/supervise/qmail/send
echo "Checking qmail-smtpd"
svstat /var/supervise/qmail/smtpd
echo "Checking queue"
qmail-qstat
;;
doqueue|alrm)
echo "Sending ALRM signal to qmail-send."
svc -a /var/supervise/qmail/send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /var/supervise/qmail/send
;;
pause)
echo "Pausing qmail-send"
svc -p /var/supervise/qmail/send
echo "Pausing qmail-smtpd"
svc -p /var/supervise/qmail/smtpd
;;
cont)
echo "Continuing qmail-send"
svc -c /var/supervise/qmail/send
echo "Continuing qmail-smtpd"
svc -c /var/supervise/qmail/smtpd
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /var/supervise/qmail/smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /var/supervise/qmail/send
echo "* Restarting qmail-smtpd."
svc -u /var/supervise/qmail/smtpd
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp*
echo "Reloaded /etc/tcp.smtp."
;;
help)
cat <<HELP
stop -- stops mail service (smtp connections refused, nothing goes out)
start -- starts mail service (smtp connection accepted, mail can go out)
pause -- temporarily stops mail service (connections accepted, nothing leaves)
cont -- continues paused mail service
stat -- displays status of mail service
cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac
exit 0
4.3.9 建立日志目录
# mkdir -p /var/log/qmail/smtpd
# chown qmaill /var/log/qmail /var/log/qmail/smtpd
4.3.10 建立supervise目录
# mkdir -p /var/supervise/qmail/send
# mkdir /var/supervise/qmail/smtpd
4.3.11 使控制脚本能运行
# chmod 755 /etc/rc.d/init.d/qmail
# ln -s /etc/rc.d/init.d/qmail /usr/local/sbin
4.3.12 修改/etc/tcp.smtp
在我们启动qmail的smtp服务之前,我们需要做一些访问控制,最简单的方法是
使用/etc/目录下的一些文件,我使用/etc/tcp.smtp。最简单的例子是只包含一行
内容:
:allow
它的意思是不允许允许任何机器通过它来发送邮件。为了让内部用户可以使用它
来发送邮件。我们必须把/etc/tcp.smtp编辑成这样:
127.0.0.1:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT=""
:allow
我们内部的网络是192.168.0.0,如果你的内部网络不是192.168.0.0,请改成
相应的。
要想知道更多的访问控制,你可以使用man tcprules,来阅读它的使用手册。
然后我们需要让这个访问控制的规则生效,
# /usr/local/sbin/qmail cdb
4.3.13 启动qmail
启动qmail 已经是很容易的事情了,只要简单的使用/usr/local/sbin/qmail命
令,就可以实现。
# /usr/local/sbin/qmail start
4.4 安装vpopmail
vpopmail可以实现系统账号和邮件账号的分离。
4.4.1 建立必须的用户和组
vpopmail必须使用自己的用户和组来安装。
首先保证/home目录有足够的空间。
# groupadd vchkpw
# useradd -g vchkpw vpopmail -d /home/vpopmail
4.4.2 设置tcp.smtp文件
# echo "127.0.0.:allow,RELAYCLIENT=\"\"" > ~vpopmail/etc/tcp.smtp
4.4.3 编译,安装
首先,确保自己不是root,然后将vpopmail-4.9解压缩,编译。
$ tar zxvf vpopmail-4.9.tar.gz
$ cd vpopmail-4.9
$ ./configure --enable-default-domain=czlib.net
$ make
$ su
# make install-strip
这里因为我需要实现user@czlib.net的邮件地址,所以我设置了默认的域,
具体你使用的时候只要改成你自己的域就可以了。
4.4.4 建立虚拟域
# cd /home/vpopmail/bin
# ./vadddomain czlib.net <---增加czlib.net域
系统会提醒你输入这个域的管理员的密码。然后程序会修改下面一些必要的qmail配置文件
来使得qmail能支持这个新的域:
* /var/qmail/control/locals
* /var/qmail/control/rcpthosts
* /var/qmail/control/morercpthosts (如果rcpthosts文件超过了50行)
* /var/qmail/control/virtualdomains
* /var/qmail/users/assign
* /var/qmail/users/cdb
4.4.5 增加/删除用户/改变用户密码
* 增加用户
# cd /home/vpopmail/bin
# ./vadduser hefish@czlib.net
系统会提示输入密码
* 删除用户
# cd /home/vpopmail/bin
# ./deluser hefish@czlib.net
* 改变用户密码
# cd /home/vpopmail/bin
# ./vpasswd hefish@czlib.net
4.4.6 设置POP3服务
设置pop3服务需要用到qmail中的qmail-popup,qmail-pop3d和vpopmail的vchkpw程序。
我们使用下面的脚本来启动pop3服务:
#! /bin/bash
# Start qmail-pop3d daemon
/usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup mail.czlib.net /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
我们把这个脚本存为文件/etc/rc.d/rc.pop3,并且使用chmod命令使之可以执行。
4.5 最后的配置
把启动qmail和pop3服务的代码放到启动文件中,让机器每次启动的时候自动运行。把下面几行命
令写到/etc/rc.d/rc.local文件的末尾:
# Start qmail smtpd
/usr/local/sbin/qmail start
# Start POP3 Service
/etc/rc.d/rc.pop3
现在确保你的inetd.conf里面有关pop3的一行已经被注释掉。然后就使用/etc/rc.d/rc.pop3
命令来启动POP3服务器。
至此整个过程结束,从别的地方发一封信到hefish@czlib.net,看看能不能收到?GOOD LUCK!
5 参考文献
* Life with qmail
* vpopmail INSTALL