分享
 
 
 

我的qmail学习笔记

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

日期:2003-06-23 23:31

本人为一网络菜鸟,失业家中已月余,本着边学习边等待机会的想法,开始学习qmail,以下是本人的学习笔记:

一:安装环境

安装平台:RedHat Linux6.2

安装机器:Vmware虚拟机(虚拟出两张网卡IP分别为192.168.1.1&2)

软件包:

bind-8.2.4.tar.gz DNS服务器软件

qmail-1.03.tar.gz qmail基本系统

qmail-103.patch qmail补丁

checkpassword-0.90.tar.gz 系统用户口令验证程序

ucspi-tcp-0.88.tar.gz tcpserver等服务程序用以取代inetd

daemontools-0.70.tar.gz qmail进程守护工具

isoqlog-1.7.tar.gz qmail日志分析工具

mysql-3.23.33.tar.gz mysql数据库软件

apache_1.3.20.tar.gz 老牌的web服务器软件

php-4.0.6.tar.gz php解析软件

vpopmail-4.9.10.tar.gz 虚拟域及其用户管理工具

courier-imap-1.3.10.tar.gz qmail支持imap的工具包

ezmlm-0.53.tar.gz 邮件列表管理

autorespond-2.0.2.tar.gz 自动回复程序

qmailadmin-0.80.tar.gz 邮件域及用户WEB管理

sqwebmail-3.3.7.20020910.tar.gz Webmail

netmania-1.0.2.tar.gz Webmail(可选)

igenus_2_20010904_snap Webmail(可选)

vqsignup-0.5.tar.gz web方式用户注册

vqregister-2.6.tar.gz web方式用户注册(可选)

rblsmtpd-0.70.tar.gz 反垃圾邮件程序

以上所列软件可以构建一个基本的支持多域及上百万用户的E-mail服务器。其实还有很多的qmail扩展程序,比如qmail与ldap的集成,扫病毒程序等等。利用丰富的第三方扩展软件,可以构建出功能更为强大的邮件服务器!

下面正式开始我的qmail学习笔记! :)

二:构建最基本的基于系统帐户的qmail服务器

由于是学习目的,所以我会首先构建最基本的qmail系统,邮件帐号没有与系统帐号分离,没有多余的功能。成功后再一步一步循序渐进的扩展qmail的功能。

1)实现DNS服务,使DNS中有邮件服务器的正确的MX记录。

#cp bind-8.2.4.tar.gz /usr/local/src (假定所有的程序包都拷贝到/usr/local/src下)

#tar xvfz bind-8.2.4.tar.gz

#cd bind-8.2.4

#make

#make install

编译安装完成后

#vi /etc/named.conf

文件内容如下:

options {

directory "/var/named";

};

zone "dream.com"{

type master;

file "dream.com";

};

zone "0.0.127.in-addr.arpa"{

type master;

file "named.local";

};

zone "1.168.192.in-addr.arpa"{

type master;

file "192.168.1";

};

由于只是在内部局域网内测试所以没有加上根域信息"."

创建/var/named目录

#mkdir /var/named

分别创建dream.com、named.local、192.168.1三个文件

#cd /var/named

#vi dream.com 内容如下:

$TTL 86400

@ IN SOA www.dream.com. root.www.dream.com. (

2003062301 ; serial

28800 ; refresh

14400 ; retry

3600000 ; expire

86400 ; default_ttl

)

IN NS www.dream.com.

IN MX 5 mail.dream.com.

IN MX 10 mail2.dream.com.

www IN A 192.168.1.1

mail IN A 192.168.1.2

mail2 IN A 192.168.1.3

ftp IN CNAME www

#vi 192.168.1 内容如下:

$TTL 86400

@ IN SOA www.dream.com. root.www.dream.com. (

2003062302 ; serial

28800 ; refresh

14400 ; retry

3600000 ; expire

86400 ; default_ttl

)

IN NS www.dream.com.

1 IN PTR www.dream.com.

2 IN PTR mail.dream.com.

3 IN PTR mail2.dream.com.

#vi named.local 内容如下:

$TTL 86400

@ IN SOA www.dream.com. root.www.dream.com. (

2003062303 ; serial

28800 ; refresh

14400 ; retry

3600000 ; expire

86400 ; default_ttl

)

IN NS www.dream.com.

1 IN PTR localhost.

#vi /etc/hosts

127.0.0.1 localhost.localdomain localhost

192.168.1.1 www.dream.com www

192.168.1.2 mail.dream.com mail

192.168.1.3 mail2.dream.com mail2

注:192.168.1.3为局域网另一台运行E-mail服务(Imail)的Windows 2000服务器,用其和linux平台下的E-mail服务器做测试用)

#vi /etc/host.conf

order hosts,bind

multi on

#vi /etc/resolv.conf

search dream.com

nameserver 192.168.1.1

启动运行DNS服务器:

#ndc start

测试DNS服务器:

#nslookup

>set type=mx

>dream.com

Server: 192.168.1.1

Address: 192.168.1.1#53

dream.com mail exchange=5 mail.dream.com

dream.com mail exchange=10 mail2.dream.com

DNS 服务已设置完毕,接下来我们要开始我们真正的qmail学习历程啦!

2)安装qmail

在安装qmail之前要运行ntsys命令关闭sendmail服务,再用rpm -e --nodeps sendmail卸载掉sendmail

#tar xvfz qmail-1.03.tar.gz

创建qmail安装目录

#mkdir /var/qmail

建立qmail相应的组及用户

#groupadd nofiles

#useradd -g nofiles -d /var/qmail/alias alias

#useradd -g nofiles -d /var/qmail qmaild

#useradd -g nofiles -d /var/qmail qmaill

#useradd -g nofiles -d /var/qmail qmailp

#groupadd qmail

#useradd -g qmail -d /var/qmail qmailq

#useradd -g qmail -d /var/qmail qmailr

#useradd -g qmail -d /var/qmail qmails

编译qmail前先对qmail打补丁

#patch -p0 <qmail-103.patch

#cd qmail-1.03

#make setup check

#./config

如果域名解析没有问题的话应该可以看到安装成功的信息

也可以运行config-fast脚本不进行这一步

#./config mail.dream.com

对某些不能接收邮件的系统帐户添加别名

#cd /var/qmail/alias

#echo admin > .qmail-root

#echo ezboy > .qmail-postmaster

#echo ezboy > .qmail-mailer-daemon

#chmod 644 /var/qmail/alias/.qmail*

3)创建qmail启动脚本

#cp /var/qmail/boot/home /var/qmail/rc

#vi /var/qmail/rc

将其中的“./Mailbox”改为“./Maildir/“

启动qmail只用输入:

#csh -cf /var/qmail/rc &

"&"表明在后台执行

4)启动SMTP和POP3服务

首先注释掉/etc/inetd.conf文件中有关SMTP和POP3的行,然后加上:

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env

tcp-env /var/qmail/bin/qmail-smtpd

注意""不用输入,它代表前后的内容为一行内容(整行输入)

确认一下/etc/services文件中有下面这一行

pop3 110/tcp pop-3

启动pop前要先安装一个口令验证程序 checkpassword

#cd /usr/local/src

#tar xvfz checkpassword-0.90.tar.gz

#make setup check

此程序安装到/bin目录下

然后在/etc/inetd.conf下加入:

pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup mail.dream.com /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir

切记整行输入!!!

5)创建邮件用户

#useradd test

#passwd test

#su test

$/var/qmail/bin/maildirmake Maildir

$echo ./Maildir/ > .qmail

6)测试POP3及SMTP服务启动与否

#telnet 127.0.0.1 110

Trying 127.0.0.1 ......

Connected to 127.0.0.1

Escape character is '^]'

+OK 15616.992832685@mail.dream.com

user test

+OK

pass test的密码

+OK

如果看到以上内容说明POP3服务已经启动

#telnet 127.0.0.1 25

Trying 127.0.0.1 ......

Connected to 127.0.0.1

Escape character is '^]'

220 mail.dream.com ESMTP

Helo mail.dream.com

SMTP服务也已正常启动

下面用Outlook Express等邮件客户端来测试。

小结:配置DNS时要注意书写,一般用Tab键来分隔每组字符。编辑 /etc/inetd.conf时也要注意书

写时应是一整行写完。

疑问:测试时邮件帐户形如user@domain.com时会提示密码错误(在本机上无错误),改为user反而

可以正常收发邮件,不知何解,请高手指教!

三:用ucspi中的tcpserver取代传统的inetd而获得更好的性能和安全性.

仍然是在/usr/local/src目录下

#tar xvfz ucspi-tcp-0.88.tar.gz

#cd ucspi-tcp-0.88

#make setup check

安装完毕后检查/etc/inetd.conf将所有与POP3及SMTP相关的语句注释掉,然后重新启动inetd:

#killall -HUP inetd

在系统启动文件/etc/rc.d/rc.local中添加以下语句来启动SMTP和POP3服务:

#!/bin/sh

#start smtp service

echo "Starting the smtp service ……"

QMAILDUID=`/usr/bin/id -u qmaild`

NOFILESGID=`/usr/bin/id -g qmaild`

/usr/local/bin/tcpserver -H -R -c 20

-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp

/var/qmail/bin/qmail-smtpd 2>&1 > /dev/null &

#start pop3 service

echo "Starting the pop3 service ……"

/usr/local/tcpserver -l 0 -H -R 0 pop-3

/var/qmail/bin/qmail-popup mail.dream.com

/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &

以下是TCPSERVER的参数列表:

TCPSERVER的一般参数:

参数 说明

-q 安静模式,不输出任何错误信息

-Q 只输出错误信息(缺省)

-v 详细模式,输出错误和状态信息

TCPSERVER的连接参数:

参数 说明

-B text 在连接建立后显示text的内容

-c n 最大的同步连接数目,当有n个同步连接时,将延缓对新连接请求的 响应,直到有连接结束,n必须是一个正的整数,缺省值为40

-d 当主机响应慢时延缓向远端主机发送数据

-D 不延缓向远端主机发送数据

-g gid 接受连接时所要响应的系统用户组的ID,gid必须为正的整数

-l 输出本机端口号到stdout

-o 不对在连接的帧改变其IP设定

-0 删除路由帧的IP设定(缺省)

-u uid 接受连接时所要响应的系统用户的ID,uid必须为正的整数

-x db 以数据库db所定义的规则确定是否接受远端客户的连接

-X 当-x定义的数据库不存在时允许所有的连接

TCPSERVER的数据收集参数:

参数 说明

-h 以DNS查询远端主机名

-H 不以DNS查询远端主机名,为避免循环,此参数必须用于端口53

-l hostname 不以DNS查询本机主机名,使用hostname作为本机主机名。为避免循 环,此参数必须用于53端口

-r 从远端主机获取系统变量$TCPREMOTEINFO

-R 不从远端主机获取系统变量$TCPREMOTEINFO,必须在端口53和113中使用 此参数

-t n 在n秒以后停止获取系统参数$TCPREMOTEINFO

小结:还是老生常谈,修改/etc/rc.d/inetd.conf时要注意书写,注意o和0的区别,另外就是要一

行写完。还有一点就是写POP3启动脚本时 pop-3要和/etc/services中相一致,若/etc/

services中书写为pop3时inetd.conf中也要改为pop3(只是本人安装时的一点体会,不知正

确与否?)

四:qmail的进程工具daemontools

daemontools可以监测qmail服务、停止和启动qmail服务,记录qmail运行日志(multilog)

其中最主要的程序是supervise它监测进程的运行,如果进程因为其他原因中断或者停止,它会自动的重启这个服务进程,从而提高qmail邮件服务的可靠性。另一个重要程序是multilog,用以取代unix中原有的日志程序。因为它更安全,效率更高。

安装daemontools

#tar xvfz daemontools-0.70.tar.gz

#cd /usr/local/daemontools-0.70

#make

#make setup check

所有程序将被安装到/usr/local/bin目录下。

Daemontools软件包所包含的程序及其功能

程序 功能叙述

Envdir 在预设的系统环境中运行一个程序

Envuidgid 在预设的用户和用户组ID的系统环境中运行一个程序

Fghack 禁止一个程序以后台模式运行

Multilog 系统日志程序

Setlock 以预设的文件系统锁运行一个程序

Setuidgid 以预设的用户和用户组运行一个程序

Softlimit 以预设的系统资源限制运行一个程序

Supervise 启动并监测一个进程,如果这个进程中断或者停止,自动启动这个进程

Svc 控制以supervise启动的进程,允许系统管理员启动和停止这个进程

Svok 监测一个supervise进程是否在运行

Svscan 启动和监测多个supervise进程

Svstat 反回supervise监测的进程的状态

Tai64n 在日志中增加一个tai64n的时间戳

Tai64nlocal 将tai64n时间戳转换成本地时间和时间

首先停止所有的qmail进程:

#killall qmail-send

为supervise创建相应的运行目录:

#mkdir /var/qmail/supervise

#mkdir /var/qmail/supervise/qmail-send

#mkdir /var/qmail/supervise/qmail-smtpd

#mkdir /var/qmail/supervise/qmail-pop3d

#mkdir -p /var/qmail/supervise/qmail-send/log

#mkdir -p /var/qmail/supervise/qmail-smtpd/log

#mkdir -p /var/qmail/supervise/qmail-pop3d/log

#chmod +t /var/qmail/supervise/qmail-send

#chmod +t /var/qmail/supervise/qmail-smtpd

#chmod +t /var/qmail/supervise/qmail-pop3d

创建相应的日志存放目录

#chmod -p /var/log/qmail/qmail-smtpd

#chmod -p /var/log/qmail/qmail-send

#chmod -p /var/log/qmail/qmail-pop3d

#chown -R qmaill /var/log/qmail

创建qmail文件,内容如下:

#!/bin/sh

#

PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin

export PATH

case "$1" in

start)

echo -n "Starting qmail:svscan"

cd /var/qmail/supervise

env - PATH="$PATH" svscan &

echo $! > /var/run/svscan.pid

echo "."

;;

stop)

echo -n "Stopping qmail: svscan"

kill `cat /var/run/svscan.pid`

echo -n " qmail"

svc -dx /var/qmail/supervise/*

echo -n " logging"

svc -dx /var/qmail/supervise/*/log

echo "."

;;

stat)

cd /var/qmail/supervise

svstat * */log

;;

doqueue|alrm)

echo "Sending ALRM signal to qmail-send."

svc -a /var/qmail/supervise/qmail-send

;;

queue)

qmail-qstat

qmail-qread

;;

reload|hup)

echo "Sending HUP signal to qmail.send."

svc -h /var/qmail/supervise/qmail-send

;;

pause)

echo "Pausing qmail-send"

svc -p /var/qmail/supervise/qmail-send

echo "Pausing qmail.smtpd"

svc -p /var/qmail/supervise/qmail-smtpd

echo "pausing qmail-pop3d"

svc -p /var/qmail/supervise/qmail-pop3d

;;

cont)

echo "Continuing qmail.send"

svc -c /var/qmail/supervise/qmail-send

echo "Continuing qmail.smtpd"

svc -c /var/qmail/supervise/qmail-smtpd

echo "Continuing qmail-pop3d"

svc -c /var/qmail/supervise/qmail-pop3d

;;

restart)

echo "Restarting qmail:"

echo "* Stopping qmail-smtpd."

svc -d /var/qmail/supervise/qmail-smtpd

echo "* Stopping qmail-pop3d."

svc -d /var/qmail/supervise/qmail-pop3d

echo "* Sending qmail.send SIGTERM and restarting."

svc -t /var/qmail/supervise/qmail-send

echo "* Restarting qmail.smtpd."

svc -u /var/qmail/supervise/qmail-smtpd

echo "* Restarting qmail-pop3d."

svc -u /var/qmail/supervise/qmail-pop3d

;;

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

若想在系统启动时启动qmail相应的服务,将这个qmail文件拷贝到/etc/rc.d/init.d下,然后执行以下命令:

#chmod 755 /etc/rc.d/init.d/qmail

#ln -s /etc/rc.d/init.d/qmail /usr/local/sbin

#ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S80qmail

#ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S80qmail

在/var/qmail/supervise/qmail-send目录下创建名为run的文件,内容为:

#!/bin/sh

exec /var/qmail/rc

在/var/qmail/supervise/qmail-smtpd目录下创建名为run的文件,内容为:

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

QMAILDUID=`id -u qmaild`

NOFILESGID=`id -g qmaild`

exec /usr/local/bin/softlimit -m 2000000

/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb -c 20

-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

在/var/qmail/supervise/qmail-pop3d目录下创建名为run的文件,内容为:

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

exec /usr/local/bin/softlimit -m 2000000

/usr/local/bin/tcpserver -l 0 -H -R 0 pop-3

/var/qmail/bin/qmail-popup mail.dream.com

/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir

在/var/qmail/supervise/qmail-smtpd/log目录下创建run文件:

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/qmail-smtpd

在/var/qmail/supervise/qmail-send/log目录下创建run文件:

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t

/var/log/qmail/qmail-send

在/var/qmail/supervise/qmail-pop3d/log目录下创建run文件:

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t

/var/log/qmail/qmail-pop3d

然后要改变这些文件的属性以使它们可以运行:

#chmod 755 /var/qmail/supervise/qmail-send/run

#chmod 755 /var/qmail/supervise/qmail-send/log/run

#chmod 755 /var/qmail/supervise/qmail-smtpd/run

#chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

#chmod 755 /var/qmail/supervise/qmail-pop3d/run

#chmod 755 /var/qmail/supervise/qmail-pop3d/log/run

最后:

#vi /etc/tcp.smtp

运行qmail start启动qmail吧!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有