1、条件
我们拥有:
* 一个顶级的域名:ta139.com
* 一台运行RedHat Linux 6.2的服务器,主机名www.ta139.com
* 域名解析将mail exchanger设置为mail.ta139.com,与www.ta139.com为同一台主机
2、目标
* 将mail.ta139.com作为邮件服务器;
* 实现类似user@ta139.com的邮件地址;
* 将邮件账号和系统账号分离开,以便于管理。
3、构想
* 使用qmail来假设邮件服务器;
* 用vpopmail来实现邮件账号和系统账号的分离。
4、实现
4、1 DNS的配置
由于我们属于服务器托管用户,DNS解析由电信局完成的,因此只需要将我们的需求提交给电信部门来完成就可以了。使用nslookup命令检验DNS解析是否正确:
[pangty@webserver ~]$ nslookup
Default Server: ns1.sdqdptt.net.cn
Address: 202.102.134.68
> set querytype=MX
> ta139.com
Server: ns1.sdqdptt.net.cn
Address: 202.102.134.68
Non-authoritative answer:
ta139.com preference = 10, mail exchanger = mail.ta139.com
Authoritative answers can be found from:
ta139.com nameserver = dns-jn.sd.cninfo.net
mail.ta139.com internet address = 61.156.35.114
dns-jn.sd.cninfo.net internet address = 202.102.152.3
>
能看到上面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.ta139.com
(实际使用时,用你的机器名来替换mail.ta139.com)
4、3、5 安装qmail的别名
qmail至少需要3个别名,一个是系统管理员也就是root,另两个是postmaster和mailer-daemon,后两个是qmail的管理员。我们需要把这三个别名转向到具体的人那儿。
# cd ~alias
# echo webmaster > .qmail-root
# echo webmaster > .qmail-postmaster
# echo webmaster > .qmail-mailer-daemon
这里我把这三个别名都指向webmaster。你可以根据实际情况设置。
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 -R -H -lta139.com -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=ta139.com
$ make
$ su
# make install-strip
这里因为我需要实现user@ta139.com的邮件地址,所以我设置了默认的域,具体你使用的时候只要改成你自己的域就可以了。
4、4、4 建立虚拟域
# cd /home/vpopmail/bin
# ./vadddomain ta139.com <---增加ta139.com域
系统会提醒你输入这个域的管理员的密码。然后程序会修改下面一些必要的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 webmaster@ta139.com
系统会提示输入密码
* 删除用户
# cd /home/vpopmail/bin
# ./deluser webmaster@ta139.com
* 改变用户密码
# cd /home/vpopmail/bin
# ./vpasswd webmaster@ta139.com
4、4、6 设置POP3服务
设置pop3服务需要用到qmail中的qmail-popup,qmail-pop3d和vpopmail的vchkpw程序。我们使用下面的脚本来启动pop3服务:
#! /bin/bash
# Start qmail-pop3d daemon
/usr/local/bin/tcpserver -R -H -lta139.com 0 110 /var/qmail/bin/qmail-popup mail.ta139.com \
/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服务器。