目 录
一. 引 言....................................................................................................................................... 3
1 邮件服务器的相关协议 ...................................................................................................... 3
1.1 SMTP 协议 ......................................................... 3 1.2 POP3 协议 .......................................................... 4 1.3 IMAP4 协议 ........................................................ 4 1.4 HTTP 协议和 HTML 语言 ............................................. 4 1.5 MIME 协议 ......................................................... 4 1.6 LDAP 协议 .......................................................... 4 2 Qmail的主要优点: ........................................................................................................... 4 二.qmail安装和配置邮件服务器 ................................................................................................... 5
2.1 Qmail系统的介绍和准备工作 ...................................................................................... 5
2.1.1 目的 ........................................................... 5 2.1.2 qmail管理与维护 ............................................... 5 2.1.3 安装要求 ....................................................... 5 2.1.4 软件介绍 ....................................................... 6 2.1.5 实现的功能 ..................................................... 6 2.2 qmail+vpopmail+mysql+qmailadmin+ezmlm+igenus的安装 .................. 6 2.2.1 实现的功能 ..................................................... 6 2.2.2 主机系统 ....................................................... 6 2.2.3 所用软件包 ..................................................... 6 2.2.4 安装前系统设定 ................................................. 7 2.2.5 装MYSQL ........................................................ 7 2.2.6 apache ........................................................ 7 2.2.7 安装php ....................................................... 7 2.2.8 装qmail-1.03(带认证功能) ...................................... 8 2.2.9 安装ucspi-tcp .................................................. 8 2.2.10 安装vpopmail ................................................. 9 2.2.11 zmlm and ezmlm-idx with MySQL support .................... 10 2.2.12 安装autorespond ............................................. 11 2.2.13 安装igenus ................................................... 11 2.2.14 安装qmailadmin-0.80 ........................................ 14 2.2.15 测试 .......................................................... 14 2.2.16 小结 .......................................................... 14 三. qmail的工作原理和配置文件的设置 ................................................................................... 14
第 1 页 共 35 页
基于Qmail邮件服务器的解决方案- 2 -
3.1 qmail是什么 ...................................................... 14 3.2 qmail和相关的服务 ................................................ 15 3.3 qmail投递邮件进程流程 ............................................ 15 3.4 qmail实用工具程序 ................................................ 16 3.5 qmail环境变量 .................................................... 17 3.6 qmail控制文件 .................................................... 17 3.7系统别名 .......................................................... 20 3.8用户别名 .......................................................... 20 3.9改变MUA程序接口 ................................................ 20 3.10建立qmailsmtp功能 ............................................. 20 3.11小结 ............................................................ 21 四. ucspi-tcp的原理和设置 ......................................................................................................... 22 五. vpopmail和qmailadmin对用户的管理 ................................................................................ 25
5.1目的 .............................................................. 25 5.2 vpopmail功能简介 ................................................ 25 5.3 vpopmail的安装设置 .............................................. 26 5.4 vpopmail使用 .................................................... 27 5.5 qmailadmin的介绍 ............................................... 28 5.6 qmailadmin的使用 ............................................... 28 5.7小结 .............................................................. 29 六. 如何有选择地清理不需要的Mail Queue ............................................................................ 29
6.1处理队列中的邮件 .................................................. 29 6.2 在邮件队列中快速删除从一个地方发过来但又不存在的邮件 .............. 30 6.3 删除队列中的大量广告信息 ......................................... 30 七.具体的功能与实现 ................................................................................................................... 30 八.总结........................................................................................................................................... 34 九.结束语....................................................................................................................................... 34 参考文献......................................................................................................................................... 34
第 2 页 共 35 页
基于Qmail邮件服务器的解决方案- 3 -
基于Qmail邮件服务器的解决方案
摘要 本文的目的,是用自由软件在一个UNIX平台上安装一套功能完整的邮件系统和如何来管理。这里以qmail作为smtp服务器,vpopmail做pop3服务器和实现虚拟域、用mysql数据库来进行用户验证,用qmailadmin来实现图形化的用户管理。用ezmlm来提供对邮件列表的支持。使用igenus来提供一个友善的webmail界面。
关键词 Qmail mysql ezmlm igenus apache
The mail server's solution based on Qmail
Lou pengfei, Department of Computer Science,GuiZhou University
Abstract The purpose of this text is use the free software on a UNIX platform install a complete mail system and how manage it.We uses qmai as smtp server,uses vpopmail as pop3 server and realizes Conjecture,uses ezmlm to offer the support to mail row.We also uses igenus to offer a friendly webmail Interface.
Key Words Qmail mysql ezmlm igenus apache
一. 引 言
Qmail是GNU下的一个著名的自由软件,世界各地的高手们为进一步完善和扩充它的功能,开发了大量的基于Qmail的工具和补丁软件,VmailMgr(Virtual Mail ManaGeR)就是其中之一。它增强了Qmail虚拟域(Virtual Domain)的功能,提供了大量的命令,以方便建立和管理于UNIX系统用户的邮件系统用户,提供软、硬空间限额等丰富的管理功能;邮件服务器的虚拟用户也可以通过POP3、IMAP标准协议访问自己的邮箱。特别值得一提的是,VmailMgr还提供一组CGI程序和PHP函数,有了这组程序,用户们可以通过Web页面进行邮箱申请、密码更换,邮件管理员也可以通过Web页面轻松完成用户管理和邮件系统的配置工作。 1 邮件服务器的相关协议
1.1 SMTP 协议
SMTP 协议是简单的邮件传输协议(Simple Mail Transfer Protocol) 的缩写。 这是最早出现的, 也是被普遍使用的最基本 Internet 邮件服务协议。
第 3 页 共 35 页
基于Qmail邮件服务器的解决方案- 4 -
1.2 POP3 协议
POP 协议是邮局协议 (Post Office Protocol) 的缩写, 是一种允许用户从邮件服务器收发邮件的协议。与 SMTP 协议相结合, POP3 是目前最常用的电子邮件服务协议。 1.3 IMAP4 协议
IMAP 协议是 Internet 消息访问协议 (Internet Message Access Protocol) 的缩写, 现在常用的是版本 4, 它为用户提供了有选择的从邮件服务器接收邮件的功能, 基于服务器的信息处理功能和共享信箱功能。 IMAP4 在用户登录到邮件服务器以后, 允许采取多段处理方式查询邮件。 首 先, 用户可以仅读取电子邮箱中的邮件信头(Message header); 然后, 用户可以选择下载指定的邮件或者全部邮件。 IMAP4 在邮件服务器一端为用户保留邮件。 1.4 HTTP 协议和 HTML 语言
HTTP 协议是超级文本传输协议 (HyperText Transfer Protocol) 的缩写, 支持这个协议的邮件服务器, 可以提供通过 Web 的电子邮件收发服务。 1.5 MIME 协议
MIME 是多用途 Internet 邮件扩展 (Multipurpose Internet Mail Extensions) 协议的缩写。作为对 SMTP 协议的扩充, MIME 规定了通过 SMTP 协议传输非文本电子邮件附件的标准。目前, MIME 的用途早已经超越了收发电子邮件的范围, 成为在 Internet 上传输多媒体信 息的基本协议之一。 1.6 LDAP 协议
LDAP 协议是轻量目录访问协议 (Lightweight Directory Access Protocol) 的 缩写。 通过将相关的内容存放在统一的目录之下, 目录服务为用户提供了基于客户/服 务器工作方式的信息查询手段。
2 Qmail的主要优点:
qmail程序是由dan bernstein开发出来的为标准的unix服务器提供邮件传输代理的(mail transfer agent,mta)功能的。Qmail是可以完全替代Sendmail-binmail体系的新一代UNIX邮件系统,它也是一个基于UNIX操作系统的Internet邮件传输机构( Internet Mail Transfer Agent 简称MTA)。它采用标准的简单邮件传输协议(Simple Mail Transfer Protocol 简称SMTP)与Internet上其他MTA交换信息。为了解决用户邮件存储问题,Qmail提出了Maildir存储方式,每个邮件作为单独的一个文件保存在用户个人的邮件目录下,这就避免了加锁。同时,Qmail支持虚拟域(Virtual Domain)和虚拟用户(Virtual User),
第 4 页 共 35 页
基于Qmail邮件服务器的解决方案- 5 -
使邮件系统的用户于UNIX系统用户。与Sendmail相比,Qmail有以下优点:
*安全---- Qmail将E-mail处理过程分为多个分过程,尽量避免以Root用户身份运行。同时Qmail也禁止对特权用户(Root、Deamon等)直接发信。
*可靠---- Qmail的直接投递保证了E-mail在投递过程中不会丢失。Qmail同时支持新的更可靠的信箱格式——Maildir,保证系统在突然崩溃情况下不至破坏整个信箱。 *高效----运行在奔腾的BSD上,Qmail每天可以轻松地投递20万封电子邮件。
*简单---- Qmail 要比其他的Internet Mail系统小得多。 它通过统一的向前机制完成Forwarding、Alias和Maillist等功能, Qmail使用简单高效队列来处理投递。Qmail-SMTPD可以由Inetd启动,节省了一定资源。
当前在国内最流行的免费电子邮件系统如163、371等,都是使用网易公司开发的系统。这些系统就是采用Qmail作为基本服务器软件,采用NFS网络文件系统作为用户邮件存储空间,使用Maildir作为邮件存储格式,提供多级目录以支持较大的用户数。
二.qmail安装和配置邮件服务器
2.1 Qmail系统的介绍和准备工作
2.1.1 目的
本文的目的,是用自由软件在一个Linux平台上安装一套功能完整的邮件系统,和如何来管理。这里以qmail作为smtp服务器,vpopmail做pop3服务器和实现虚拟域、用mysql数据库来进行用户验证,用qmailadmin来实现图形化的用户管理。用ezmlm来提供对邮件列表的支持。使用igenus来提供一个友善的webmail界面。 2.1.2 qmail管理与维护
(一)Qmail系统的介绍和准备工作。
(二)qmail+vpopmail+mysql+qmailadmin+ezmlm+igenus的安装 (三)qmail的工作原理和配置文件的设置。 (四)ucspi-tcp的原理和设置。
(五)vpopmail和qmailadmin对用户的管理。 (六)如何有选择地清理不需要的Mail Queue. 2.1.3 安装要求
1、 悉了所有Dan Bernstein(qmail的作者)发布的文档; 熟悉www.qmail.org(qmail官方站点)的相关资源,尽量理解Life With qmail。
2、 安装软件包前,仔细阅读各自的README AND INSTALL文件,这是最好的安装指
第 5 页 共 35 页
基于Qmail邮件服务器的解决方案- 6 -
南!
2.1.4 软件介绍
httpd-2.0.40.tar.g 提供web服务的server。 autorespond.tar.gz 实现e-mail自动回复功能。 ezmlm-0.53.tar.gz 实现qmail邮件列表功能。
ezmlm-idx-0.40.tar.gz ezmlm's的补丁程序,使ezmlm支持qmail。 qmail-1.03.tar.gz Qmail软件包
qmailadmin-0.80.tar.gz qmail的web管理软件。 ucspi-tcp-0.88.tar.gz tcpserver service 程序。 vpopmail-5.2.tar.gz 实现pop3服务和支持虚拟域。
qmail-smtpd.c qmail的补丁程序,实现smtp认证功能。 php4-200305121030.tar.gz 实现apache对php的支持 igenus_2_20030511.tgz 实现webmail的软件包。
Qmail-setup.1.5.3.tar.gz 用其中的qmailadmin汉化部件。 2.1.5 实现的功能
1、 Qmail帐号与系统帐号的分离。
2、 SMTP服务的密码验证功能,能有效的防止别人利用自己的服务器发送匿名信。
2.2 qmail+vpopmail+mysql+qmailadmin+ezmlm+igenus的安装
2.2.1 实现的功能
通过以下安装,构建一个完整的mail邮件服务器。它用qmail为MTA,用vpopmail实现pop3服务和虚拟的邮件域。用mysql来存取用户信息和认证。用qmailadmin来通过web形式进行方便的用户管理,用ezmlm来实现基于mysql的大容量的邮件列表功能。通过igenus来实现webmail的功能。 2.2.2 主机系统
我用的是redhat8.0的系统,在一台戴尔的pc server上作的。 2.2.3 所用软件包
以下的软件,其中关于qmailadmin汉化的文件—en-us取自于qmail-setup.1.53.tar.gz。要是用它的包中别的文件,一定要仔细察看配置文件,不少默认的安装路就都被改过。Mysql用的是系统的rpm包安装的,也可自己用源代码编译。 httpd-2.0.40.tar.gz
第 6 页 共 35 页
基于Qmail邮件服务器的解决方案- 7 -
php4-200305121030.tar.gz qmail-1.03.tar.gz qmail-103.patch
ucspi-tcp-0.88.tar.gz ezmlm-0.53.tar.gz ezmlm-idx.0.40.tar.gz autorespond-2.0.0.tar.gz vpopmail-5.2.tar.gz qmailadmin-0.80.tar.gz igenus_2_20030511.tgz
qmail-setup.1.53.tar.gz中的en-us ---qmailadmin汉化文件 把以上文件包都上传到/home/software目录下 2.2.4 安装前系统设定
mysql管理用户名:root 口令:mysql2003 qmail安装设置的默认域:163.net
vpopmail安装设置的默认域 管理口令:123456
ezmlm的mysql管理用户:ezmlm 口令:ezmlm 数据库名:ezmlm 2.2.5 装MYSQL 在第二张盘上运行: # rpm -ivh mysql* 启动mysql server:
# /etc/rc.d/init.d/mysqld start 设置mysql root口令:
# mysqladmin -u root -p password mysql2003 Enter passwod:(直接回车)
(注:有连带关系时,可以在x-windows模式下安装,系统自动就可以解决了) 2.2.6 apache
# cd /home/software/
# tar -zxvf httpd-2.0.40.tar.gz # cd httpd-2.0.40
# ./configure --prefix=/var/www --enable-modules=so # make
# make install 2.2.7 安装php # cd /home/software
第 7 页 共 35 页
基于Qmail邮件服务器的解决方案- 8 -
# tar -zxvf php4-200305121030.tar.gz # cd php4-200305121030
# ./configure --with-mysql --with-apxs2=/var/www/bin/apxs # make
# make install
# cp php.ini-dist /usr/local/lib/php.ini 2.2.8 装qmail-1.03(带认证功能) 添加用户和组:
# 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 # mkdir -p /var/qmail # cd /home/software
# tar xzf qmail-1.03.tar.gz
# patch -p0 < qmail-103.patch # cd qmail-1.03
# make setup check # ./config-fast 163.net # cd /var/qmail/alias
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root # chmod 4 /var/qmail/alias/.qmail* # cp /var/qmail/boot/home /var/qmail/rc # chmod 755 /var/qmail/rc
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # ln -s /varl/qmail/bin/sendmail /usr/sbin/sendmail) # vi /var/qmail/rc
修改其中./Mailbox为./Maildir/
# mkdir /etc/qmail
# touch /etc/qmail/start
# echo \"csh -cf '/var/qmail/rc &'\">/etc/qmail/start # echo \"/etc/qmail/smtp.sh\">>/etc/qmail/start 2.2.9 安装ucspi-tcp
# cd /home/software
# tar zxvf ucspi-tcp-0.88.tar.gz
第 8 页 共 35 页
基于Qmail邮件服务器的解决方案- 9 -
# cd ucspi-tcp-0.88 # make
# make setup check
# touch /etc/qmail/smtp.sh
# echo \"/usr/local/bin/tcpserver -H -R –l 163.net -t 1 -c 100 -v -p -x/etc/qmail/tcp.smtp.cdb
-u 502 -g 501 0 smtp /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true | /var/qmail/bin/splogger &\" > /etc/qmail/smtp.sh
(注:502 and 501换成系统上的qmaild与nofiles的uid and gid的值。)
# chmod 755 /etc/qmail/smtp.sh # touch /etc/qmail/tcp.smtp
# echo \"127.0.0.1:allow,RELAYCLIENT=\"\\\"\\\" > /etc/qmail/tcp.smtp echo \":allow\" >> /etc/qmail/tcp.smtp
# /var/qmail/bin/tcprules /etc/qmail/tcp.smtp.cdb /etc/qmail/tcp.smtp.tmp < /etc/qmail/tcp.smtp
# echo “/etc/qmail/start” >> /etc/rc.d/rc.locad 2.2.10 安装vpopmail
# groupadd vchkpw
# useradd -g vchkpw -d /home/vpopmail vpopmail # echo \"/etc/qmail/start\">>/etc/rc.d/rc.local
如不与mysql数据库集成也可,不要修改vmysql.h文件,并去掉./configure中的相关选项
# tar vpopmail-5.2.tar.gz # cd vpopmail-5.2 # vi vmysql.h
根据你的MYSQL的设置,更改下面的配置
#define MYSQL_SERVER \"localhost\" #define MYSQL_USER \"root\"
#define MYSQL_PASSWD \"mysql2003\"
#define MYSQL_SERVER \"localhost\" #define MYSQL_USER \"root\"
#define MYSQL_PASSWD \"mysql2003\"
# ./configure --enable-default-domain=163.net --enable-passwd=n \\
--enable-tcprules-prog=/usr/local/bin/tcprules \\ --enable-ip-alias-dmains=n \\ --enable-defaultquota=n \\ --enable-sqwebmail-pass=y \\ --enable-roaming-users=y \\
第 9 页 共 35 页
基于Qmail邮件服务器的解决方案- 10 -
--enable-mysql=y \\
--enable-indir=/usr/include/mysql \\ --enable-libdir=/usr/lib/mysql # make
# make install-strip
# chmod 6755 /home/vpopmail/bin/vchkpw
# echo \" tcpserver -c 100 -v -l 163.net -U -H -R 0 pop3 /var/qmail/bin/qmail-popup 163.net /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
| /var/qmail/bin/splogger &\" > /etc/qmail/pop.sh # chmod 755 /etc/qmail/pop.sh
# echo \"/etc/qmail/pop.sh\">>/etc/qmail/start 添加域:
# /home/vpopmail/bin/vadddomain 163.net (回车:输入两遍密码) 添加用户:
# /home/vpopmail/vadduser mlfei29@163.net
2.2.11 zmlm and ezmlm-idx with MySQL support 注意:为了启用maillist的MySQL支持,必须首先: 建立mysql管理用户:(Ex:user:ezmlm,pass:ezmlm)
# mysql -u root –pmysql2003 >use mysql; >insert into values('localhost','ezmlm','','y','y','y','y','y','y','y','y','y','y','y','y','y', 'y'); >update user set password=password('ezmlm') where user='ezmlm'; >FLUSH PRIVILEGES; >exit;
建库:(Ex:database:ezmlm)
# mysqladmin -u root -pXXXXX create ezmlm
ezmlm-idx包含有对ezmlm的修正和补充,他们是一个整体。 #cd /home/software
# tar -zxvf ezmlm-0.53.tar.gz # tar -zxvf ezmlm-idx.0.40.tar.gz
# mv ezmlm-idx-0.40/* ezmlm-0.53/ # cd ezmlm-0.53 # patch < idx.patch
# make mysql #MySQL 支持 # make clean # make man
# make ch_GB #汉字GB2312支持
第 10 页 共 35 页
user 基于Qmail邮件服务器的解决方案- 11 -
# make setup
在你建立一个基于MySQL的maillist之前,你必须保证ezmlm库中已存在一个对应的表: Ex:你想建一个基于MySQL的maillist:testlist
# /usr/local/bin/ezmlm/ezmlm-mktab -d testlist | mysql -uezmlm -pezmlm -f ezmlm
这样就在ezmlm库中为testlist建立了一系列相关表格: +------------------------+ | Tables |
+------------------------+ | testlist |
| testlist_allow |
| testlist_allow_slog | | testlist_cookie | | testlist_deny |
| testlist_deny_slog | | testlist_digest |
| testlist_digest_cookie | | testlist_digest_mlog | | testlist_digest_slog | | testlist_mlog | | testlist_mod |
| testlist_mod_slog | | testlist_slog |
+------------------------+ 可以用一下命令察看!
# mysqlshow -u root -pXXXX ezmlm 2.2.12 安装autorespond
(对于qmailadmin-0.74版以上,必须使用2.0以上的版本) # tar zxvf autorespond-2.0.0.tar.gz # cd autorespond-2.0.0 # make
# make install
# cp autorespond /usr/local/bin 2.2.13 安装igenus
# cd /home/software
# cp igenus_2_20030511.tgz /var/www # cd /var/www # mkdir temp
# chown vpopmail.vchkpw temp
第 11 页 共 35 页
基于Qmail邮件服务器的解决方案- 12 -
# tar zxvf igenus_2_20030511.tgz
修改config/config_inc.conf文件。config_inc.conf是igenus的配置文件,必须正确设置,具体设置如下:
# vi /var/www/igenus
$CFG_BASEPATH = \"/var/www/igenus\";
$CFG_BASEPATH -----是iGNEUS webmail安装在系统的路径。
$CFG_MYSQL_HOST = 'localhost';
$CFG_MYSQL_HOST -----是mysql服务器的地址。
$CFG_MYSQL_USER = 'root';
$CFG_MYSQL_USER -----是mysql服务器的用户名。
$CFG_MYSQL_PASS = 'mysql2003';
$CFG_MYSQL_PASS -----是mysql服务器的密码,根据你的实际填写
$CFG_LANGUAGE = gb;
$CFG_LANGUAGE-----是系统默认语言,可有中英日可选。
$CFG_GMT = +8; // GMT time local $CFG_GMT----是时区设置,中国选+8。
$CFG_TEMP = $CFG_BASEPATH.\"/../temp\"; $CFG_TEMP----临时文件的位置。
修改默认登录域的设置,编辑login.php,查找以下字符,可设置你默认的邮件主机地址,可以设置多个。当然了,不改也可以的,略过这一步。
# vi /var/www/igenus/login.php
@
\" SIZE=\"19\" CLASS=\"myinput2\" STYLE='font-family:Tahoma'> ----删除@后面的句子,改变成以下:
设置apache相关的配置:
# vi /var/www/conf/httpd.conf
在AddType application/x-tar.tgz下面,添加以下内容: AddType application/x-httpd-php .php
LoadModule php4_module /var/www/modules/libphp4.so
第 12 页 共 35 页
基于Qmail邮件服务器的解决方案- 13 -
修改以下部分为:
DirectoryIndex index.php
DocumentRoot \"/var/www/igenus\" #vi /etc/rc.d/rc.local 添加: /var/www/bin/apachectl start (注:使它开机自动启动。) 更改php的设置: # vi /usr/local/lib/php.ini register_globals =off 更改为:register_globals =on 发送附件大小设置: upload_max_filesize = 10M ---默认是2M vi igenus/language/gb_inc.php文件如下: $LANG_SENDFORM_ATTACH_MESG = \"请注意文件的大小不要超过1MB,否则系统无法正确接收;如果附件超过1MB,请通过Foxmail或Outlook发信!\"; //$LANG_SENDFORM_ATTACH_MESG = \"请注意文件的大小不要超过10MB,否则系统无法正确接收!\"; 更改mysql数据库: # mysql -uroot -pmysql2003 在mysql中创建address表,具体表结构如下: # use vpopmail # create table address ( id int(11) unsigned NOT NULL auto_increment, pw_id int(5) unsigned NOT NULL default '0', name varchar() NOT NULL default '' , email varchar(128) NOT NULL default '', UNIQUE KEY id (id), KEY pw_id (pw_id) ); 修改原来的vpopmail表,方法如下: use vpopmail; alter table vpopmail drop primary key; alter table vpopmail add column pw_id int(5) NOT NULL primary key auto_increment; (注:添加address table,是因为要使用igenus中的个人通讯录,添加pw_id是因为igenus用它来标识用户的唯一性的,但vpopmail用的是pw_uid) 第 13 页 共 35 页 基于Qmail邮件服务器的解决方案- 14 - 2.2.14 安装qmailadmin-0.80 在安装之前先确认: 你是否已经安装了vpopmail,并使用vchkpw 。 是否已经安装ezmlm。 是否已经安装autorespond。 确认以上的工作已完成,可以开始安装qmailadmin。 # cd /home/software # tar zxvf qmail-setup.1.5.3.tar.gz # tar xvzf qmailadmin-1.0.6.tar.gz # cd qmailadmin-1.0.6 # cp iceblood/en-us qmailadmin-1.0.6/html/en # cp iceblood/en-us qmailadmin-1.0.6/html/en-us (注:以上两步,是为了汉化qmailadmin,用iceblood的qmail-setup的汉化文件。) # cd qmailadmin-1.0.6 #./configure --enable-htmldir=/var/www/igenus # make # make install-strip 2.2.15 测试 现在,重起你主机系统,你可以设置一下你的outlook或者foxmail.接受邮件了。也可以通过webmail访问你的mail系统了。 http://mail.163.net 通过webmail接受你的邮件信息 http://mail.163.net/cgi-bin/qmailadmin 通过web方式管理和添加用户了 2.2.16 小结 安装部分就算完成了,将重点讲qmail及其组件的工作原理和配置、管理等。 --enable-cgibindir=/var/www/cig-bin 三. qmail的工作原理和配置文件的设置 在这里,我们主要是介绍qmail的工作原理和配置文件的设置。让我们更好的分析问题和设施qmail。 3.1 qmail是什么 qmail包是在unix系统上的一个邮件程序。qmail程序是由dan bernstein开发出来的为标准的unix服务器提供邮件传输代理的(mail transfer agent,mta)功能的,用来替代 第 14 页 共 35 页 基于Qmail邮件服务器的解决方案- 15 - sendmail。qmail因特网主页http://www.qmail.org。 3.2 qmail和相关的服务 qmail提供了mta功能,但是客户要能看到自己的信件,还需要其他协议和软件。两种常见的远程用户取回他们消息的机制是邮政协议(post office protocal,pop3)和互交邮件访问协议(interactive mail access protocol,imap)。 综述: qmail系统包括几个可执行程序、配置文件、qmail工具和环境变量,这些彼此互相影响,共同提供邮件服务。 3.3 qmail投递邮件进程流程 qmail系统中有9个核心程序,这里简单的介绍一下。qmail-smtpd负责接收来自远程主机的邮件消息并将它们传送给qmail-queue处理。qmail-inject程序是用来接收本地产生的邮件消息并传送给qmail-queue程序。qmai-queue程序处理他们发来的邮件,移进邮件队列以便发送。一旦消息被成功的放在邮件队列中,就调用qmail-send程序来处理他。qmail-send检查邮件队列中每一个消息状态,前一次邮件请求失败的消息被识别,并决定它是临时失败还是永久的,临时失败会再次投递,永久失败将被送递到qmail-clean程序,被删除掉。也就是说,qmail-clean实用来清除永久失败的的邮件消息的。 qmail-send调用了qmail-lspawn 和qmail-rspawn程序。qmail-send判断邮件是发给谁的,发给本地的,就交给qmail-lspawn程序,再由qmail-local投送到本地邮件服务器。要是确定为远程主机,就调用qmail-rspawn程序,qmail-rspawn为每一个邮件消息的接受方决定目的的邮件服务器,再调用qmail-remote程序发送。 qmail的进程 qmail-send 第 15 页 共 35 页 基于Qmail邮件服务器的解决方案- 16 - splogger qmail qmail-lspawn qmaiil-rspawn qmail-clean qmail在任何时候都要求有五个程序在后台运行。这些核心的程序允许qmail扫描新邮件,并将他们发送到适当的目的地。 3.4 qmail实用工具程序 除了以上五个qmail进程外,进程和本地用户在处理和传输消息的过程中,都还会用到几个其他的qmail实用工具程序。如下: bouncesaying 允许用户将消息转发给程序或者程序不可用时反弹回信息 condredirect 允许用户将消息转发给程序,然后把消息转发到另一个地址 except 过去常用来修改一个调用程序的退出编码 forward 将消息转发给一个备用的邮件地址 maildir2mbox 将在maildir格式邮箱中的消息转换到一个标准的sendmail邮箱中 maildirwatch 产生一个maildir格式的邮箱 maildirwatch 监控一个用户的邮件目录并报告所有的新消息 preline 在将消息转发给相关程序前预处理这些消息 qbiff 当新消息到达后向用户终端显示器上写一个通知 qmail-clean 从qmail邮件队列中永远的移出无法到达的消息 qmail-inject 将新消息插入到qmail邮件队列中 qmail-local 向本地邮件系统上的用户投递消息 qmail-lspawn 由qmail-send调用以便向qmail-local程序转发消息 qmail-newmrh 用来从morercpthosts文件中创建qmail数据库 qmail-newn 从一个包含系统用户名和邮件名的ASCII文件表建立一个qmail用户文件 qmail-pop3d 接受pop3连接以便让用户阅读他们的邮箱 qmail-popup 用来验证pop3连接中的用户ID和密码 qmail-pw2u 将UNIX系统的用户id和密码转换成qmail-newn能用的一个表结构 qmail-qmtpd 接受远程主机发来的qmtp连接请求 qmail-qread 产生一个显示当前qmail邮件队列里消息的报告 qmail-qstat 产生一个报告来显示当前处在qmail投送状态下等待发送的消息数目 qmail-queue 将邮件消息排队等待投送 qmail-remote 将消息投送给远程邮件用户 qmail-rspawn 由qmail-send调用来向qmail-remote转发消息 qmail-send 尝试投送qmail邮件队列里的邮件消息 qmail-showctl 显示当前的qmail系统配置情况 qmail-smtpd 接收来自远程主机的smtp连接请求 qmail-start 初始化qmail的启动脚本 qmail-tcpok 用来清空qmail-remote中用到的tcp超时记录表 qmail-tcpto 显示当前的tcp超时记录表 qreceipt 用来会应对要求受到进行确认的消息 sendmail 用来将sendmail程序的功能复制到mta程序中 splogger 将消息插入系统登陆程序中 第 16 页 共 35 页 基于Qmail邮件服务器的解决方案- 17 - tcp-env 将网络连接的信息转换成unix环境变量 每一个qmail实用工具程序都在正确的处理和投递邮件消息中扮演不同的脚色。其中有一些只能qmail内核程序调用,其他的就可以由qmail的系统管理员用来处理消息并得到统计信息。还有一些可以被单个普通邮件用户来制定自己的邮件消息处理。 3.5 qmail环境变量 除了控制文件之外,qmail程序还能使用unix环境变量来控制他们的动作。多数的控制文件的值都能被一个相应设定的环境变量重载。如果该环境变量没有设定,就使用控制文件的值。qmail的环境变量是在qmail程序运行前就被设置好的。这是由一个包装程序完成的。常见的是tcpwrapper和tcpserver。本文就是用的tcpserver。 3.6 qmail控制文件 对于管理好qmail,这一步非常重要的。控制文件是qmail配置中的中心环节,它控制了qmail的操作性为。它位于/var/qmail/control目录下。每一个文件包含一个值,这个值定义了相应的qmail可执行程序的变量。qmail控制文件是定义了qmail参数的ASCII文本文件。大多数控制文件要求一个单一的文本值,该值可以在一行中输入。也有一些控制文件能包含多个值。在这种情况下,每一个值被输入到单独的一行中,每一行以一个标准的UNIX换行符(LF)结尾。还有一个要重点注意,就是控制文件的权限问题,推荐root可读写,其他只读。 #chmod 4 /var/qmail/control/* 以下将逐一介绍这个控制文件: -------- badmailfrom 这个控制文件实现拒收邮件功能的,每一个地址遵循前面说的规则,要单独一行。而且,不用重起qmail就能生效。 例如: mlfei29@163.com -----一个特定的用户 @jp.yahoo.com -----一台远程主机上的所有主机上的所有用户 @sina.com ----整个域中的邮件 ------ bouncefrom 用来定义用户名的,该用户名是出现在那些被退回给原始发件人的消息中,一般都是永久的投递失败消息。Bouncefrom默认值是MAILER-DAEMON,它通常是一个虚拟用户名,是一个真实用户的别名。你要是想给用户的退信消息中用另一个名字,可以用一下命令: # echo postmaster > /var/qmail/control/bouncefrom ---给改为postmaster. ------- bouncehost 制定了退信消息中的主机名,默认的值是me文件的主机名。 -------- concurrencylocal 定义了qmail能够同时运行的本地投送进程数。对于大型的邮件主机,非常重要。默认参数是10。就是允许多达10个本地邮件投递进程同时运行。这个控制文件的最大值是由qmail源代码中的conf-spawn变异参数设置的,这个编译参数默认值是120,最大值是255。 -------- concurrencyremote 第 17 页 共 35 页 基于Qmail邮件服务器的解决方案- 18 - 定义了qmail可以同时运行的远程投递进程数,默认值是20。它也是由conf-spawn设置的,默认值是120,最大可设255。但是要根据你的实际情况,因为运行进程要需要内存和硬盘的,设太大了小心服务器负载! ------- defaultdomain 默认域名,如果给本地的邮件用户发信,没有加上域名,qmail-inject会给他添加defaultdomain文件中的域名。如果设置了QMAILDEFAULTDOMAIN环境变量,就会重载defaultdomain控制文件的值。 --------- defaulthost 默认主机名,同一邮件服务器上,给本地用户发邮件,如果收信的用户地址没加域名,就会添加主机名。例如:邮件主机mail.163.net,给本地用户mlfei29@163.net发邮件,from:mlfei29 ,那么qmail就会给这个消息扩充为mlfei29@mail.163.net,qmail-send识别更容易了。通常,大家希望只看到域名@163.net,不看到主机名@mail.163.net,因而qmail就只让你看到了域名。 ------databytes 定义由qmail-smtpd接受到的邮件消息所允许的最大字节数,也就是发送和接受邮件的大小(本机上给本机用户出发和接受除外)。就是说,远程邮件主机和你用outlook、foxmail等远程的mua工具发信,都受它的。默认值是0,表示不。 # echo 10000000 >/var/qmail/control/databyte ---设置为10m,超过10m,将得到code 552,告知:其邮件大小超出了该邮件主机所能容忍的限度 ---- doublebouncehost 用来为那些经历了两次反弹后的消息指定主机名。默认是me文件的值 ---- doublebounceto 用来为那些经历了两次反弹后的消息指定用户名,默认是postmaster。 ---- envnoathost 是qmail-send用来为没有指定主机名的邮件接受方指定他的主机名的,默认是没有这个控制文件的,qmail-send使用me文件定义的 ---- helohost 指定在qmail-remote与远程邮件服务器的smtp会话中用到的主机名。如果helohost控制文件没有给出,qmail-remote使用me文件的值。 ---- idhost 指定了用来在消息中产生message-ID:头字段得主机名,默认qmail-inject用me文件的值。 ---- localiphost 用来为邮件消息指定本地地址的,内容是邮件主机的ip地址。但是它用在dns上就会有问题。建议不要设置。 ---- locals 指定邮件本地地址,不存在,qmail-send就假定me文件的值为邮件主机的唯一可用本地邮件主机。 ---- me 用来指定本地邮件服务器的主机名,最重要的控制文件,如果没有,qmail将不会运行。 me控制文件通常是靠运行qmail配置子目录下的config脚本文件来建立的,config脚本自动判断邮件服务器的dns域名,并产生一个适当的控制文件(me ,locals,rcpthhosts)。如果某种原因你的邮件服务器无法连通dns服务器,可以手工运行configfast来指定邮件服务器主机名: 第 18 页 共 35 页 基于Qmail邮件服务器的解决方案- 19 - # /var/qmail/configure/config-fast mail.163.net ---- plusdomain 用来将一个域名指定成任何一个以一个加号(+)结尾的地址。缺省的情况下,出现在me文件的域名被添加到任何一个以加号结尾的邮件地址中。 ---- queuelifetime 用来指定一个消息在他被删除前,可以在邮件列表中保存的时间秒数。默认是604800,当投递失败的消息超过规定的时间,将被从邮件队列中删除。 ---- rcphosts 定义了qmail可以接收消息的主机和域名。 不过因为rcpthosts中的域名最好不要超过50行,多出的添加到morercpthosts中。 ---- morercpthosts 用来指定qmail将要为其接受消息的额外的主机和域名。 ---- smtpgreeting 用来指定SMTP连接的欢迎标志 ,默认是用me文件的主机名。 例如:smtpgreeting值为 welcome connect to out open relay mail server –mail.163.net 那么建立一个smtp连接的时候将会看到如下信息: Trying 198.160.x.x... Connected to mail.96633.net Escape characteris ^]. 220 welcome connect to out open relay mail server –mail.163.net ESMTP ---- smtproutes 用来指定能够被用来将邮件投送给特定目的地的静态smtp连接的。 smtprouter行格式如下: host : relay 其中host可以是一个主机名或者域名,这个值将被重定向到有relay所定义的一个特定的邮件主机上。 举例: beijing.163.net :shanghai.163.net 163.net : :tianjin. 163.net :2000 第一行,定义了任何到beijing.163.net的消息重定向到shanghai. 163.net 第二行,强制qmail对任何以163.net结尾的地址进行dns查询。 第三行,通过不指定第一个参数,任何不在前两行范围内的消息都会被转发到邮件服务器tianjin.96633.net。同时,还用2000端口替代标准的smtp tcp的25端口。这个技术常常用在通过一个防火墙连接到internet邮件中继中。 注意:smtproutes可定义许多特定的smtp路由。需要主机的是他的地址列表,qmail会按照smtproutes文件中出现的顺序,来处理这些地址。有时顺序不对,会引起邮件循环。 ---- timeoutconnect 用来指定qmail-remote将要等待的一个时间秒数。也就是说等待远程smtp服务器接受本地的一个smtp请求响应的时间,默认是60秒。对于质量不好的网络,可以适当调节。 第 19 页 共 35 页 基于Qmail邮件服务器的解决方案- 20 - ---- timeoutremote 用来指定qmail-smtpd等待远程SMTP主机发送数据的时间线。默认的情况下,如果连接建立后1200秒内没有接受到远程SMTP主机的任何信息,那么将关闭这个连接。 ---- timeoutsmtpd 用来指定qmail-smtpd等待远程smtp客户端连接的时间秒数。默认是1200,超过这个时间,连接取消。 ---- virtualdomains 让qmail接受本地邮件以外,还接受该文件中指定的域或者邮件地址,就是常说的虚拟域支持。 以上说的一些控制文件,qmail默认不是都有的,只有一些必须要得。根据你的mail不同的使用情况,自己选择来建立和设置。 3.7系统别名 qmail的系统别名和sendmail不太一样,没有用一个大文件来包含所有的。而是建立了许多的别名文件。 在/var/qmail/alias中,格式如下: qmail-alias ---alias是要建立的别名。 举例:要给postmaster建立一个别名文件,使寄给postmaster的邮件都给mlfei29 echo mlfei29 > /var/qmail/alias/.qmail-postmaster 3.8用户别名 除了系统文件,。Qmail还可以支持的用户系统配置文件。在用户的家目录中。 例如,在用户mlfei29目录下,建立一个mlfei29-sales的邮件列表,就可以建立 .qmail-sales文件,在文件中添加邮件地址,每个一行。这样发给mlfei29-sales的邮件,就会给任何一个地址copy一份。 3.9改变MUA程序接口 qmail程序包含了一个可执行程序,该程序替代了unix标准的sendmail程序。想用qmail作为mail服务器,必须用qmail的sendmail包装程序替代现有的sendmail程序。 # mv /usr/sbin/sendmail /usr/sbin/sendmail.bak # chmod 0 /usr/sbin/sendmail.bak # ln –s /var/qmail/bin/sendmail /usr/sbin/sendmail 3.10建立qmailsmtp功能 传统上使用inetd程序来监听网络,但是缺点很多。本文中用ucspi-tcp包的tcpserver服务来代替它。参考了iceblood的qmail-setup.1.5.3的脚本文件,是这样完成的: 1、 建立/etc/qmail目录,建立了smtp.sh and pop3.sh启动脚本 2、 建立了tcp.smtp 和tcp.smtp.cdb文件。 具体是这样做的: 第 20 页 共 35 页 基于Qmail邮件服务器的解决方案- 21 - #echo “/etc/qmail/start” >> /etc/rc.d/rc.locad --- 开机执行/etc/qmail/start # touch /etc/qmail/start --- 建立执行文件 # touch /etc/qmail/smtp --- 建立smtp脚本文件 # touch /etc/qmail/pop --- 建立pop脚本文件 # touch /etc/qmail/tcp.smtp ---建立tcpserver的连接规则文件 # echo \"csh -cf '/var/qmail/rc &'\">/etc/qmail/start -- 开机启动qmail # echo \"/etc/qmail/smtp.sh\">>/etc/qmail/start -- 开机执行smtp.sh smtp脚本内容: /usr/local/bin/tcpserver -H -R –l 163.net -t 1 -c 100 -v -p -x/etc/qmail/tcp.smtp.cdb -u 502 -g 501 0 smtp /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true | /var/qmail/bin/splogger & (注:502 and 501换成系统上的qmaild与nofiles的uid and gid的值。) pop脚本内容: /usr/local/bin/tcpserver -c 100 -v -l 163.net -U -H -R 0 pop3 /var/qmail/bin/qmail-popup 163.net /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger & tcp.smtp脚本内容 127.0.0.1:allow,RELAYCLIENT=\" \" :allow # /var/qmail/bin/tcprules /etc/qmail/tcp.smtp.cdb /etc/qmail/tcp.smtp.tmp < /etc/qmail/tcp.smtp 以上配置,可以做到开机自动启动了。 3.11小结 到这里,qmail这一部分就介绍完了。回顾一下: 我们明白了qmail的工作流程。 创建了基本的qmail控制文件。 在安装时,创建了必要的qmail系统别名。 决定了本地邮件的投递方式,安装时用的maildir。 创建了qmail启动脚本。 改变了mua的程序接口。 建立了qmail的smtp功能。 简单的讲了qmail配置文件.qmail。 第 21 页 共 35 页 基于Qmail邮件服务器的解决方案- 22 - 四. ucspi-tcp的原理和设置 Qmail的开发者dan Bernstein 开发了ucspi-tcp(UNIX客户-服务器程序端口)包来取代inetd程序。Ucspi格式定义了一种程序来交换数据的方法,主要体现出三个优点: 1、 ucspi端口于底层的通讯介质。 2、 ucspi允许shell脚本程序利用网络的互联。 3、 ucspi程序建立了unix环境变量,这些变量定义了可以被程序和用户使用的网络信息。 Ucspi-tcp使用称为tool的程序在应用程序之间建立连接。有两种类型的ucspi tool ---客户tool(tcpclient)和服务器tool(tcpserver)。 Ucspi-tcp的tcpserver程序就是替代unix的inetd程序的,有如下优点: 1、他能够把来自服务器端的所有输入和输出都记到一个文件中。 2、他能提供访问控制特征,拒绝或者允许来自客户端的连接。 3、它包含了并发,防止使unix系统过载。 Tcpserver程序通过使用管理员配置的一个hash规则库提供对访问的控制。 Tcpserver 命令行的格式是: tcpserver options host port application host和prot参数制定了将要运行应用程序的本地服务器的主机名和端口号。Host参数可以是localhos、主机ip address、或者是主机的完整域名。Port参数可以是一个数字或者是/etc/services文件中的一个tcp端口的名字,例如:smtp。Application是连接建立后要传输给的应用程序。 Options参数定义了tcpserver程序的行为。有三种类型的选项: 常规选项------定义用于ucspi tool的选项。 连接选项-----处理到达的连接请求。 数据收集选项-----如何获得在传给应用程序的unix环境变量中使用信息。 Tcpserver连接选项(1) ------------------------------------------------------------------------------------------------------------- 选项 描述 -------------------------------------------------------------------------------------------------------------- -b n 允许n个连接请求的存储 -B banner 在连接建立后将banner写到网络连接上 -c n 不接受多于n个同时连接 -d 当主机相应较慢时延迟向远程主机发送数据 -D 从不延迟向远程主机发送数据 -g gid 当接受连接准备完成后改变活动组ID为gid -l 打印本地端口号到stdout -o 在连接的分组中不改变ip选项 -u uid 当接受连接准备完成后改变活动用户ID为uid -O 删除ip选项为分组寻找路径 -U 相当于-g $GID –u UID 第 22 页 共 35 页 基于Qmail邮件服务器的解决方案- 23 - -x db 使用hash数据库db中的规则来接受或拒绝远程客户端的访问 -X 当由-x选项指定的数据库不存在时允许连接 -------------------------------------------------------------------------------------------------------- tcpserver程序可以使用的数据收集选项(2) ---------------------------------------------------------------------------------------------------------- 选项 描述 ----------------------------------------------------------------------------------------------------------- -h 使用dns查找远程主机 -H 不使用dns查找远程主机名。你必须对端口53使用此选项 -l localhost 不使用dns查找本地服务器主机名,而使用localhost -p 怀疑。使用反向dns 查找远程主机ip地址,将其与主机名相比较。如果不匹配,删除环境变量$tcpremotehost -r 试图从远程主机获得$tcpremoteinfi (默认) -R 不试图从远程主机获得$tcpremoteinfo数据。你必须为端口53和端口113使用这一选项 -t n 在n秒之后停止试图连接到$tcpremoteinfo数据。默认26 ---------------------------------------------------------------------------------------------------------------- 有几个unix环境变量tcpserver试图为其接受数据。这些环境变量帮助应用程序处理有关的网络间接信息。 Tcpserver的unix环境变量(3) -------------------------------------------------------------------------------------------------------- 变量 描述 ---------------------------------------------------------------------------------------------------------- $PROTO 使用的协议(默认为TCP) $TCPLOCALIP 本机的IP地址 $TCPLOCALPORT 本地TCP端口号 $TCPLOCALHOST 本地主机的DNS查询值 $TCPREMOTEIP 远程客户端的IP地址 $TCPREMOTEPROT 远程客户端的TCP端口号 $TCPREMOTEHOST 远程主机的DNS查询值 $TCPREMOTEINFO 远程客户端的用户名 --------------------------------------------------------------------------------------------------- 当接受了一个远程客户端的连接,tcpserver就是图为应用程序提供环境变量,当他不能为一个特定的变量接受信息时,tcpserver不设置变量。 Tcprules程序 tcprules程序是创建可以与应用程序连接的规则。是手工创建规则,来制定接受和拒绝单个地址、多个ip地址、全部网络地址的访问。规则在一个文本中创建,每行一条规则。 第 23 页 共 35 页 基于Qmail邮件服务器的解决方案- 24 - 文本建立后,使用cdb数据库格式将其转变成一个hash数据库。这使得tcpserver程序能够在远程客户向服务器请求连接时动态处理规则。 规则以这样的格式创建: address :action,varible address是和到达连接的值相匹配的。此参数的几种格式都是基于表(3)环境变量的,可以使用这些变量的组合来创建有效的地址。下面列出了tcpserver能识别的不同地址: tcpserver规则的地址格式 ---------------------------------------------------------------------------------------------------------------- 地址 示例 ----------------------------------------------------------------------------------------------------------------- $tcpremoteinfo@tcpremoteip mlf@[192.168.3.11] $tcpremoteinfo@=$tcpremotehost mlf@96633.net $tcpremoteip 192.168.3.11 =$tcpremotehost mail.163.net 部分$tcpremoteip 192.168 部分$tcpremotehost 163.net 空 任何地址 ---------------------------------------------------------------------------------------------------------------------- action有两个选项:allow and deny。 除了动作以外,其他的以逗号分开的环境变量可以添加到action中,实现tcpserver在特定的远程客户连接请求时设置环境变量。这一特性可以实现选择转发等功能。 举几个例子吧: -------------------------------------------------------------------------------------------------------------------- 规则 描述 --------------------------------------------------------------------------------------------------------------------- 192.168.0.1:deny 拒绝192.168.0.1的任何连接 192.168.3:allow 允许192.168.3.0上的客户任何连接 192.168.4.1-11:allow 允许192.168.4.1-192.168.44.11上的客户任何连接 :deny 拒绝任何连接 mlfei29@163.net 允许mlfei29@163.net 的连接 192.168.3:allow,RELAYCLIENT=” “ 接受192.168.3.0网络上的任何连接,设置环境变量RELAYCLIENT为空字符串。 ------------------------------------------------------------------------------------------------------------------ 本文建立SMTP转信规则[除本机外拒绝任何主机转发邮件,但不连接。] #vi /etc/tcp.smtp 127.0.0.1:allow,RELAYCLIENT=\"\" :allow 建立完文本文件,就用tcprules命令生成库文件,格式如下: 第 24 页 共 35 页 基于Qmail邮件服务器的解决方案- 25 - tcprules database tmpfile 本文中是这样的: # /usr/local/bin/tcprules /etc/qmail/tcp.smtp.cdb /etc/qmail/tcp.smtp.tmp 这样,就生成了/etc/qmail/tcp.smtp.cdb文件了。tcp.smtp.cd表示适用于tcp协议,专用于smtp 协议,文件是cdb数据库格式。 下一步,就是告诉tcpserver如何应用它,本文的如下启动smtp服务: /usr/local/bin/tcpserver -H -R -l 0 -t 1 -c 100 -v -p -x /etc/qmail/tcp.smtp.cdb -u QMAILDUID -g NOFILESGID 0 smtp /usr/local/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /usr/bin/true | /usr/local/qmail/bin/splogger & # /usr/local/qmail/bin/tcpserver -c 100 -v -l $_DOMAIN -U -H -R 0 pop3 /usr/local/qmail/bin/qmail-popup domain /home/vpopmail/bin/vchkpw /usr/local/qmail/bin/qmail-pop3d Maildir 2>&1 | /usr/local/qmail/bin/splogger & 到这里,ucspi-tcp的tcpserver就设制完成了。 五. vpopmail和qmailadmin对用户的管理 5.1目的 本文重点讨论vpopmail和qmailadmin的配置和应用,通过vpopmail和qmailadmin,来对用户进行设置和管理。 5.2 vpopmail功能简介 在一台邮件服务器的上实现多个域的邮件系统是qmail用户非常关心的问题之一,为了解决这个问题,Inter7开发了遵从GPL版权的vpopmail(vchkpw)来使用户方便地在一台qmail邮件服务器上实现邮件虚拟域和非系统账号。其具有一下特点: 1、 所有的qmail配置及数据文件都提供了具有详细说明的修改的命令。 2、 仅仅占用一个系统账号,所有的相关进程运行在单个UID/GID之下。 3、 支持基于named和IP的虚拟域。安全的使用NFS之上。 4、 通过使用三级平衡树填充技术实现动态的为十个到一千万用户创建邮件目录。 5、 根据真实世界的管理需求提供了可配置的记录功能。 6、 支持Oracle, Sybase, Mysql, LDAP, /etc/passwd, /etc/shadow和缺省的cdb用户认证信息存储方式。 7、 直接传递数据到Maildir,来和qmail-pop3d, .qmail文件或其他任何Maildir程序。不需要为虚拟域提供很多.qmail文件,每个域在vpopmail用户主目录下拥有自己的目录。每个域有的密码文件。 8、 详细说明的命令程序能被用在脚本文件及远程管理。所有的vpopmail特性的C库都有详细的说明文档。 第 25 页 共 35 页 基于Qmail邮件服务器的解决方案- 26 - 而且提供了下面的软件包来增强qmail+vpopmail的特性: 1、 QmailAdmin 基于web的vpopmail管理工具。 2、 vqsignup一个基于vpopmail管理工具的cgi程序,其允许用户自己申请email账号。 3、 Courier IMAP IMAP服务器。 4、 qWebMail 基于web的email客户程序。 5.3 vpopmail的安装设置 在安装vpopmail的时候,设置了以下选项: # ./configure --enable-default-domain=163.net --enable-passwd=n \\ --enable-tcprules-prog=/usr/local/bin/tcprules \\ --enable-ip-alias-dmains=n \\ --enable-hardquota=10500000 \\ --enable-sqwebmail-pass=y \\ --enable-roaming-users=y \\ --enable-mysql=y \\ --enable-indir=/usr/include/mysql \\ --enable-libdir=/usr/lib/mysql 其中的详细意思是: --enable-default-domain=163.net 设定缺省域名为163.net 推荐将所有的域都设置为虚拟域,并且挑选一个作为缺省域。对于缺省域的用户,其通过接收邮件时,只需要在用户名中设置其邮件用户名即可,而对于其他非缺省用户,则需要将用户名设置为 mlfei29@163.net的格式才能通过pop3收取信件。 --enable-passwd=n 允许或禁止/etc/passwd(或shadow)认证。覆盖自动配置,缺省的配置程序将自动检测 系统是使用passwd或shadow密码,通过设置该选项为no,可以禁止所有的/etc/passwd账号认证。也可以说,是禁止系统用户为邮件用户。 --enable-tcprules-prog=/usr/local/bin/tcprules tcprules程序的安装位置,缺省为/usr/local/bin --enable-ip-alias-dmains=n 允许通过反向解析来查看虚拟域。缺省情况下,每个域使用基于虚拟域的名字,也就是用户必须在pop3用户名中提供相应的域信息,也就是mlfei29@163.net当然也可以使用enable-default-domain配置选项来覆盖该要求。Vpopmail同样支持基于IP地址的虚拟域,若该选项打开则用户不需要在pop3用户名中提供@ --enable-hardquota=10500000 若磁盘限额超出,将拒绝接受该用户的新邮件,并返回一封拒绝信息邮件,其中的信息可以 第 26 页 共 35 页 基于Qmail邮件服务器的解决方案- 27 - 定制。 --enable-sqwebmail-pass=y 支持sqwebmail的认证,为了以后也可能用sqwebmail,我选了yes。 --enable-roaming-users=y 当pop3认证通过后,是否打开对该用户的邮件转发(mail relay),缺省是关闭的。若设置该选项为y,当某个用户通过了pop3认证,则将其IP地址加入许可通过该邮件服务器进行relay的列表中。一个名为clearopensmtp的cronjob程序可以用来实现在这一段时间以后从允许转发邮件地址列表中将该IP地址清除。这个选项要求以-x /etc/tcp.smtp.cdb选项来使用tcpserver运行smtp服务器。 --enable-mysql=y 使用mysql,缺省是no.允许通过将账号存放在mysql数据库中来认证用户。 --enable-indir=/usr/include/mysql sql头文件的目录。 --enable-libdir=/usr/lib/mysql 库文件libmysqlclient.a的目录。 vpopmail还有其他的很多选想,这里就不介绍了,大家可以通过./configure –help察看,也可以看install and readme文件。大家也可以通过man 来察看。 5.4 vpopmail使用 vpopmail的功能命令都放在了/home/vpopmail/bin的目录下,我们在这里介绍一下: vadddomain 163.net -----添加一个虚拟域 vadduser mlfei29@163.net 添加一个某个域的用户 clearopensmtp 从ip地址认证表中清除过期的ip地址。但你在configure中设置--enable-roaming-users=y时,当某个用户通过了pop3认证,则将其IP地址加入许可通过该邮件服务器进行relay的列表中。clearopensmtp的cronjob程序就是用来实现在这一段时间以后从允许转发邮件地址列表中将该IP地址清除。每一个ip添加进来,都会被加上一个时间标签,默认是3个小时。三个小时后,被clearopensmtp清除。 Vaddaliasdomain 给一个域名设置一个别名,当你有一个域名163.net,想给这个域添加一个别名163.com,使mlfei29@163.net和mlfei29@163.com是一个用户,命令格式是: #.vadddliasdomain 163.com 163.net ---前面是别名,后面是已经存在的域名。 vdeldomain 删除一个域: # vdeldomain 163.com 第 27 页 共 35 页 基于Qmail邮件服务器的解决方案- 28 - vdeluser 删除一个用户: #vdeluser mlfei29@163.net vdelolduser 删除过期的认证表中的用户,默认是3个小时。 vdominfo 先是虚拟域信息,可以看帮助: # vdominfo –help 很简单 vpasswd 更改一个用户的密码 vuserinof 显示一个用户的信息 vsetuserquota 设置一个域或者一个用户的空间大小: #vsetuserquota mlfei29@163.net 10500000 ---设置这个用户的空间为10m。 #vsetuserquota 163.net 10500000 ---设置这个域的所有的用户空间都为10m。 以上的都是一些常用到的命令,或者是和本系统设置有关的。还有一些命令,用户认证模式不同和由系统调用,就不介绍了。 5.5 qmailadmin的介绍 这里在vpopmail实现qmail邮件账户的数据库管理的基础上讨论如何通过qmailadmin实现对存放在数据库中的虚拟域邮件用户账号进行web管理。通过qmailadmin管理员可以通过web方式实现添加删除用户及修改用户密码等邮件用户的管理,而用户可以自行修改自己的密码。 5.6 qmailadmin的使用 1、 登陆 通过vpopmail中的vadddomain命令,我们添加了一个域,默认的系统管理用户是postmaster,密码自己设定了。在浏览器中输入:http://mail.163.net/cgi-bin/qmailadmin,出现登陆界面。其中domain name一栏要填写需要管理的虚拟域的名字,password一栏要填写该虚拟域的postmaster的password。(邮件管理员的密码,如果忘记,则需要使用/home/vpopmai/bin/vpasswd postmaster@virtualdomain.com来修改)。 2、邮件账号管理 可以通过索引查找用户。 第 28 页 共 35 页 基于Qmail邮件服务器的解决方案- 29 - 可以通过修改更改用户名和设立转发邮件。 通过删除用户按钮删除用户。 可以通过catchall按钮来设置一个用户,接受所有用户的信件。也可以通过最下面的选项来取消和设置远程接受邮件地址。 3、 别名设立界面 这个界面是显示当前定义的别名列表,选择\"add new alias\"添加别名: 4、转发管理界面 这里显示定义的所有的邮件转发列表,当选择\"添加新的转发\"则进入转发添加界面: \"转发的邮件地址\"定义要转发的目的地址,“本地\"则定义本地账号的名。 5、自动回复管理界面 该界面显示了已经定义的了的自动回复,自动回复管理界面如下: \"自动回复名字\"用来指定要进行自动回复的邮件地址,\"转发拷贝到邮件地址\"用来定义当自动回复地址时,同时将信件转发到的邮件地址。 5.7小结 通过以上功能,基本上就可以对一个邮件服务进行简单的管理了。无论是通过vpopmail的工具命令还是qmailadmin都可以完成用户的管理。添加域的时候,只能通过vpopmail的工具命令。有一点要注意,就是qmailadmin的安全性。就是防止postmaster密码的泄露。telnet or ssh方式,可以通过机器的防火墙来实现登陆ip 地址的。Qmailadmin建议就不要用80端口了,可以在apache中设置。最好编译apache的时候,加上通过mod_limitipconn模块来apache的并发连接数,可以多线程攻击,或通过多线程web方式穷举法来破解密码。 六. 如何有选择地清理不需要的Mail Queue 6.1处理队列中的邮件 如想在队列中的邮件马上传递,可以 # kill -HUP qmail-send 要删除队列中的邮件 1) 停止QMAIL 2) find /var/qmail/queue/$i -type f -exec rm {} ; 3) 重启QMAIL. 队列中的邮件包含在 以下目录中 /var/qmail/queue/{info,mess,remote,local}/hash/#number 第 29 页 共 35 页 基于Qmail邮件服务器的解决方案- 30 - 6.2 在邮件队列中快速删除从一个地方发过来但又不存在的邮件 设bad.jite.com是这个域。可以键入以下命令 # echo # > ~alias/.qmail-baddomain-default # echo bad.jite.com:alias-baddomain>> /var/qmail/control/virtualdomains # echo bad.jite.com:127.0.0.1 >> /var/qmail/control/smtproutes 然后运行/var/qmail/bin/qmail-tcpok,给qmail-send 一个HUP信号 6.3 删除队列中的大量广告信息 先停止QMAIL. 1) 停止qmail, qmail-smtpd 2) 在以下默认目录下 /var/qmail/queue/mess find /var/qmail/queue/mess -type f -exec grep \"^Subject: asfafasfas\" {} ; -print -exec rm {} ; 3) 运行queue-fix清除相关文件, 4) 重启qmail. 七.具体的功能与实现 通过qmailadmin管理员可以通过web方式实现添加删除用户及修改用户密码等邮件用户的管理,而用户可以自行修改自己的密码。我们添加了一个域,默认的系统管理用户是postmaster,密码自己设定了 管理者界面 第 30 页 共 35 页 基于Qmail邮件服务器的解决方案- 31 - 在管理者页面中有主菜单和快捷链接,提供给管理者一个管理用户的基本界面。 管理者对邮件帐号的管理 管理者在管理者页面进入邮件帐号时,可以通过索引查找用户,修改更改用户名和设立转发邮件,删除用户按钮删除用户, 还可以通过catchall按钮来设置一个用户,接受所有用户的信件,也可以通过最下面的选项来取消和设置远程接受邮件地址。 创建邮件帐号 管理者通过创建新的邮件帐号来创建新的用户。在创建邮件帐号中填入邮件帐号,密码和真实姓名,就可以创建一个新的用户。 第 31 页 共 35 页 基于Qmail邮件服务器的解决方案- 32 - 例如创建名为mlfei的用户,可以进行修改用户和删除帐号的操作,界面如下图: 对用户名为mlfei@k99shixi.3322.org的用户进行修改 第 32 页 共 35 页 基于Qmail邮件服务器的解决方案- 33 - 普通用户通过 sqwebmail进入用户界面,用户进行基本的邮件收发操作 第 33 页 共 35 页 基于Qmail邮件服务器的解决方案- 34 - 八.总结 Qmail是可以完全替代Sendmail-binmail体系的新一代UNIX邮件系统,它也是一个基于UNIX操作系统的Internet邮件传输机构( Internet Mail Transfer Agent 简称MTA)。它采用标准的简单邮件传输协议(Simple Mail Transfer Protocol 简称SMTP)与Internet上其他MTA交换信息。总之,邮件服务器不断发展的新功能和新特点都是从最终用户的需求出发的,这既是邮件服务器技术不断发展的标志,也是邮件服务器市场不断成熟的重要标志。 九.结束语 这次毕业设计使我们受益非浅,以前的学习主要重视的是理论的学习,而这次毕业设计将理论与实践很好的结合在一起,对各种知识起到了融会贯通的作用,使学过的知识得到了生动的体现。并且在设计的过程中,学到了很多书本上没有的知识。同时,对和同学们的互相协作也有很深的体会。当然,这次毕业设计也让我们看到了自己的不足,动手能力的欠缺,知识不完善,这都需要我们在今后的学习工作中一一克服,使得自己今后能够取得更佳的成果。 参考文献 《qmail 实用指南》 凌云志 雷晓荣 中国电力出版社 2001-10-1 《qmail 全功略》 黄晓华 人民邮电出版社 2001-12-1 《qmail 实用技术指南》 原书名: Running qmail 原出版社 Sams/Macmillan/Pearson 第 34 页 共 35 页 基于Qmail邮件服务器的解决方案- 35 - 作者: Richard Blun 译者: 赖斌 王宝良 出版社: 清华大学出版社 2001-7-1 UNIX网络编程(卷一)(第二版) (UNIX Network Programming) W.Richard Stevens 2001-6 UNIX系统管理员大全 (美)Yves Lapage Paul Larrera 2000-5 UNIX 网络原理与应用 欧宗生 1997-8 第 35 页 共 35 页 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务