免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: b.s.d
打印 上一主题 下一主题

[FreeBSD] [发表]FreeBSD全能服务器安装手册v0.0.7 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2006-06-20 11:57 |只看该作者
当邮件服务器为用户提供连接服务的时候, 系统资源的占用情况与通信连接 数量成正比。 一些邮件服务器提供了设置界面, 可以通过参数对接入连接进行控制。

3) 通信带宽管理能力

当邮件服务器与外界连接传送信息的时候, 可能会占用大量的通信信道带宽。为了防止邮件服务器对带宽的过量占用, 一些邮件服务器可以对所占用的最大带宽进行设置。

九、 安全防护能力

邮件服务器的安全防护能力, 可以归纳为以下十三个方面的问题:

1) 用户身份认证能力

2) 合法客户网址设定能力

3) 抵制垃圾邮件的能力

4) 邮件内容过滤能力

5) 抵制商业邮件转发能力

6) 支持穿越防火墙的邮件服务能力

7) 支持代理服务器的能力

8) 支持堡垒主机的能力

9) 支持备份邮件服务器的能力

10) 检测和杀灭邮件病毒的能力

11) 抵制"拒绝服务"攻击的能力

12) 信息传输加密能力

13) 灾难恢复能力

十、 系统管理能力

对于邮件服务器管理员来说, 系统管理的前提首先是对系统工作情况的全面掌握, 然后是对系统运行性能的动态调整。 因此,产品至少应该提供以下三个方面的能力。

1) 审计能力

所谓审计 (Audit), 就是可以按照管理员选择的内容, 对邮件服务器提供的各种服 务连续进行工作情况记录, 针形成系统运行审计历史记录文件, 供管理员分析系统工作情况, 查找系 统故障原因使用。

2) 日志能力

日志 (Log) 主要是针对用户使用邮件服务器的情况连续进行记录。 邮件服务器所提供的日志功能, 应该允 许管理员可以选择日志监察对象。
3) 实时监控与性能调整能力

使用实时监控功能, 管理员可以对当前邮件服务器正在运行的各种服务进行实时 工作情况观察, 动态调整系统控制参数。

十一、版本、升级与售后服务能力
邮件服务器是一个通过网络为多用户服务的软件系统, 开发厂商不但根据所满足业务量的不同, 推出类型不同的版本, 还随着网络技术的进步不断发布产品的升级版本。

1) 版本

邮件服务器的不同类型版本, 主要针对不同业务量的应用。 如果按照所支持的用户 数量分类, 可以分为限用户数版本和不限用户数版本, 前者往往又分为几个档次。 如果 按照系统运行性能区分, 常分为标准版本 (Standard Edition) 和企业版本( Enterprise Edition), 前者适用于中小规模机构, 后者适用于大型机构或 Internet 服务供应商 ISP, 而且还可能具备支持多 CPU 处理的能力。 如果按照所运行的系统平台分类, 又常常分为 UNIX 系统版本和 Windows NT 系统版本。 另外, 各家厂商为了推销自己的产品, 还常常有供免费试用的版本。 这些版本往往在内部设置了试用期。超过了试用期就停止运行。

2) 升级支持

在选择邮件服务器的时候, 厂家对产品的升级支持也是一个非常重要的因素。同一产 品的不同类型版本, 在版本号、功能和升级速度方面常常不同。用户数量多的主流产品版本往往能够得到及时的升级。选择这样的产品, 才能够不断享受到开发厂家提供的新功能。

3) 售后服务支持

由于邮件服务器是一个软件技术产品, 厂家的售后服务支持能力非常重要。选择产品的时候, 要注意它是否有完备的用户手册和技术手册, 厂家能够提供什么方式和种类的售后技术服务支持。当产品升级的时候, 如何得到升级版本。

十二、 价格

价格在任何时候都是选择产品不可忽视的因素。 这涉及到成本核算。 一些邮件服务器产品价位较高, 有时并不仅仅是因为它的功能。那些同时支持在多种系统平台运行的产品, 往往价格高于在单一系统平台运行的产品。为了节省不必要的支出, 应该根据业务的实际需求选择产品,对产品的标准价格、增加用户许可的代价和产品升级价格等因素综合考虑。


        最近几年来,基于Web的免费Email系统非常流行,当前,几个著名的免费Email网站基本上已经成为大多数人的选择,建立单纯提供免费Email服务的站点不再像以前那样受到热烈欢迎,但是提供Web界面的Email服务已经成为了一个商业站点为其注册成员提供的基本服务之一。

        一个Email系统可以分为服务器端和客户端,Web界面的Email系统则是将Email客户放在了Web服务器端,因此Email系统所需要实现的是一个Web界面的Email客户。然而,由于这个Email系统要求用户数量较大,因此对于Email服务器也有特定的要求。


操作系统和用户数据库

        由于提供Web和Email服务要求稳定性和性能特别高,因此一般都使用Unix作为服务器的操作系统,例如hotmail使用FreeBSD和Solaris,国内163等站点也是BSD系列。然而,Unix的标准Email系统也不合适用做这种大容量服务。有的Unix系统,例如当前版本的Linux,其用户标识只有16位,因此用户数量最多只能有64K,即使Unix系统本身支持32位的用户标识,考虑到性能因素,单台服务器支持的用户数量也不要超过10万。

        为了具有支持更多用户的可扩展性,一般采用多台服务器同时提供服务,虽然此时仍然可以使用标准Unix用户作为Email用户,但考虑到安全性、性能以及可管理性,一般采用非Unix系统用户来作为Email用户。而保存用户数据通常采用支持网络访问的数据库形式,一般常用的有LDAP、标准数据库、以及Email系统自己实现的用户数据库。其中,LDAP由于是提供目录服务的标准,因此应该为最佳的选择,其常用的开放源代码实现为OpenLDAP;而标准数据库由于实现方便、可扩展性强,其中在Internet上最常用的为MySQL;此外,也有使用其他方式的实现。


邮件的保存

        由于用户数量较大,如何保存用户的邮件就是一个非常重要的问题。传统Unix使用一个单一目录来保存所有用户的邮件,在用户数量较多时就极大的降低了文件系统的性能。只有使用多级目录,每个目录下的文件数量有限,才能降低打开文件时的系统消耗,或者不再使用简单的文件来保存邮件,而采用某一种封装形式。完全采取数据库形式来保存邮件,由于用户邮件操作多为文件操作,且大小变化较大,因此会造成性能和存储空间上较大的浪费。

        由于用户数量巨大,并且也要求能被多台服务器同时访问,必须采用存储空间较大的服务器或服务器集群来保存,通过光纤通道或者网络文件系统NFS来共享存储空间,使得每个用户的邮件存储路径对于每个服务器都是一致的。光纤通道是一种非常昂贵的解决方法,更为常用的是使用NFS,可以使用专用的NFS服务器,如NetApp,或者使用带有RAID能力的PC Unix服务器。

        当使用NFS共享存储空间的时候,一个非常重要的问题必须注意。由于NFS缺乏文件锁定机制,因此使用传统的用户邮件存储格式mailbox时,因为所有的邮件都保存在同一个文件中,因此进行邮件操作就必须加锁,以保证没有访问冲突,这就使得它不适合NFS存储方式。为了解决这个问题,qmail提出了Maildir存储方式,每个邮件作为单独的一个文件保存在用户个人的邮件目录下,就避免了加锁。因此,常见的免费邮件服务器,一般都采用Maildir方式来保存用户的邮件。

        如果不打算使用共享文件系统的方式来保存用户的邮件,而打算让每个服务器只访问其自己硬盘存储空间上的用户邮件,那么Email服务器和客户端都需要进行定制,使它们能通过用户名来找到用户属于的真正服务器,将访问任务交给这个服务器完成。这种方法的缺点除了所需要的改动较大之外,系统结构复杂之外,还由于服务器是按用户进行分割的,不利于分担负载。其优点也是由于它不通过网络访问其他服务器,因此可以采用任意的邮件存储格式,包括采用强大的cyrus系统来保存邮件和提供服务。


邮件服务器软件

        标准的Email软件,例如sendmail,虽然也提供了一些包括aliases等方法,来支持非Unix系统用户,但是这些能力对于实现这种Email系统是不够的。为了支持这些Email用户,必须使用自己的Email服务器软件。一般由于现有的Email软件都相当成熟,而且也都是开放源代码的软件,因此一般都是改动原有的Email软件,如sendmail、qmail等,使其支持特定的Email用户。完全重写一个Email服务软件,从成熟性、稳定性来看并不可取。

        不管从性能上,安全性上考虑,sendmail并不是理想的选择,而且由于qmail本身就支持Maildir,因此就成为了常用的Email软件的基础开发平台。然而需要注意的是,qmail使用GPL许可进行保护,因此基于qmail进行的任何改动,原则上必须公开源代码,这对开发商业系统有一定障碍。当然可以通过不改动qmail,而改动相关的系统库函数,或者采用外挂的方式来绕过这个问题。另一个可选的基础Email软件是postfix,其本身就具备与LDAP、MySQL的接口,几乎不需要改动就能作为邮件系统的一部分。  


Web客户端

        Web界面Email系统的另一个重要的部分就是Web客户端,这一部分的功能将如同个人计算机中的OutLook,负责给用户提供访问自己邮件的能力。由于Web访问本身是无连接的,因此必须保证用户的安全性。基本上,安全性可以通过登录后建立的会话标识、临时目录,并在程序中进行验证来保证。

        Web客户端必须以统一的方式来访问服务器,可以通过直接文件访问的方式来获得用户的邮件,或者通过POP3、IMAP等标准协议来访问。对于使用网络文件系统来共享用户邮件的系统,通过直接文件访问的方法最为直接和便利,也不需要额外的消耗。而通过POP3、IMAP协议来访问服务器,其直接的好处就是Web客户端和Email服务器相分离,提高了系统安全性。

        当前,已经有一些相当成熟的开放源代码的Web客户端软件,其中IMP是采用PHP来实现的,通过IMAP协议访问服务器的Web邮件客户端软件。而WING则是采用Perl来实现的另一个Web客户端软件。这些开放源代码软件都相当不错,然而,将这些软件与自己的系统相集成,还会需要进行一定改动。此外,还应该遵循其许可要求,将改动的代码对外公开。


实现负载均衡

        由于需要提供给大量的用户进行访问,因此单台服务器不能满足这个需要,而必须要使用多服务器的方式。除了按照功能性进行分割之外,如Web服务器、Email服务器以及文件服务器相分离,还需要对一些资源紧张的服务使用多服务器进行负载均衡。虽然当前一些商业厂家也提出了一些服务器集群的方案,但常用的简单而有效的方法还是DNS循环解析,Web服务器重定位和NAT负载均衡等几种。

        DNS循环解析是为同一个名字分配多个IP地址,它用在Yahoo等相当大的站点上,实际效果也相当不错。而Web服务器重定位则是由Web服务器随机产生位于不同服务器上的真实页面URL,使不同的浏览器载入不同服务器上的页面,使用它只能实现Web客户端的负载均衡。而NAT负载均衡则利用第四层交换机,使同样的请求转向不同的服务器,除了昂贵的交换机之外,也有一些软件能完成NAT功能,我曾对FreeBSD的natd进行了改动,使其能支持负载均衡,对于因为交换机价格问题而不得不降低性能要求的使用者来讲,也是一种选择。



实例分析

        当前在国内最流行的Web界面Email系统为网易公司的系统,它是采用qmail作为基本服务器软件,再加以改动的系统。它采用NFS网络文件系统作为用户邮件存储空间,使用Maildir作为邮件存储格式,提供多级目录以支持大量用户。其Web客户端为他们自己实现的,通过直接访问用户邮件的方式为用户提供服务。不考虑其软件的小问题,这种实现方式是非常流行且成熟的方式,大部分免费邮件服务系统都是采用的这种模式。

        另一种方式是尽量利用已有的开放源代码软件,一种可行的方案是使用Postfix、OpenLDAP、cyrus和IMP来实现大容量Email系统,其中,主邮件服务器使用Postfix查询LDAP服务器,决定用户的真实邮箱地址,然后转发到真实邮件主机上,该主机通过LDAP查询确认,将邮件放入cyrus服务器中,而IMP通过登录cyrus,使用IMAP访问用户邮件。当用户增多,一台cyrus服务器不够时,可以将新添加的用户放置到新增加的服务器上,只需要在LDAP服务器设置相应的属性就可以了。在这种方式下,由于用户是严格按服务器分割造成了管理等困难之外,这种结构本身较为复杂。然而,如果用户数量不是很多,那么就不需要使用多台cyrus服务器和LDAP服务器,复杂程度就大大降低,比较适合中小型站点使用。

论坛徽章:
0
32 [报告]
发表于 2006-06-20 11:57 |只看该作者
附录


Email软件的选择


        在Internet中最常使用的工具可能就是电子邮件了,因此,建立一个站点所必须的一步工作就是构建一个安全、可靠的电子邮件系统。由于电子邮件是一种非常传统的工具,因此有非常多的软件可以用来达到这个目的,这里面包括从古老的uucp邮件到非常庞大的商业群件系统,如Lotus Domino Server,但使用最广泛的还是一种自由软件──sendmail,它支撑了当前Internet邮件系统的主体。


Sendmail的不足

        无论从使用的广泛程度,还是从代码的复杂程度来讲,sendmail都是一个非常优秀的软件。如果使用它来构建网站的电子邮件系统,基本上不必费心,因为几乎所有的Unix的缺省配置中都内置这个软件,只需要设置好操作系统,它就能立即运转起来。然而,Internet用户的要求更为苛刻,纷纷指出sendmail中包含的各个不足之处。

        第一个重要的缺点是它的安全性较差,这是因为当其作者Eric Allman最初开始写作这个软件的时候,Internet的用户还很少,因而安全性并不没有得到大家的重视。由于邮件系统需要处理的是外部发送来的各种各样的信息,甚至包含一些恶意数据,然而sendmail在大多数系统中都是以root身份运行,一旦出现问题,就会对系统安全造成严重影响。在这种情况下,要防止出现安全问题,仅仅依赖程序本身是不可取的,应该从系统结构出发,使程序拥有的特殊权限限制到最小。

        此外,也是由于其早期的Internet用户数量及邮件数量都相当小,Sendmail的系统结构并不适合较大的负载,对于高负载的邮件系统,需要对Sendmail进行复杂的调整。例如,通常情况下sendmail只启动一个进程顺序向外发送邮件,如果邮件较多时就要花费相当长的时间。

        使用Sendmail还会遇到的另一个问题是它的设置相当复杂,对于使用缺省设置来收发电子邮件,问题并不存在。当管理员打算进行一些特殊设置,以便利用Sendmail提供的复杂邮件处理能力时,就不得不面对复杂的宏和正则表达式。虽然现在Sendmail使用了宏预处理程序m4使设置更易于理解一些,但是掌握Sendmail的设置仍然是对系统管理员的一大挑战。


使用Qmail替代Sendmail

        为了解决sendmail的安全问题,整个系统结构需要重新设计。基本的原则是将系统划分为不同的模块,有负责接收外部邮件的,有管理缓冲目录中待发送的邮件队列的,有将邮件发送到远程服务器或本地用户的。Qmail就是按照这个原则进行的设计,它由多个不同功能的小程序组成,只有必要的程序才是setuid程序(即以root用户权限执行),这样就减少了安全隐患,并且由于这些程序都比较简单一些,因此就可以达到较高的安全性。

        这种按照Unix思路的模块化设计方法也使得Qmail具备较高的性能,因为如果需要,Qmail可以启动某个模块的多个实例来完成同一个任务,例如启动多个发送程序同时向外发送邮件,这对于提供邮件列表服务的邮件系统是非常有益的。这种方式也使得Qmail要占用较大的网络带宽,如果带宽有限,效果反而不好,但在当前网络性能大幅度提高的情况下,这种方式是非常合适的。

        Qmail还提供一些非常有用的特色来增强系统的可靠性,例如,它提出了Maildir格式的邮件存储方式,这使得通过网络文件系统NFS存取邮件成为可能。此外,Qmail还具备一些非常别致的特色,它不仅仅提供了与Sendmail兼容的方式来处理转发、别名等能力,还可以用以Sendmail完全不同的方式来提供这些功能。从它的编译安装方式、提供的扩展功能和源代码的风格,可以看出其作者Dan Bernstein是一个极具个性化的程序员。正因为如此,对于Qmail的某些方面,有着一些争论,例如有些人认为Qmail的安装设置并不易于理解,很容易让人糊涂,而另一些人的看法则相反。基本上这是因为Qmail提供解决问题的方式,和Sendmail不大相同的缘故,这样对那些不太熟悉Sendmail的邮件系统管理员,反而更容易接受Qmail一些。


另一种替换软件:Postfix

        Postfix同样也是采用了模块化的方式,但与Qmail不同的是,Postfix使用了一个主控进程进行监控。Postfix在很多方面都考虑到了安全问题,它甚至不向root分发电子邮件,以避免以root身份读写文件或启动外部程序。考虑到它的作者Wietse Venema曾编写了著名的安全软件TcpWrapper,并是SATAN程序的合作人员之一,Postfix的安全性是非常值得信赖的。

同样,Postfix的性能也非常不错,甚至在Qmail作者自己进行的测试中也表明,Postfix的性能和Qmail基本相当。但Postfix占用的内存要大一些,这主要是由于Postfix和Qmail在系统结构上的差异造成的。

与Qmail不同,Postfix更着眼于作为Sendmail的直接替换,使用Postfix替换Sendmail却相当简单,因为Postfix使用的很多文件和Sendmail一致,只需要在配置文件中指明原有Sendmail配置文件的位置就可以了,Postfix甚至还提供了sendmail和mailq程序,以保持兼容性。基本上,可以直接从Sendmail转换为使用Postfix,而不需要额外的设置。Postfix提供的安装配置方式也相当简单,它使用中心化的配置文件和非常易理解的配置指令。

        Postfix提供的一些强大的功能主要在于多种数据库表查询方式,例如它支持DB、DBM、passwd文件、正则表达式、MySQL数据库以及LDAP方式的查询,用于支持系统级的别名、虚拟主机等。虽然在Qmail中也能支持这些功能,但没有象Postfix那样统一、简洁。此外,更改Postfix的设置之后,也不需要重新启动整个系统,只需要使用postfix reload就能完全刷新配置,这也避免了丢失邮件的可能性。


        事实上,除了Qmail和Postfix之外,还有很多种邮件系统,例如Smail、Exim等,然而毫无疑问Qmail和Postfix是其中最优秀的,也是Sendmail最有力的竞争者。此外,还有一些商业邮件服务器产品,但一般情况下,购买商业邮件服务器软件大部分是冲着其提供的服务或者是附加功能来的,例如群件产品通常带有很多额外功能用于办公环境等。

        至于在Sendmail、Postfix和Qmail之间进行选择,基本上依赖于用户自己的偏好。有些人喜欢Qmail提供的复杂特色,而有的人希望对Sendmail的替换能简单一些,也有人不打算更换,而坚持使用Sendmail的最新版本。对于一个熟悉Unix系统而又愿意改善邮件系统性能和安全性的管理员,应该转换为使用Postfix或Qmail,除非对Sendmail非常熟悉而保持了特殊的感情。在Postfix和Qmail之间,它们各自有一批忠心拥护者,选择哪个都是可行的。基本上,Postfix作为一个较新的软件,其影响力正在增加,有些原本使用Qmail的使用者,也开始转向Postfix,这可能是因为Postfix的风格更通俗的原因。

论坛徽章:
0
33 [报告]
发表于 2006-06-20 11:58 |只看该作者
FreeBSD全能服务器安装手册之邮件服务器篇--qmail基本介绍

qmail的基本介绍
qmail是在unix系统上的一个邮件程序。qmail程序是由dan bernstein开发出来的为标准的unix服务器提供邮件传输代理的(mail transfer agent,mta)功能的,用来替代sendmail。qmail因特网主页http://www.qmail.org

论坛徽章:
0
34 [报告]
发表于 2006-06-20 11:59 |只看该作者
FreeBSD全能服务器安装手册之qmail基础安装篇

###################################下载软件包##################################
Part 1 - Download the Software(http://www.qmailrocks.org/downloads/qmailrocks.tar.gz)


mkdir /downloads
cd /downloads
tar zxvf qmailrocks.tar.gz




##################################安装qmail主程序##############################
Part 2 - Installing Qmail Itself  


/downloads/qmailrocks/scripts/install/qmr_install_freebsd-s1.script
脚本内容请参考------qmail安装脚本篇qmr_install_freebsd-s1.script


###############################################################################
/downloads/qmailrocks/scripts/util/qmail_patches.script   
脚本内容请参考------qmail安装脚本篇qmail_patches.script



cd /usr/src/qmail/qmail-1.03

make man
make setup check
./config-fast mail.tjhaina.net

/usr/ports/mail/qmail
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cd /usr/src/qmail/ucspi-tcp-0.88/
make
make setup check

/usr/ports/sysutils/ucspi-tcp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cd /package/admin/daemontools-0.76
package/install
reboot

/usr/ports/sysutils/daemontools
################################Part 3 - EZmlm##################################
Part 3 - EZmlm  
cd /downloads/qmailrocks/
tar zxvf ezmlm-0.53-idx-0.41.tar.gz
cd ezmlm-0.53-idx-0.41
make
make setup


/usr/ports/mail/ezmlm
############################Part 4 - Qmail-Autoresponder ##########################
Part 4 - Qmail-Autoresponder  
#pkg_add -r qmail-autoresponder
cd /downloads/qmailrocks
pkg_add qmail-autoresponder-0.96.1.tbz


/usr/ports/mail/qmail-autoresponder
################################part 5 - Vpopmail################################
Part 5 - Vpopmail(I would like to install vpopmail with MySQL integration)
mkdir -p ~vpopmail/etc
mysql -u root -p
CREATE DATABASE vpopmail;  
GRANT select,insert,update,delete,create,drop ON vpopmail.* TO vpopmailuser@localhost IDENTIFIED BY 'password';  
quit
mysql -u vpopmailuser -p
quit
upload
iGENUS.mysql
mysql -u root -p < /home/chb/iGENUS.mysql  
脚本内容请参考------qmail安装脚本篇iGENUS.mysql
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
cd /downloads/qmailrocks
tar zxvf vpopmail-5.4.9.tar.gz  
cd vpopmail-5.4.9
./configure \
--disable-roaming-users \
--enable-logging=p \
--disable-ip-alias-domains \
--disable-passwd \
--enable-clear-passwd \
--disable-domain-quotas \
--enable-auth-module=mysql \
--enable-many-domains \
--enable-auth-logging \
--enable-sql-logging \
--enable-valias \
--disable-mysql-limits
make  
make install-strip


chown vpopmail:vchkpw ~vpopmail/etc  

echo "localhost|0|vpopmailuser|password|vpopmail" > ~vpopmail/etc/vpopmail.mysql

chown vpopmail:vchkpw ~vpopmail/etc/vpopmail.mysql  

chmod 640 ~vpopmail/etc/vpopmail.mysql  

/home/vpopmail/bin/vadddomain 你的域名  
之后回提示输入域管理员的密码  
/home/vpopmail/bin/vadduser 邮件用户@你的域名  
之后回提示输入邮件用户的密码  




/usr/ports/mail/vpopmail
#############################Part 6 - Vqadmin###################################
Part 6 - Vqadmin  
cd /downloads/qmailrocks
tar zxvf vqadmin-2.3.6.tar.gz
cd vqadmin-2.3.6
./configure \
--enable-cgibindir=/usr/local/www/cgi-bin \
--enable-htmldir=/usr/local/www/html  

make  
make install-strip


Now you will need to add the following to your server's Apache configuration file (usually called httpd.conf)  


ee /usr/local/etc/apache/httpd.conf
在末尾添加

<Directory "/usr/local/www/cgi-bin/vqadmin">
deny from all
Options ExecCGI
AllowOverride AuthConfig
Order deny,allow
</Directory>

cd /usr/local/www/cgi-bin/vqadmin
ee .htaccess  
AuthType Basic
AuthUserFile  /usr/local/etc/apache/conf/vqadmin.passwd
AuthName vQadmin
require valid-user
satisfy any


mkdir /usr/local/etc/apache/conf

chown www .htaccess  
chmod 644 .htaccess
htpasswd -bc /usr/local/etc/apache/conf/vqadmin.passwd admin password
chmod 644 /usr/local/etc/apache/conf/vqadmin.passwd
apachectl stop
apachectl start
http://192.168.0.205/cgi-bin/vqadmin/vqadmin.cgi


/usr/ports/mail/vqadmin

##############################Part 7 - Maildrop###################################
Part 7 - Maildrop  
cd /downloads/qmailrocks
tar zxvf maildrop-1.6.3.tar.gz
cd maildrop-1.6.3
./configure \
--prefix=/usr/local \
--exec-prefix=/usr/local \
--enable-maildrop-uid=root \
--enable-maildrop-gid=vchkpw \
--enable-maildirquota
make  
make install-strip
make install-man

/usr/ports/mail/maildrop
##############################Part 8 - Qmailadmin#############################
Part 8 - Qmailadmin            
cd /downloads/qmailrocks
tar zxvf qmailadmin-1.2.3.tar.gz
cd qmailadmin-1.2.3
./configure \
--enable-cgibindir=/usr/local/www/cgi-bin \
--enable-htmldir=/usr/local/www/html/directory \
--enable-autoresponder-path=/usr/local/bin/qmail-autoresponder

make  
make install-strip

/usr/ports/mail/qmailadmin
####################################Part 9 - Finalizing Qmail#######################
Part 9 - Finalizing Qmail
/downloads/qmailrocks/scripts/finalize/freebsd/finalize_freebsd.script
脚本内容请参考------qmail安装脚本篇finalize_freebsd.script
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ee /var/qmail/supervise/qmail-pop3d/run
Find "mail.example.com" and change it to your server's hostname. For example: mail.mydomain.com.

ee /var/qmail/supervise/qmail-smtpd/run
Find "mail.example.com" and change it to your server's hostname. For example: mail.mydomain.com

qmailctl stop
echo '127.:allow,RELAYCLIENT=""' >> /etc/tcp.smtp

qmailctl cdb

echo b.s.d@163.com > /var/qmail/alias/.qmail-root
where "some_address" is the system user or email address you want these addresses aliased to.

echo b.s.d@163.com > /var/qmail/alias/.qmail-postmaster
where "some_address" is the system user or email address you want these addresses aliased to.

echo b.s.d@163.com > /var/qmail/alias/.qmail-mailer-daemon
where "some_address" is the system user or email address you want these addresses aliased to.

ln -s /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-anonymous
chmod 644 /var/qmail/alias/.qmail*


##########################Part 10 - Uninstalling Sendmail###########################
Part 10 - Uninstalling Sendmail
killall sendmail
mv /usr/sbin/sendmail /usr/sbin/sendmail.old
mv /usr/lib/sendmail /usr/lib/sendmail.old(this may not apply if there is no sendmail link or binary in this location)
chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old

Now we will need to instruct FreeBSD not to attempt to start Sendmail upon startup. This is done by make the following  

modification to the /etc/rc.conf file:

Change sendmail_enable="YES" to sendmail_enable="NONE"
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
#ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail



########################Part 11 - Starting up qmail#################################


Part 11 - Starting up qmail
/downloads/qmailrocks/scripts/util/qmr_inst_check
脚本内容请参考------qmail安装脚本篇qmr_inst_check
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

qmailctl stop
qmailctl start
telnet localhost 110

you should see something like this:

Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
+OK <16658.1054485137@yourserver.com>
user postmaster@mydomain.com (enter your username here. remember to use the full e-mail address)
+OK  
pass your_password
+OK
quit
+OK  
Connection closed by foreign host.

This is the sign of a successfull POP connection to the server!

Now try sending mail to that same user from another location. Telnet to 110 again and run the "list" command and you should  

see the message that your send...
telnet localhost 110

Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
+OK <16658.1054485137@yourserver.comt>
user postmaster@mydomain.com (again, remember to log in with the full email address of the user)
+OK  
pass your_password
+OK  
list
+OK  
1 323 (there's your message!)
.
quit
+OK  
Connection closed by foreign host.

########################Part 12 - Installing Courier IMAP & IMAP SSL################
Part 12 - Installing Courier IMAP & IMAP SSL
cd /downloads/qmailrocks/

/usr/bin/bunzip2 courier-imap-3.0.8.tar.bz2 (Note: some systems may use bunzip2 instead of bunzip)
#bunzip courier-imap-3.0.8.tar.bz2
tar xvf courier-imap-3.0.8.tar
cd courier-imap-3.0.8
./configure \
--prefix=/usr/local \
--exec-prefix=/usr/local \
--without-authdaemon \
--with-authvchkpw \
--without-authldap \
--disable-root-check \
--with-ssl
make
make install-strip
cd /usr/local/etc
cp imapd.dist imapd
cp imapd-ssl.dist imapd-ssl  
/usr/local/sbin/mkimapdcert
ee imapd-ssl
#make sure IMAPDSSLSTART=YES

cp /usr/local/libexec/imapd.rc /usr/local/etc/rc.d/imap.sh
cp /usr/local/libexec/imapd-ssl.rc /usr/local/etc/rc.d/imaps.sh
/usr/local/etc/rc.d/imap.sh start
/usr/local/etc/rc.d/imaps.sh start


telnet localhost 143

Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE STARTTLS]  

Courier-IMAP ready. Copyright 1998-2003 Double Precision, Inc. See COPYING for distribution information.
a login postmaster@mydomain.com my_password
a OK LOGIN Ok. (successful login!)
a logout (logs you out)
* BYE Courier-IMAP server shutting down
a OK LOGOUT completed
Connection closed by foreign host.

<!--cd /downloads/qmailrocks
tar zxvf courierpassd-1.1.0-RC1.tar.gz
cd courierpassd-1.1.0-RC1
./configure --with-couriersrc=/downloads/qmailrocks/courier-imap-3.0.8
make
make install-->



#########################Part 14 - Clam Antivirus & Spamassassin####################
Part 14 - Clam Antivirus & Spamassassin  

安装Clamav  

cd /usr/ports/security/clamav  
make
make install
make clean  
注:选中CURL  
reboot  
测试  
/usr/local/bin/clamscan -r -i /usr/local/www/data  
----------- SCAN SUMMARY -----------  
Known viruses: 32358  
Scanned directories: 47  
Scanned files: 866  
Infected files: 0  
Data scanned: 10.32 MB  
I/O buffer size: 131072 bytes  
Time: 41.750 sec (0 m 41 s)  

升级病毒库  
/usr/local/bin/freshclam -l /var/log/clamav/clam-update.log

ClamAV update process started at Fri May 6 00:12:24 2005  
WARNING: Your ClamAV installation is OUTDATED - please update immediately!  
WARNING: Local version: 0.83 Recommended version: 0.84  
Downloading main.cvd
  •   
    main.cvd updated (version: 31, sigs: 33079, f-level: 4, builder: tkojm)  
    Downloading daily.cvd
  •   
    daily.cvd updated (version: 871, sigs: 1178, f-level: 4, builder: ccordes)  
    Database updated (34257 signatures) from database.clamav.net (IP: 61.8.0.16)  
    Clamd successfully notified about the update.
  • 论坛徽章:
    0
    35 [报告]
    发表于 2006-06-20 12:00 |只看该作者
    FreeBSD全能服务器安装手册之qmail安装脚本篇
    本次安装中所用到的脚本:
    qmr_install_freebsd-s1.script
    qmail_patches.script
    iGENUS.mysql
    finalize_freebsd.script
    qmr_inst_check
    script:1
    ############qmr_install_freebsd-s1.script内容##############
    #!/bin/sh

    #An automation script to start the installation of qmail, ucspi-tcp and daemontools
    #Specially formulated for Redhat, Fedora, RHEL and Whitebox Linux. :)


    echo "Creating initial qmail directories..."
    echo
    sleep 2

    cd /downloads/qmailrocks

    mkdir -p /var/qmail

    mkdir /usr/src/qmail

    echo "Done!"
    echo
    sleep 2
    echo "Creating all needed users and groups..."
    echo
    sleep 2

    #######
    #Script to add users and groups for FreeBSD

    #Add all need Qmail users and groups
    pw groupadd nofiles
    pw useradd alias -g nofiles -d /var/qmail/alias -s /sbin/nologin
    pw useradd qmaild -g nofiles -d /var/qmail -s /sbin/nologin
    pw useradd qmaill -g nofiles -d /var/qmail -s /sbin/nologin
    pw useradd qmailp -g nofiles -d /var/qmail -s /sbin/nologin
    pw groupadd qmail
    pw useradd qmailq -g qmail -d /var/qmail -s /sbin/nologin
    pw useradd qmailr -g qmail -d /var/qmail -s /sbin/nologin
    pw useradd qmails -g qmail -d /var/qmail -s /sbin/nologin
    #Add vpopmail users/groups
    pw groupadd vchkpw
    pw useradd vpopmail -g vchkpw -m -d /usr/home/vpopmail -s /sbin/nologin

    #######

    echo "Done!"
    echo
    sleep 2
    echo "Unpacking qmail, ucspi-tcp and daemontools..."
    echo
    sleep 2

    cd /usr/src/qmail

    tar zxvf /downloads/qmailrocks/qmail-1.03.tar.gz

    tar zxvf /downloads/qmailrocks/ucspi-tcp-0.88.tar.gz

    mkdir -p /package

    chmod 1755 /package

    cd /package

    tar zxvf /downloads/qmailrocks/daemontools-0.76.tar.gz

    echo "Done!"
    echo
    sleep 2
    echo "Next, we setup special logging directories..."
    echo
    sleep 2

    mkdir /var/log/qmail

    cd /var/log/qmail

    mkdir qmail-send qmail-smtpd qmail-pop3d

    chown -R qmaill:wheel /var/log/qmail

    chmod -R 750 /var/log/qmail

    echo "Done!"
    echo
    sleep 2
    echo "And set up the supervise script directories..."
    echo
    sleep 2

    mkdir /var/qmail/supervise

    cd /var/qmail/supervise

    mkdir -p qmail-smtpd/log qmail-send/log qmail-pop3d/log

    chmod +t qmail-smtpd qmail-send qmail-pop3d

    echo "Setting conf-split and conf-spawn"
    echo
    sleep 2

    echo 211 > /usr/src/qmail/qmail-1.03/conf-split

    echo 255 > /usr/src/qmail/qmail-1.03/conf-spawn

    echo "All steps completed!"
    echo
    sleep 2

    ##############################################################################################################################################################

    script:2
    ############### qmail_patches.script内容##############
    #!/bin/sh

    #An automation script to start the installation of qmail, ucspi-tcp and daemontools
    #Specially formulated for Redhat, Fedora, RHEL and Whitebox Linux. :)


    echo "Creating initial qmail directories..."
    echo
    sleep 2

    cd /downloads/qmailrocks

    mkdir -p /var/qmail

    mkdir /usr/src/qmail

    echo "Done!"
    echo
    sleep 2
    echo "Creating all needed users and groups..."
    echo
    sleep 2

    #######
    #Script to add users and groups for FreeBSD

    #Add all need Qmail users and groups
    pw groupadd nofiles
    pw useradd alias -g nofiles -d /var/qmail/alias -s /sbin/nologin
    pw useradd qmaild -g nofiles -d /var/qmail -s /sbin/nologin
    pw useradd qmaill -g nofiles -d /var/qmail -s /sbin/nologin
    pw useradd qmailp -g nofiles -d /var/qmail -s /sbin/nologin
    pw groupadd qmail
    pw useradd qmailq -g qmail -d /var/qmail -s /sbin/nologin
    pw useradd qmailr -g qmail -d /var/qmail -s /sbin/nologin
    pw useradd qmails -g qmail -d /var/qmail -s /sbin/nologin
    #Add vpopmail users/groups
    pw groupadd vchkpw
    pw useradd vpopmail -g vchkpw -m -d /usr/home/vpopmail -s /sbin/nologin

    #######

    echo "Done!"
    echo
    sleep 2
    echo "Unpacking qmail, ucspi-tcp and daemontools..."
    echo
    sleep 2

    cd /usr/src/qmail

    tar zxvf /downloads/qmailrocks/qmail-1.03.tar.gz

    tar zxvf /downloads/qmailrocks/ucspi-tcp-0.88.tar.gz

    mkdir -p /package

    chmod 1755 /package

    cd /package

    tar zxvf /downloads/qmailrocks/daemontools-0.76.tar.gz

    echo "Done!"
    echo
    sleep 2
    echo "Next, we setup special logging directories..."
    echo
    sleep 2

    mkdir /var/log/qmail

    cd /var/log/qmail

    mkdir qmail-send qmail-smtpd qmail-pop3d

    chown -R qmaill:wheel /var/log/qmail

    chmod -R 750 /var/log/qmail

    echo "Done!"
    echo
    sleep 2
    echo "And set up the supervise script directories..."
    echo
    sleep 2

    mkdir /var/qmail/supervise

    cd /var/qmail/supervise

    mkdir -p qmail-smtpd/log qmail-send/log qmail-pop3d/log

    chmod +t qmail-smtpd qmail-send qmail-pop3d

    echo "Setting conf-split and conf-spawn"
    echo
    sleep 2

    echo 211 > /usr/src/qmail/qmail-1.03/conf-split

    echo 255 > /usr/src/qmail/qmail-1.03/conf-spawn

    echo "All steps completed!"
    echo
    sleep 2


    ############################## qmail_patches.script内容###########################
    ###############################################################################



    script:3

    %%%%%%%%%%%%%%%%%%iGENUS.mysql%%%%%%%%%%%%%%%%%%%%%
    DROP DATABASE vpopmail;  
    CREATE DATABASE vpopmail;  
    USE vpopmail;  

    CREATE TABLE `address` (
    `id` int(11) unsigned NOT NULL auto_increment,  
    `pw_id` int(5) NOT NULL default '0',  
    `name` varchar(64) NOT NULL default '',  
    `email` varchar(128) NOT NULL default '',  
    UNIQUE KEY `id` (`id`),  
    KEY `pw_id` (`pw_id`)  
    ) TYPE=MyISAM PACK_KEYS=1 ;  

    CREATE TABLE `admin` (  
    `id` int(10) unsigned NOT NULL auto_increment,  
    `site_id` int(10) unsigned NOT NULL default '0',  
    `domain` varchar(128) NOT NULL default '',  
    `quota` smallint(5) unsigned NOT NULL default '0',  
    `total` smallint(5) unsigned NOT NULL default '0',  
    `createtime` timestamp(14) NOT NULL,  
    `login` char(1) NOT NULL default '',  
    `cur_total` smallint(5) NOT NULL default '0',  
    `cur_quota` smallint(5) NOT NULL default '0',  
    `gid` varchar(11) NOT NULL default '',  
    `expiration_time` timestamp(14) NOT NULL,  
    `flag` int(10) unsigned NOT NULL default '0',  
    `maxmsg` int(10) unsigned NOT NULL default '0',  
    PRIMARY KEY (`id`),  
    UNIQUE KEY `domain` (`domain`)  
    ) TYPE=MyISAM PACK_KEYS=1 ;  

    CREATE TABLE `card` (  
    `id` int(5) unsigned NOT NULL auto_increment,  
    `pw_id` int(5) unsigned NOT NULL default '0',  
    `LinkMan` varchar(64) NOT NULL default '',  
    `CompanyName` varchar(100) NOT NULL default '',  
    `address` varchar(255) NOT NULL default '',  
    `Position` varchar(32) NOT NULL default '',  
    `PhoneNumber` varchar(16) NOT NULL default '',  
    `Mobile` varchar(12) NOT NULL default '',  
    `Email` varchar(128) NOT NULL default '',  
    `Partaker` varchar(32) NOT NULL default '',  
    `Memo` varchar(255) NOT NULL default '',  
    PRIMARY KEY (`id`)  
    ) TYPE=MyISAM ;  

    CREATE TABLE `lastauth` (  
    `user` char(32) NOT NULL default '',  
    `domain` char(64) NOT NULL default '',  
    `remote_ip` char(18) NOT NULL default '',  
    `timestamp` bigint(20) NOT NULL default '0',  
    PRIMARY KEY (`user`,`domain`)  
    ) TYPE=MyISAM;  

    CREATE TABLE `logs` (  
    `pw_id` int(5) default '0',  
    `ip` varchar(15) NOT NULL default '',  
    `action` varchar(15) NOT NULL default '',  
    `time` datetime default NULL,  
    `content` varchar(64) NOT NULL default '',  
    `email` varchar(128) NOT NULL default ''  
    ) TYPE=MyISAM;  

    CREATE TABLE `message` (  
    `id` int(5) unsigned NOT NULL auto_increment,  
    `title` varchar(255) NOT NULL default '',  
    `body` text NOT NULL,  
    `createtime` datetime NOT NULL default '0000-00-00 00:00:00',  
    `updatetime` datetime NOT NULL default '0000-00-00 00:00:00',  
    `pw_domain` varchar(64) NOT NULL default '',  
    UNIQUE KEY `id` (`id`)  
    ) TYPE=MyISAM ;  

    CREATE TABLE `personal` (  
    `id` int(11) unsigned NOT NULL auto_increment,  
    `pw_id` int(5) NOT NULL default '0',  
    `truename` varchar(10) NOT NULL default '',  
    `fax` varchar(20) NOT NULL default '',  
    `telephone` varchar(15) NOT NULL default '',  
    `sex` int(1) NOT NULL default '0',  
    `year` int(4) NOT NULL default '0',  
    `MONTH` int(2) NOT NULL default '0',  
    `DAY` int(2) NOT NULL default '0',  
    `education` varchar(4) NOT NULL default '',  
    `marital` int(1) NOT NULL default '0',  
    `occupation` varchar(15) NOT NULL default '',  
    `companyname` varchar(30) NOT NULL default '',  
    `province` varchar(6) NOT NULL default '',  
    PRIMARY KEY (`id`)  
    ) TYPE=MyISAM PACK_KEYS=1 ;  

    CREATE TABLE `scheduler` (  
    `id` int(11) unsigned NOT NULL auto_increment,  
    `begin_time` int(11) unsigned default NULL,  
    `end_time` int(11) unsigned default NULL,  
    `title` varchar(255) NOT NULL default '',  
    `body` varchar(255) NOT NULL default '',  
    `pw_id` int(11) unsigned NOT NULL default '0',  
    PRIMARY KEY (`id`)  
    ) TYPE=MyISAM ;  

    CREATE TABLE `stow` (  
    `id` int(5) unsigned NOT NULL auto_increment,  
    `pw_id` int(5) unsigned NOT NULL default '0',  
    `Name` varchar(128) NOT NULL default '',  
    `http` varchar(255) NOT NULL default 'http://',  
    `memo` varchar(255) NOT NULL default '',  
    PRIMARY KEY (`id`)  
    ) TYPE=MyISAM ;  

    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,  
    createtime timestamp(14) NOT NULL,  
    PRIMARY KEY (pw_id),  
    KEY pw_name (pw_name,pw_domain) )  
    TYPE=MyISAM PACK_KEYS=1  



    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    论坛徽章:
    0
    36 [报告]
    发表于 2006-06-20 12:01 |只看该作者
    script:4

    ################# finalize_freebsd.script##############
    #!/bin/sh

    echo "This scripts will perform 3 functions:\n

    1. Copy all supervise scripts to their proper locations.\n

    2. Copy the qmail rc and qmailctl scripts to their proper locations and create needed symlinks.\n

    3. Set all needed permisions on all supervise scripts.\n"

    echo
    echo "Press ENTER to proceeed"
    read

    echo
    sleep 2

    echo "Copying supervise scripts to their correct locations..."
    echo
    sleep 2

    cp /downloads/qmailrocks/scripts/finalize/freebsd/pop3d_run /var/qmail/supervise/qmail-pop3d/run

    cp /downloads/qmailrocks/scripts/finalize/freebsd/pop3d_log /var/qmail/supervise/qmail-pop3d/log/run

    cp /downloads/qmailrocks/scripts/finalize/freebsd/smtpd_run /var/qmail/supervise/qmail-smtpd/run

    cp /downloads/qmailrocks/scripts/finalize/freebsd/smtpd_log /var/qmail/supervise/qmail-smtpd/log/run

    cp /downloads/qmailrocks/scripts/finalize/freebsd/send_run /var/qmail/supervise/qmail-send/run

    cp /downloads/qmailrocks/scripts/finalize/freebsd/send_log /var/qmail/supervise/qmail-send/log/run

    echo Done!
    echo
    sleep 2

    echo "Copying rc and qmailctl scripts to proper locations..."
    echo
    sleep 2

    cp /downloads/qmailrocks/scripts/finalize/rc /var/qmail/

    cp /downloads/qmailrocks/scripts/finalize/qmailctl /var/qmail/bin/

    echo Done!
    echo
    sleep 2

    echo "Setting needed permisions..."
    echo
    sleep 2

    chmod 755 /var/qmail/rc /var/qmail/bin/qmailctl

    chmod 751 /var/qmail/supervise/qmail-pop3d/run
    chmod 751 /var/qmail/supervise/qmail-pop3d/log/run

    chmod 751 /var/qmail/supervise/qmail-smtpd/run
    chmod 751 /var/qmail/supervise/qmail-smtpd/log/run

    chmod 751 /var/qmail/supervise/qmail-send/run
    chmod 751 /var/qmail/supervise/qmail-send/log/run

    echo ./Maildir > /var/qmail/control/defaultdelivery

    echo 255 > /var/qmail/control/concurrencyremote

    chmod 644 /var/qmail/control/concurrencyremote

    echo 30 > /var/qmail/control/concurrencyincoming

    chmod 644 /var/qmail/control/concurrencyincoming

    ln -s /var/qmail/bin/qmailctl /usr/bin

    ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /var/qmail/supervise/qmail-pop3d /service

    echo "Done!"
    echo
    sleep 2

    echo "Script Complete!"
    echo

    ################# finalize_freebsd.script##############
    #######################################################

    script:5

    ################# qmr_inst_check内容###################
    #!/bin/sh

    # Qmailrocks, 2003-12-05
    # I've modified Dave Sill's script slightly to accomodate
    # the variations between his Qmail installation and the
    # Qmailrocks.org installation. The Qmailrocks version
    # of this script takes into account the slightly different
    # loggind directory setup and a few permissions differences.
    # http://www.qmailrocks.org/downloads/scripts/qmr_inst_check

    # Dave Sill, 2003-11-10
    # http://lifewithqmail.org/inst_check

    # set to n if you're not running a pop3 server, y if you are
    CHECKPOP=y
    CHECKSEND=y
    QMHOME=/var/qmail
    LBIN=/usr/local/bin

    OK=1

    if [ $# -eq 1 ]; then
      if [ "$1" = "-v" ]; then
        VERB=y
      else
        VERB=n
      fi
    fi

    if [ ! -d $QMHOME ]; then
      echo "! Couldn't find qmail's home directory, $QMHOME!"
    else
      if [ "$VERB" = y ]; then
        echo "$QMHOME exists"
      fi
      for i in alias bin boot control doc man queue supervise users; do
        if [ ! -d $QMHOME/$i ]; then
          echo "! Couldn't find $QMHOME/$i!"
          OK=0
        elif [ "$VERB" = y ]; then
          echo "$QMHOME/$i exists"
        fi
      done

      if [ ! -f $QMHOME/rc ]; then
        echo "! $QMHOME/rc is missing"
        OK=0
      elif [ ! -x $QMHOME/rc ]; then
        echo "! $QMHOME/rc is not executable"
        echo "...try: chmod 755 $QMHOME/rc"
        OK=0
      elif [ `head -1 $QMHOME/rc|cat -vet` != '#!/bin/sh$' ]; then
        echo "! $QMHOME/rc has bad magic cookie"
        echo "...try: dos2unix $QMHOME/rc"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "$QMHOME/rc is executable and has a valid magic cookie"
      fi
    fi

    for i in alias qmaild qmaill qmailp qmailq qmailr qmails; do
      grep "^$i:" /etc/passwd >/dev/null
      if [ $? -ne 0 ]; then
        echo "! Couldn't find $i user in /etc/passwd"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "$i user exists"
      fi
    done

    for i in qmail nofiles; do
      grep "^$i:" /etc/group >/dev/null
      if [ $? -ne 0 ]; then
        echo "! Couldn't find $i group in /etc/group"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "$i group exists"
      fi
    done

    for i in tcprules tcpserver; do
      if [ ! -x $LBIN/$i ]; then
        echo "! Couldn't find $LBIN/$i from ucspi-tcp"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "$i from ucspi-tcp is installed"
      fi
    done

    for i in multilog softlimit setuidgid supervise svok svscan tai64nlocal; do
      if [ ! -x $LBIN/$i ]; then
        echo "! Couldn't find $LBIN/$i from daemontools"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "$i from daemontools is installed"
    fi
    done

    if [ ! -d /service ]; then
      echo "! /service directory is missing"
      OK=0
    elif [ "$VERB" = y ]; then
      echo "/service directory exists"
    fi

    if [ -f /etc/inittab ]; then
      grep "^SV" /etc/inittab >/dev/null
      if [ $? -ne 0 ]; then
        echo "! Couldn't find SV entry in inittab"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "svscan /service is configured to run via /etc/inittab"
      fi
      PS="ps -ef"
    else
      grep "svscanboot" /etc/rc.local >/dev/null
      if [ $? -ne 0 ]; then
        echo "! Couldn't find 'csh -cf '/command/svscanboot &' in /etc/rc.local"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "/command/svscanboot is configured to run via /etc/rc.local"
      fi
      PS="ps -waux"
    fi

    SVRUN=`$PS | grep "svscan /service" | grep -v grep`
    if [ -z "$SVRUN" ]; then
      echo "'! svscan /service' doesn't seem to be running"
      OK=0
    elif [ "$VERB" = y ]; then
      echo "svscan /service is running"
    fi

    if [ ! -f $QMHOME/control/defaultdelivery ]; then
      echo "! Couldn't find $QMHOME/control/defaultdelivery"
      OK=0
    elif [ ! -s $QMHOME/control/defaultdelivery ]; then
      echo "! $QMHOME/control/defaultdelivery is empty"
      OK=0
    elif [ "$VERB" = y ]; then
      echo "$QMHOME/control/defaultdelivery looks OK"
    fi

    if [ ! -f $QMHOME/bin/qmailctl ]; then
      echo "! $QMHOME/bin/qmailctl is missing"
      OK=0
    elif [ ! -s $QMHOME/bin/qmailctl ]; then
      echo "! $QMHOME/bin/qmailctl is empty"
      OK=0
    elif [ `head -1 $QMHOME/bin/qmailctl|cat -vet` != '#!/bin/sh$' ]; then
        echo "! $QMHOME/bin/qmailctl has bad magic cookie"
        echo "...try: dos2unix $QMHOME/bin/qmailctl"
        OK=0
    elif [ ! -x $QMHOME/bin/qmailctl ]; then
      echo "! $QMHOME/bin/qmailctl is not executable"
      echo "...try: chmod 755 $QMHOME/bin/qmailctl"
      OK=0
    elif [ "$VERB" = y ]; then
      echo "$QMHOME/bin/qmailctl looks OK"
    fi
    if [ ! -L /usr/bin/qmailctl ]; then
      echo "! /usr/bin/qmailctl is missing"
      echo "...try: ln -s $QMHOME/bin/qmailctl /usr/bin"
      OK=0
    elif [ "$VERB" = y ]; then
      echo "/usr/bin/qmailctl exists"
    fi

    SVCDIRS="qmail-send qmail-send/log qmail-smtpd qmail-smtpd/log"
    if [ "$CHECKPOP" = "y" ]; then
      SVCDIRS="$SVCDIRS qmail-pop3d qmail-pop3d/log"
    fi
    for i in $SVCDIRS; do
      if [ ! -f $QMHOME/supervise/$i/run ]; then
        echo "! $QMHOME/supervise/$i/run file is missing"
        OK=0
      elif [ `head -1 $QMHOME/supervise/$i/run|cat -vet` != '#!/bin/sh$' ]; then
        echo "! $QMHOME/supervise/$i/run has bad magic cookie"
        echo "...try: dos2unix $QMHOME/supervise/$i/run"
        OK=0
      elif [ ! -x $QMHOME/supervise/$i/run ]; then
        echo "! $QMHOME/supervise/$i/run file is not executable"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "$QMHOME/supervise/$i/run looks OK"
      fi
    done

    if [ ! -f $QMHOME/control/concurrencyincoming ]; then
      echo "! $QMHOME/control/concurrencyincoming is missing"
      echo "...try: echo 30 >$QMHOME/control/concurrencyincoming"
      OK=0
    elif [ "$VERB" = y ]; then
      echo "$QMHOME/control/concurrencyincoming looks OK"
    fi

    LOGDIRS="/var/log/qmail /var/log/qmail/qmail-smtpd"
    if [ "$CHECKPOP" = "y" ]; then
      LOGDIRS="$LOGDIRS /var/log/qmail/qmail-pop3d"
    fi
    if [ "$CHECKSEND" = "y" ]; then
      LOGDIRS="$LOGDIRS /var/log/qmail/qmail-send"
    fi
    for i in $LOGDIRS; do
      if [ ! -d $i ]; then
        echo "! $i is missing"
        echo "...try: mkdir -p $i"
        OK=0
      elif [ "`ls -ld $i|awk '{print $3}'`" != "qmaill" ]; then
        echo "! $i has wrong owner, should be qmaill"
        echo "...try: chown qmaill $i"
        OK=0
      elif [ "`ls -ld $i|awk '{print $1}'`" != "drwxr-x---" ]; then
        echo "! $i has wrong mode, should be 750"
        echo "...try: chmod 750 $i"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "$i looks OK"
      fi
    done

    SVCLINKS="/service/qmail-send /service/qmail-smtpd"
    if [ "$CHECKPOP" = "y" ]; then
      SVCLINKS="$SVCLINKS /service/qmail-pop3d"
    fi
    for i in $SVCLINKS; do
      if [ ! -L $i ]; then
        echo "! $i is missing"
        echo "...try: ln -s $QMHOME$i $i"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "$i exists"
      fi
    done

    if [ ! -f /etc/tcp.smtp ]; then
      echo "! /etc/tcp.smtp is missing"
      echo "...try: echo '127.:allow,RELAYCLIENT=\"\"' >>/etc/tcp.smtp"
      OK=0
    elif [ "$VERB" = y ]; then
      echo "/etc/tcp.smtp exists"
    fi

    if [ ! -f /etc/tcp.smtp.cdb ]; then
      echo "! /etc/tcp.smtp.cdb is missing"
      echo "...try: $QMHOME/bin/qmailctl cdb"
      OK=0
    elif [ "$VERB" = y ]; then
      echo "/etc/tcp.smtp.cdb exists"
    fi

    AHOME=`grep "^alias:" /etc/passwd | awk -F: '{print $6}'`
    if [ -z "$AHOME" ]; then
      echo "! Couldn't find user alias's home directory"
      OK=0
    else
      for i in root postmaster mailer-daemon; do
        if [ ! -f $AHOME/.qmail-$i ]; then
          echo "! Alias for $i is missing"
          echo "...try: echo me >$AHOME/.qmail-$i"
          OK=0
        elif [ "$VERB" = y ]; then
          echo "$i alias exists"
        fi
      done
    fi

    if netstat -a | grep smtp | grep -i listen >/dev/null; then
      if $PS | grep sendmail | grep -v grep >/dev/null; then
        echo "! Sendmail is still running"
        echo "...try: $RCDIR/init.d/sendmail stop"
        OK=0
      elif $LBIN/svok /service/qmail-smtpd; then
        if [ "$VERB" = y ]; then
          echo "/service/qmail-smtpd is running"
        fi
      else
        echo "! Something is listening on port 25 (not tcpserver/qmail-smtpd)"
        echo "...try: disabling current MTA"
        OK=0
      fi
    fi

    if [ "$CHECKPOP" = "y" ]; then
      if netstat -a | grep pop | grep -i listen >/dev/null; then
        if $LBIN/svok /service/qmail-pop3d; then
          if [ "$VERB" = y ]; then
            echo "/service/qmail-pop3d is running"
          fi
        else
          echo "! Something is listening on port 110 (not tcpserver/qmail-pop3d)"
          echo "...try: disabling other POP server"
          OK=0
        fi
      fi
    fi

    for i in /usr/lib/sendmail /usr/sbin/sendmail; do
      if [ -f $i -a ! -L $i ]; then
        echo "! $i is a file, should be a link"
        echo "...try: uninstalling current MTA or: mv $i $i.old; ln -s $QMHOME/bin/sendmail $i"
        OK=0
      elif [ ! -f $i ];then
        echo "! $i is missing"
        echo "...try: ln -s $QMHOME/bin/sendmail $i"
        OK=0
      elif [ "$VERB" = y ]; then
        echo "$i exists"
      fi
    done

    if [ $OK -eq 1 ]; then
      echo "Congratulations, your Qmailrocks.org Qmail installation looks good!"
    elif [ "$VERB" = y ]; then
      echo "! Potential problems were found with your LWQ installation"
    fi


    ################# qmr_inst_check内容###################
    #######################################################

    论坛徽章:
    0
    37 [报告]
    发表于 2006-06-20 12:02 |只看该作者
    qmail的工作原理
    前言
    qmail是在unix系统上的一个邮件程序。qmail程序是由dan bernstein开发出来的为标准的unix服务器提供邮件传输代理的(mail transfer agent,mta)功能的,用来替代sendmail。qmail因特网主页http://www.qmail.org

    和qmail相关的服务
    qmail提供了mta功能,但是客户要能看到自己的信件,还需要其他协议和软件。两种常见的远程用户取回他们消息的机制是邮政协议(post office protocal,pop3)和互交邮件访问协议(interactive mail access protocol,imap)。
    综述:
    qmail系统包括几个可执行程序、配置文件、qmail工具和环境变量,这些彼此互相影响,共同提供邮件服务。

    qmail投递邮件进程流程

    qmail系统中有9个核心程序,这里简单的介绍一下。
    qmail-smtpd:负责接收来自远程主机的邮件消息并将它们传送给qmail-queue处理。
    mail-inject:程序是用来接收本地产生的邮件消息并传送给qmail-queue程序。
    qmail-queue:程序处理他们发来的邮件,移进邮件队列以便发送。一旦消息被成功的放在邮件队列中,就调用qmail-send程序来处理他。
    qmail-send:检查邮件队列中每一个消息状态,前一次邮件请求失败的消息被识别,并决定它是临时失败还是永久的,临时失败会再次投递,永久失败将被送递到mail-clean程序,被删除掉。qmail-clean是用来清除永久失败的的邮件消息的。
    qmail-send调用了qmail-lspawn 和qmail-rspawn程序。qmail-send判断邮件是发给谁的,发给本地的,就交给qmail-lspawn程序,再由qmail-local投送到本地邮件服务器。要是确定为远程主机,就调用qmail-rspawn程序,qmail-rspawn为每一个邮件消息的接受方决定目的的邮件服务器,再调用qmail-remote程序发送。

    qmail的进程
    qmail-send          splogger                 qmail         qmail-lspawn                 qmail-rspawn                 qmail-clean
    qmail在任何时候都要求有五个程序在后台运行。这些核心的程序允许qmail扫描新邮件,并将他们发送到适当的目的地。                       

    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               将消息插入系统登陆程序中
    tcp-env                将网络连接的信息转换成unix环境变量

    每一个qmail实用工具程序都在正确的处理和投递邮件消息中扮演不同的脚色。其中有一些只能qmail内核程序调用,其他的就可以由qmail的系统管理员用来处理消息并得到统计信息。还有一些可以被单个普通邮件用户来制定自己的邮件消息处理。
    qmail环境变量
    除了控制文件之外,qmail程序还能使用unix环境变量来控制他们的动作。多数的控制文件的值都能被一个相应设定的环境变量重载。如果该环境变量没有设定,就使用控制文件的值。qmail的环境变量是在qmail程序运行前就被设置好的。这是由一个包装程序完成的。常见的是tcpwrapper和tcpserver。本文就是用的tcpserver。在以后的《(四)ucspi-tcp的原理和设置》内容中,再详细讨论。

    论坛徽章:
    0
    38 [报告]
    发表于 2006-06-20 12:03 |只看该作者
    qmail控制文件详解
    1.qmail全部控制文件列表(按照相关性排列)
    --------------------------------------------------------------------------------------------------------
    qmail-inject  defaultdomain  defaulthost  idhost  plusdomain  
    -------------------------------------------------------------------------------------------------------
    qmail-qmqpc  qmqpservers  
    -------------------------------------------------------------------------------------------------------
    qmail-remote  helohost  smtproutes  timeoutconnect  timeoutremote  
    -------------------------------------------------------------------------------------------------------
    qmail-send  bouncefrom  bouncehost  concurrencylocal  concurrencyremote
    doublebouncehost  doublebounceto  envnoathost  locals  
    me  percenthack  queuelifetime  virtualdomains  
    -------------------------------------------------------------------------------------------------------
    qmail-smtpd  badmailfrom  databytes  localiphost  rcpthosts  
    morercpthosts  timeoutsmtpd  smtpgreeting  
    --------------------------------------------------------------------------------------------------------


    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    各控制文件的作用
    qmail-inject
    qmail-inject接受本地邮件消息后检测邮件头是否符合RFC822标准,并传送给qmail-queue排进队列
    ======================================================================
    defaultdomain  
    用来向那些没有使用正确的username@hostname.domain格式的邮件中增加邮件地址的,默认情况下,如果主机地址中没有结束符".",qmail-inject将给主机名后添加defaultdomain的内容,如果该文件不存在,将使用me文件中的值代替.  
    例如:defaultdomain值为linuxfane.com  
    本地产生了一封发送给rainbow@rainbow的邮件,那么qmail-inject将用linuxfane.com来补全这个后缀,变成rainbow@rainbow.linuxfane.com  
    ======================================================================
    defaulthost  
    用来定义主机名,用来向地址中不含主机名的邮件补足邮件地址的。类似于defaultdomain。  
    例如:defaulthost值为linuxfane.com 那么发送给 rainbow的消息,将被qmail-inject用defaulthost的值来补足为rainbow@linuxfane.com,  以便于qmail-send快速分辨是否属于本地地址。  
    ======================================================================
    idhost  
    用来指定邮件中Message-ID:头字段的主机名例如:idhost值为linuxfane.com那么邮件头中如下:  
    Message-ID:<1234567890.12345.qmail@linuxfane.com>  
    如果idhost值为rainbow.linuxfane.com那么邮件头中如下:  
    Message-ID:<1234567890.12345.qmail@rainbow.linuxfane.com>  
    ======================================================================
    plusdomain  
    用来将其值添加在任何一个以一个+号结尾的地址  

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    qmail-qmqpc
    qmail-qmqpc是快速邮件排队协议(QMQP)使用的程序,QMQP是一个QMAIL专用协议,用在工作站级QMAIL服务器向中心服务器发送队列。  
    ======================================================================
    qmqpservers  
    用来指定qmail-qmqpc使用的上级服务器通常该功能应用很少,我认为qmail-qmqpc用法就是代替qmail-queue来直接传给上级服务器。  



    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    qmail-remote
    qmail-remote通过SMTP协议向远程主机传送邮件。
    ======================================================================
    helohost  
    该文件用来指定qmail-remote程序与远程邮件主机SMTP会话中的主机名。
    ======================================================================
    smtproutes
    用来指定到固定目的的静态SMTP路线。例子:smtproutes内容如下:
    rainbow.linuxfane.com:mail8.rainbow.jp
    :fw.rainbow.linuxfane.com:8088
    第一行的存在会将发给rainbow.linuxfane.com的邮件重定向到mail8.rainbow.jp主机  
    第二行的存在会将任何不符合之前行条件的邮件重定向到fw.rainbow.linuxfane.com的8088端口,让邮件安全的穿越防火墙qmmail-remote将按照smtproutes中的行序来进行处理  
    ======================================================================
    timeoutconnect
    用来指定qmail-remote尝试同一个远程邮件主机建立一个SMTP会话的时间。默认值状态下如果超出60秒没有得到远程邮件主机的回应,那么将断开连接。  
    ======================================================================
    timeoutremote
    用来指定qmail-remote在一个SMTP连接已经建立后,远程邮件主机的每一个回应的时间数。默认值为1200秒。  

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    qmail-send
    qmail-send用来检测队列中每一个邮件的状态,并调用相应的程序进行处理。例如一个目的为本地的邮件将会被qmail-send调用qmail-lspawn处理。  
    ======================================================================
    bouncefrom | bouncehost  
    默认情况下,退回给原始发送方的邮件的发件人地址为MAILER-DAEMON@HOSTNAME,如果你想修改  
    MAILER-DAEMON这段,那么就修改bouncefrom文件吧。如果想修改MAILER-DAEMON@HOSTNAME中HOSTNAME这段,那么就修改bouncehost文件。  
    例如:bouncefrom内容为SERVER-MANAGER | bouncehost文件内容为mail8.rainbow.jp  
    那么一封因为邮件地址不存在而被退回的通知邮件的发件人将是 SERVER-MANAGER@mail8.rainbow.jp  
    ======================================================================
    concurrencylocal  
    用来决定qmail可以同时运行的本地投递进程的数目,默认值是10,标准安装的qmail最大可设值是120。安装的时候可以通过修改conf-spawn来将其变为255以下任何数目。
    ======================================================================
    concurrencyremote  
    用来决定qmail可以同时运行的远程投递进程的数目,默认值是20,就是说,qmail可以在同一时间内同时发送20封邮件,标准安装的qmail最大可设值是120。安装的时候可以通过修改conf-spawn来将其变为255以下任何数目。  
    ======================================================================
    doublebouncehost | doublebounceto  
    这两个控制文件类似于bouncefrom和bouncehost的关系,也是doublebouncehost指定主机名,doublebounceto指定用户名。他们的功能是为一个被退回两次的邮件制定一条出路。例如:doublebouncehost内容为rainbow.linuxfane.com | doublebounceto内容为rainbow那么一个被退回2次的邮件将被发送给rainbow@rainbow.linuxfane.com没有这两个文件的时候,那么发送给postmaster@me文件中的域名  
    ======================================================================
    envnoathost  
    ======================================================================
    qmail-send用来给没有主机名的邮件收件人制定一个主机名的,通常这个文件并没有必要,qmail-send总是使用me文件中的域名。  
    ======================================================================
    locals
    用来为qmail指明位于本地的邮件地址。qmail-send利用此文件来判断收件人地址是否是一个本地地址。  
    例如:locals文件中写有rainbow.linuxfane.com 那么qmail-send检测到队列中有发送给@rainbow.linuxfane.com的邮件的时候,就会调用qmail-lspawn  来进行本地投送。  
    ======================================================================
    me  
    如果没有me文件,那么你的qmail将拒绝执行。me文件用来指定本地邮件服务器的主机名。以上列出的许多控制文件在没有被创建的时候,qmail都会用me中的值来代替。  
    ======================================================================
    percenthack  
    在UUCP协议中带有%并在该文件中列出的地址将会被转换为一个标准的DNS格式主机名。  
    ======================================================================
    queuelifetime  
    用来指定一个邮件在队列中的最大存活时间,默认是604800秒,当一个邮件达到这个时间线后,qmail将最后一次尝试发送这封邮件,如果依然失败,会将其从队列中删除。
    ======================================================================
    virtualdomains  
    让qmail接受本地邮件以外,还接受该文件中指定的域或者邮件地址,就是常说的虚拟域支持。  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    qmail-smtpd  
    qmail-smtpd接受远程主机的邮件并转交给队列处理程序qmail-queue来处理。  
    ======================================================================
    badmailfrom  
    用来指定不喜欢的发件人的邮件地址或者是域名  
    例如:badmailfrom中写有  
    advt@msn.com  
    @hotmail.com  
    如果advt@msn.com给该邮件主机送信时,将得到code 553,告知其是一个不受欢迎的发件人。  
    而所有来自hotmail.com的发件人也将得到同样的code 553。  

    ======================================================================
    databytes  
    用来指定该邮件服务器可以接受邮件的最大字节数。  
    例如:databytes指定为8000000  那么如果有人给该主机发送的邮件字节数超过了这个商业上默认的最大容忍限度,将得到code 552,告知其邮件大小超出了该邮件主机所能容忍的限度。恐怖的是,默认状态下,这个文件并没有,如果有人用你服务器上的两个不存在的地址作为FROM/TO发一个100M的邮件
    ======================================================================
    localiphost  
    用来为使用ip来标示目的主机的邮件消息指定本地主机名的例如:rainbow.linuxfane.com的ip地址为198.17.1.2 | localiphost内容为rainbow.linuxfane.com那么一封发送给rainbow@[198.17.1.2]的邮件的地址会被转换为rainbow@rainbow.linuxfane.com  
    ======================================================================
    rcpthosts | morercpthosts  
    这两个文件用来指定qmail可以接收的除本地主机名外的其他域名他们的作用是相同的,不过因为rcpthosts中的域名不能超过50行,所以才出现了morercpthosts文件
    ======================================================================
    timeoutsmtpd  
    用来指定qmail-smtpd等待远程SMTP主机发送数据的时间线。默认的情况下,如果连接建立后1200秒内没有接受到远程SMTP主机的任何信息,那么将关闭这个连接。  
    ======================================================================
    smtpgreeting  
    用来指定SMTP连接的欢迎标志例如:smtpgreeting值为 welcome connect to out open relay mail server - ad.rainbow.linuxfane.com 那么建立一个smtp连接的时候将会看到如下信息:  
    Trying 198.17.x.x...  
    Connected to ad.rainbow.linuxfane.com.  
    Escape characteris ^].  
    220 welcome connect to out open relay mail server - ad.rainbow.linuxfane.com ESMTP

    论坛徽章:
    0
    39 [报告]
    发表于 2006-06-20 12:04 |只看该作者
    qmail控制文件速查

    badmailfrom  
    bouncefrom  
    bouncehost  
    concurrencylocal  
    concurrencyremote  
    databytes  
    defaultdomain  
    defaulthost  
    doublebouncehost  
    doublebounceto  
    envnoathost  
    helohost  
    idhost  
    localiphost  
    locals  
    me  
    morercpthosts  
    percenthack  
    plusdomain  
    qmail-inject  
    qmail-qmqpc  
    qmail-remote  
    qmail-send  
    qmail-smtpd  
    qmqpservers  
    queuelifetime  
    rcpthosts  
    smtpgreeting  
    smtproutes  
    timeoutconnect  
    timeoutremote  
    timeoutsmtpd  
    virtualdomains  











    qmail的配置文件是由多个文件组成的,不是集中在一个文件中,每个文件控制相应部分的功能和属性,一个可执行程序可能有多个配置文件控制,所有的配置文件共同决定了qmail运行的实现和模式。这些配置文件都在qmail的control目录中,一般位于位于/var/qmail/control目录中。


    badmailfrom  
    这个配置文件是控制邮件系统拒绝接收的邮件地址和邮件域,主要是为了防止垃圾邮件。如果一个邮件地址或者邮件域被列入到这个文件中,系统就会拒绝接收这个邮件地址发来的邮件,或者拒绝邮件域下所有邮件地址发来的邮件。不过这个配置文件只是一般的垃圾邮件防范手段,对于比较全面的垃圾邮件过滤技术还要靠第三方软件来实现。该文件的格式如下:
    11@11.com    //拒绝这个地址发来的邮件
    22@2w.com
    @33.com      //拒绝这个邮件域下的所有帐号发来的邮件
    @44.com


    bouncefrom  bouncehost  

    bouceform是定义当邮件投递失败时系统返回给发送者一个包含失败信息的邮件时的发送者。如果不存在这个文件,默认的发送者是MAILER-DAEMON。比如本文的
    echo postmaster > /var/qmail/control/bouncefrom
    就是定义投递者为postmaster,这样所有投递失败的返回邮件的发送者就成了postmaster。

    默认情况下,退回给原始发送方的邮件的发件人地址为MAILER-DAEMON@HOSTNAME,如果你想修改  
    MAILER-DAEMON这段,那么就修改bouncefrom文件吧。  
    如果想修改MAILER-DAEMON@HOSTNAME中HOSTNAME这段,那么就修改bouncehost文件。  
    例如:bouncefrom内容为SERVER-MANAGER | bouncehost文件内容为mail8.rainbow.jp  
    那么一封因为邮件地址不存在而被退回的通知邮件的发件人将是 SERVER-MANAGER@mail8.rainbow.jp  




    concurrencylocal  
    用来决定qmail可以同时运行的本地投递进程的数目,默认值是10,标准安装的qmail最大可设值是120。  
    安装的时候可以通过修改conf-spawn来将其变为255以下任何数目。  


    concurrencyremote  
    这个参数定义了qmail可以同时投递的远端邮件的个数,这个参数的缺省值是20。这个参数的最大值也是由conf-spawn来决定的。



    databytes  

    它定义了qmail-smtpd所允许接收的邮件的最大字节数。这个参数的缺省值为0,表示对接收邮件的字节数没有限制。如果要限制最大的接收为10M,操作如下:
    echo 10485760 > /var/qmail/control/databytes
            这是任何大于10M的邮件都会被拒绝。这个参数最好设置上,以避免恶意的对你服务器发送大量的超大邮件,产生邮件服务器负荷过大,甚至系统崩溃的危险。



    defaultdomain  

    它主要用于邮件用户在投递给同一邮件服务器的邮件用户时的邮件投递处理,比如邮件服务器cnunix.com.cn用户user发送邮件给另一个邮件用户user1@cnunix,这实qmail-inject会将defaultdomain中定义的邮件域名加入到这个邮件的目标地址中,qmail会自动认为这个邮件的目标地址是user1@cnunix.com.cn,并按照这个地址进行投递。当这个文件不存在的时候,qmail会从配置文件me中读取这个参数。如果系统变量QMAILDEFAULTDOMAIN已经设置,defaultdomain定义的参数将被忽略。



    defaulthost  

    它和defaultdomain类似,当邮件系统接收到没有目标主机名的邮件时,这个设置文件定义了系统往这个邮件中加入的目标主机名名称。在缺省情况下,qmail-inject会将defaulthost中定义的名称加入到没有定义投递邮件地址的邮件的目标主机名中,如果defaulthost不存在,加入的目标主机名将时字符串“defaulthost”,defaulthost主要用于邮件用户在投递给同一邮件服务器的邮件进行投递处理。如果系统变量QMAILDEFAULTHOST已经设置,defaulthost定义的参数将被忽略。


    doublebouncehost  
    这个配置文件定义了出现“双重反弹”的时候,系统转发的邮件的主机名称。“双重反弹”就是当系统因为投递失败将邮件返回给发送者时,发送者又将此邮件返回,这个时候qmail将会把这个邮件转发到另一个邮件地址,一般这个地址就是管理员的地址。doublebouncehost就是定义这个转发的邮件地址的主机名部分,而这个邮件地址的用户名部分是由doublebouceto来定义的,因此这两个配置文件一般都是结合起来使用的。当doublebouncehost不存在的时候,系统将会从配置文件me中读取这个参数

    doublebounceto  
    这个参说是结合blebouncehost来使用的,当这个参数不存在的时候,系统缺省值是postmaster用户。

    doublebouncehost | doublebounceto  
    这两个控制文件类似于bouncefrom和bouncehost的关系,也是doublebouncehost指定主机名,doublebounceto指定用户名。他们的功能是为一个被退回两次的邮件制定一条出路。例如:doublebouncehost内容为rainbow.linuxfane.com | doublebounceto内容为rainbow那么一个被退回2次的邮件将被发送给rainbow@rainbow.linuxfane.com 没有这两个文件的时候,那么发送给postmaster@me文件中的域名


    envnoathost




    helohost  
    这个配置文件定义了当程序qmail-remote和远程邮件系统建立连接时所使用的主机名。如果这个配置文件不存在,系统将会从配置文件me中读取这个参数值,如果me不存在,qmail-remote将不能正常运行工作。



    idhost  
    用来指定邮件中Message-ID:头字段的主机名  
    例如:idhost值为linuxfane.com  
    那么邮件头中如下:  
    Message-ID:<1234567890.12345.qmail@linuxfane.com>  
    如果idhost值为rainbow.linuxfane.com  
    那么邮件头中如下:  
    Message-ID:<1234567890.12345.qmail@rainbow.linuxfane.com>  




    localiphost  
    用来为使用ip来标示目的主机的邮件消息指定本地主机名的例如:rainbow.linuxfane.com的ip地址为198.17.1.2 | localiphost内容为rainbow.linuxfane.com那么一封发送给rainbow@[198.17.1.2]的邮件的地址会被转换为rainbow@rainbow.linuxfane.com


    locals  

    这个配置文件是定义本地邮件域的,在qmail-send处理邮件投递时,将会使用locals定义的值和邮件的目标地址进行比较,如果相同,系统就会将这个邮件投递到本地交给qmail-lspawn来处理。如果一个邮件的目标主机名在locals找不到,系统将会把这个邮件投递到远端邮件服务器系统,即使这个邮件的目标地址可能是本地邮件系统的。如果locals不存在,系统将会从配置文件me中读取这个参数,如果me不存在,qmail-send将不能正常运行。





    me  
    这个配置文件是qmail系统十分重要的一个文件,如果这个文件不存在,qmail系统将无法运行。me是用来定义本地邮件服务器的主机名的,上面已经介绍到了,有多个配置文件是和me有关联的,如果那些配置文件不存在系统默认会从me中读取参数值的。me这个配置文件一般都是在qmail系统安装时使用configure-fast来创建的,在上面qmail系统安装的时候已经使用过了这个参数。





    morercpthosts  
    rcpthosts | morercpthosts  
    这两个文件用来指定qmail可以接收的除本地主机名外的其他域名他们的作用是相同的,不过因为rcpthosts中的域名不能超过50行,所以才出现了morercpthosts文件  



    timeoutsmtpd  
    用来指定qmail-smtpd等待远程SMTP主机发送数据的时间线。默认的情况下,如果连接建立后1200秒内没有接受到远程SMTP主机的任何信息,那么将关闭这个连接。  


    percenthack  
    在UUCP协议中带有%并在该文件中列出的地址将会被转换为一个标准的DNS格式主机名。  


    plusdomain  
    用来将其值添加在任何一个以一个+号结尾的地址  


    qmail-inject
    qmail-inject接受本地邮件消息后检测邮件头是否符合RFC822标准,并传送给qmail-queue排进队列  


    qmail-qmqpc  
    qmail-qmqpc是快速邮件排队协议(QMQP)使用的程序,QMQP是一个QMAIL专用协议,用在工作站级QMAIL服务器向中心服务器发送队列。  


    qmail-remote  
    qmail-remote通过SMTP协议向远程主机传送邮件。  


    qmail-send
    qmail-send用来检测队列中每一个邮件的状态,并调用相应的程序进行处理。例如一个目的为本地的邮件将会被qmail-send调用qmail-lspawn处理。  


    qmail-smtpd  
    qmail-smtpd接受远程主机的邮件并转交给队列处理程序qmail-queue来处理。


    qmqpservers  
    用来指定qmail-qmqpc使用的上级服务器  
    通常该功能应用很少,我认为qmail-qmqpc用法就是代替qmail-queue来直接传给上级服务器。  


    queuelifetime
    这个配置文件是定义一个邮件在邮件队列中存活的时间,缺省值为7天(604800s),这个期限掉了以后qmail-send将会进行最后一次的投递尝试,如果投递失败,该邮件将会从邮件队列中删除。


    rcpthosts  
    这个配置文件也是qmail一个十分重要的文件,这个文件是定义系统允许转发邮件的邮件域,如果这个文件不存在或者为空,你的系统将会接收Internet上所有的域的邮件转发,即你的系统是Open relay。配置文件rcpthosts最多可以支持50个主机名和域名,如果超个这个数字,就需要保存到他的扩充配置文件morercphosts中,然后使用qmail的命令程序qmail-newmrh(在本系统中,该文件在/var/qmail/bin目录下)来生成二进制的morercpthosts.cdb文件,这样qmail-smtpd才可以从这个二进制文件中读取信息。
    rcpthosts | morercpthosts  
    这两个文件用来指定qmail可以接收的除本地主机名外的其他域名他们的作用是相同的,不过因为rcpthosts中的域名不能超过50行,所以才出现了morercpthosts文件  


    smtpgreeting  
    这个配置文件定义了用户在登录SMTP服务时显示的系统欢迎信息。修改这个信息可以掩盖一些你的系统的本身的信息,可以相对的迷惑一下登录者。:)


    smtproutes
    这个配置文件是定义qmail邮件系统的静态SMTP路由表信息的,他的格式应该是:
    HOST: targetHOST   //HOST可以是主机名或者域名。这行所表示的是意思是将所有目标是HOST的邮件转发到targetHOST邮件服务器中,这个是最常规的表示方式。
    下面给一些例子和一些特殊的表示方法:
    cnunix.com.cn:cnunix.com   //这行表示的意思是将所有发往cnunix.com.cn的邮件全部转发到cnunix.com这个邮件服务器。qmail不会在cnunix.com.cn邮件服务器中投递时查询DNS中的MX记录,直接投递到cnunix.com邮件服务器中,加快了投递的速度。
    .cnunix.net:     //这行表示强迫qmail对DNS的MX记录进行查询,因为没有定义转发的主机名,qmail将在DNS中查询任何以.cnunix.net结尾的邮件服务器
    :mail.cnunix.com.cn:2525   //这行定义表示所有发往该机器的所有邮件都将会转发到mail.cnunix.com.cn这个邮件服务器,并且转发到对方的2525端口,这个方式一般都是做邮件网关时用的到的。
            
    注意:smtproutes如果设置不正确或者DNS的变动会产生邮件的循环投递。   


    timeoutconnect  
    这个配置文件定义了qmail-remote在和远端SMTP服务器在SMTP连接断开以前接受一个新的连接等待的最大时间(单位为秒s),默认值为一分钟(60s)。如果你的网络连接速率比较低,就需要相应的调整这个参数到一个适合的值。


    timeoutremote  
    这个配置文件定义了qmail-remote等待远端的SMTP服务器相应时等待的最大时间,默认值为20分钟(1200s),如果到达这个最大值没有相应,qmail才和对方断开连接并且把失败的记录写到qmail的日志中。

    timeoutsmtpd  
    用来指定qmail-smtpd等待远程SMTP主机发送数据的时间线。默认的情况下,如果连接建立后1200秒内没有接受到远程SMTP主机的任何信息,那么将关闭这个连接。  


    virtualdomains  
    这也是qmail的一个非常重要的配置文件,它定义了qmail的虚拟邮件域,qmail结合vpopmail的虚拟域管理功能可以定义多个虚拟邮件域。

    论坛徽章:
    0
    40 [报告]
    发表于 2006-06-20 12:05 |只看该作者
    FreeBSD全能服务器安装手册之常用命令详解篇
    --packages使用方法讲解
    安装 packages

    目前 FreeBSD 的 packages 是由 .tgz 所打包。如果想安装一个 packages ,可使用 pkg_add,如安装一个 joe 的 tgz:

    pkg_add joe-{version}.tgz

    强制安装 packages
    由於有些 packages 会有与其他 packages 相依性的关系,所以必须先行安装那些 packages 才能正常安装。 如果须要强制安装 packages ,可以不须安装那些有相依性 packages ,但要注意的是强制安装的结果可能会导致执行或运作的不正常。强制安装 packages 的指令如下,如强制安装一个 joe 的 tgz:
    pkg_add -f joe-{version}.tgz  

    查询 packages 与其他 packages 之间的相依性

    由於有些 packages 会有与其他 packages 相依性的关系,所以必须先行安装那些 packages 才能正常安装。 查询 packages 与其他 packages 之间的相依性的指令如下,如查询与 portupgrade 相依的其他 packages:

    pkg_info -r portupgrade-{version}.tgz  

    远端安装 packages

    有两种设定方式,首先是 PACKAGEROOT,如:

    setenv PACKAGEROOT ftp://ftp.cn.freebsd.org #设定 PACKAGEROOT 为 ftp.cn.freebsd.org 站台另一种方式是设定 PACKAGESITE,好处是若该站台的 packages 仓储并不是符合
    官方的设定或你想自己指定一个路径。以 ftp.cn.freebsd.org i386 的 current pakcages 为例:

    setenv PACKAGESITE ftp://ftp.cn.freebsd.org/pub/Fre ... ges-current/Latest/
    两种方式选择其中一种皆可,接下来的步骤都一样。 往後要安装 packages 的时候,如 portupgrade 的话,则:

    pkg_add -r portupgrade  
    则系统会自动於 ftp.cn.freebsd.org 下载所有与 portupgrade 相依的 packages 并安装。


    查询目前系统安装了哪些套件

    查询目前系统已安装的全部套件:
    pkg_info  

    查询目前系统有没有安装这个关键字的套件
    pkg_info | grep  

    查询某个档案是属於哪些套件

    如果想查询 /usr/local/bin/joe 是属於哪个套件的话,则:

    pkg_info -W /usr/local/bin/joe  
    如果没有回传任何资讯的话,代表着这个档案是由 FreeBSD 内建的。

    查询某个套件安装了哪些档案

    如果想查询目前系统所安装的 joe 包含了哪些档案,则:

    pkg_info -L /var/db/pkg/joe-{version}


    列出所有可以升级的 ports

    ports collection 的更新速度很快,在每次更新 ports collections 後,往往会出现比目前现在安装的套件还新的版本,可 以令系统自行整理并提供可升级套件的列表:

    pkg_version –c

    移除已安装的 ports
    以 editors/joe 为例的话,则:
    cd /usr/ports/editors/joe/
    make deinstall  
    或是使用 pkg_delete
    cd /var/db/pkg/
    pkg_delete joe-{version}  
    有时候套件之间的相依性会导致无法直接移除,如果要强制移除的话,则:
    cd /var/db/pkg/
    pkg_delete -f joe-{version}但很有可能会导致其它的套件执行起来出现问题。



    一并移除所相依的 ports
    以 sysutils/portupgrade 为例的话,则:
    cd /usr/ports/sysutils/portupgrade/
    make deinstall-depends  
    执行此步骤前,请注意是否会移除应该保护的套件。
    或是使用 pkg_delete
    cd /var/db/pkg/
    pkg_delete -r portupgrade-{version}  

    对一个已经安装的 port 打包

    如果安装好一个套软,事前并未打包,事後想打包的话,则:
    以 editors/joe 为例的话

    cd /var/db/pkg/
    pkg_create -b joe-{版本号}
    会将已安装的 port 打包起来,放在 /var/db/pkg/ 目录下。

    `make deinstall' 与 `pkg_delete' 有什麽不同

    简单来说,`make deinstall' 会移除该 port,并且不会叁照其相依/相关的 ports。 `pkg_delete' 在移除该 port 前,会叁照其相依/相关的 ports,并且 `pkg_delete' 有支援 wild card,如要移除所有 p 开头的 ports,则:

    cd /var/db/pkg/
    pkg_delete p*
    要注意的是,如果使用 `make deinstall',则最好确定系统目前所安装的版本,与 ports collection 中显示的版本符合,否则有可能会出现非预期性错误;而 `pkg_delete' 是因为直接删除系统中所安装的版本,所以没有此问题。

    因此,换句话说,当系统所安装的版本符合 ports collections 中的版本,则可以使用 `make deinstall' 或 `pkg_delete',否则的话最好用 `pkg_delete'。


    对一个已经安装的 port 打包

    如果安装好一个套软,事前并未打包,事後想打包的话,则:
    以 editors/joe 为例的话

    cd /var/db/pkg/
    pkg_create -b joe-{版本号}
    会将已安装的 port 打包起来,放在 /var/db/pkg/ 目录下。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP