Copyright © 1999 - 2004 The Jabber Manual Team
中文翻译:顺风飞扬
概述本文将介绍如何1.4.x Jabberd服务器的安装、配置和管理。
简介jabberd服务器是第一个实现Jabber通信协议的开源服务器,同时也是公司或公共的IM服务中最流行的Jabber通信实现。不过,现实中同样存在许多其它Jabber服务器实现,包括许多开源项目和商业化的版本。作为管理Jabber协议的组织,Jabber软件基金会(JSF)对不同的Jabber实现不作区分。同时,JSF认识到绝大多数的Jabber服务器都是从使用jabberd服务器开始的,JSF也试图通过文档化如何安装、配置、管理jabberd服务器来推广Jabber技术。
为了支持相关的jabberd,管理员被鼓励订阅JADMIN mailing list (archive)。需要获得更多关于Jabber信息,请访问Jabber软件基金会的主页http://www.jabber.org/。
背景Jabber项目由Jeremie Miller在1998年开始的一个免费、开源的项目,用于提供给AIM、ICQ、MSN、Yahoo的IM服务。在1999年的一月,Jabber项目在Slashdot第一次引起了公众的注意。Jabber项目的核心通常都是jabberd服务器,一个用C编写,使用了GNU的pth线程库的模块化的服务器。经过超过一年多时间的开发,jabberd 1.0在2000年五月发布。过渡性质的1.2版本于2000年十月发布,紧接着2001年1月发布了1.4版本,2001年4月发布1.4.1版本,2002年2月发布1.4.2版本,2003年11月发布1.4.3版本。
在开发jabberd 1.4.x版本的同时,jabberd 2 也被开发出来,并在2003年12月有了首个稳定版本。Jabberd 2几乎重写了所有代码,比如SQL的支持。
Jabberd 1.4.x服务器的目标是完全遵循Jabber软件基金会制定的XMPP协议。但是,XMPP协议本身是一个新的标准,jabberd1.4.3不支持一些XMPP的功能。不过它还是能够连接支持XMPP协议的服务器和客户端。
核心功能一般来说,一个Jabber服务器需要提供下列功能:
l 接受兼容jabber协议的客户端和服务端组件的TCP套接字连接。
l 处理来自这些客户端和服务器组件发来的XML流。
l 转发核心Jabber数据类型(<message/>, <presence/>, <iq/>),对客户端和组件进行认证。
l 保持和已连接的客户端(通常是IM用户)的会话信息。
l 如果有必要,建立到其它Jabber服务器的连接以及接受来自其他Jabber服务器的连接,然后路由数据到其它Jabber服务器。
l 保存组件尤其是IM用户的行为信息,包括每个用户的联系人列表和一些客户端的参数。
其他功能——如多用户聊天,用户向导,以及与传统IM系统(AIM、ICQ、MSN、Yahoo)的协同合作,不属于Jabber服务器的核心消息系统和presence功能,所以在本向导中将不被提及。如果你的Jabber服务器需要增加这些功能,请查看《Jabber组件向导》(http://jabberd.jabberstudio.org/1.4/doc/componentguide)获取相关信息。
准备配置你的Jabber在安装任何软件之前,特别是象Jabber服务器这种以网络为基础的软件,确认你的需求,并计划好你的配置是十分重要的。Jabber服务器并普遍应用于多种环境,包括:
l 小型开发小组
l 中小型企业内部网
l 大学
l 网页为基础的社区
l 互联网服务提供商
l 大型公司内部网
你如何使用你的Jabber服务器决定了硬件的配置,如操作系统、带宽、网络配置、防火墙、安全、数据库连接等等。你首先要决定的是在什么操作系统上运行你的Jabber服务器。Jabber服务器被设计和开发用于Linux和其他类型的Unix系统(包括AIX,Solaris,HP-UX、BSD、Mac OS X)。当jabberd服务器在Windows工作的并不出色,也不推荐在Windows下使用。(本文档将不设计Windows部分)。
另外,你想提供的服务的带宽也很重要。你是需要简单的点对点的消息和presence?还是也需要多用户组聊?你想在你的服务器上建立一个用户的目录吗?你想你的Jabber服务器的用户与传统IM服务如AIM、ICQ、MSN、Yahoo互连吗?默认的jabberd安装不提供这些服务,必须使用附加的组件。这些在改善用户体验的同时,也使得你的配置更加复杂,管理更加困难。(详细内容,参见《Jabber组件向导》)。
最后,考虑一下如何整合Jabber与已有的网络系统及信息源。比如,你想保证没一个人的Jabber用户名与他们的email地址或者网络用户名一致。或者你需要使用一个已有的用户数据库来进行认证(比如你公司的LDAP数据库),而不是默认的文件系统存储方式。这里再一次出现你的需求会导致额外的复杂度的问题。
系统要求这个部分介绍如何定义运行Jabber服务器的系统需求。
操作系统jabberd服务器主要是在GNU/Linux下开发并进行配置的,在其它很多Unix操作系统上也经过了测试。1.4.x版本的jabberd可以运行在下列操作系统:
l AIX
l FreeBSD
l HP-UX
l IRIX
l Linux
l Mac OS X
l NetBSD
l OpenBSD
l Solaris2.6,7,8
上诉非Linux操作系统不如Linux使用的广泛,所以有可能(也可能未必)你在其他Unix系统上安装jabberd碰到一些麻烦。每个操作系统上已知的,经常用到的需求和介绍,在本文中都会提到。一般来说,非GNU的Unix操作系统需要使用GNU,来代替你的操作系统自带的make编程系统。使用GNU的make可以解决大多数在非GNU操作系统上运行jabberd可能碰到的问题。
注意:本文不涉及Windows下的jabberd1.4.x。
硬件你的硬件配置决定于你的用户数。根据作者的经验,主要的jabberd配置一般用于小型项目、企业内部互连网服务器、开发平台等等,拥有大概100到1000注册用户。由于基本上50%的用户不会在同一时间在线(如jabber.org上运行的jabberd服务器通常只有2%注册用户在线),我们能大概预计你jabberd上可能的最大同时在线人数为500。对这种的配置,硬件要求最小是一个512M的RAM的奔腾级别的处理器。
如果你进行大容量的配置,你需要做一些判断。经过试验,当jabberd服务器上最多有10000个用户同时并发,jabberd是作为一个实验性的概念来设计的,而不是为互联网服务提供商提供一个工业化强度的服务器。比如,根据你使用的操作系统,你可能需要修改操作系统级别,来设置操作系统可以处理的并发的TCP连接数量,或者文件数目(在Linux中,在proc设置中,默认的文件打开数限制在1024)。因为大型的配置超出绝大多数Jabber服务器配置的使用范围,本文中将不予讨论,虽然我希望在以后的修订版本中加入更多关于缩放服务器配置的内容。
软件jabberd1.4.x服务器需要下列软件:
l GNU pth 线程库。如果你不是手工安装,但可以从你的Unix系统中找到它的库,不要忘记安装库的头文件。要知道,jabber1.4.2与GNY Pth>1.4.0版本不兼容(服务器――服务器的连接会失败)!jabber1.4.3不受影响,在GNU Pth1.4.0,1.4.1以及2.0下工作良好。
l GNU make GNU make是所有GNU/Linux操作系统的一个标准部分,但必须在非GNU系统(如FreeBSD、Solaris)上单独安装,不像GNU pth,你必须自己安装GNU make(jabberd不会自动安装)。
l OpenSSL 这个是可选的。不过,如果你希望客户端通过SSL连接你的服务器,你必须在安装jabberd1.4.x前安装OpenSSL。
带宽在普通使用的情况下,一个Jabber服务器需要大约为每个连接上来的用户提供15比特每秒的带宽。这意味着一个支持1000并发用户的服务器需要消耗大约15Kbs的带宽,10000并发用户需要消耗150kbs的带宽,以此类推。注意这是对并发用户而言,不是对注册用户(并发用户数决定于你的配置,对于服务提供商而言,一般平均不会超过注册用户数的5%,对于一个企业,一般少于50%的注册用户)。据此制定你的配置。
DNS下面将会有更详细的介绍,你可能会想配置你的jabberd服务器来运行一个完全合法的域名(FQDN,比如,jabber.mydomain.org——而不是localhost,jabberv.mycompany.intranet或者IP地址)。这个对于对于你的jabberd相关服务的子域名也是真实的(如一个你的Jabber服务器上的Jabber用户目录或会议服务)。因此,你可能会请求你的系统管理员将你的主机名和所有相关的子域名加到你的域名DNS表中。
端口和防火墙IANA任务认为Jabber服务需要两个端口:一个端口提供客户端到服务器的通信(5222端口),一个提供服务器到服务器的通信(5269端口)。如果你希望Jabber客户端可以连到你的服务器,你需要确保5222端口的TCP通信是开着的。如果你希望你的Jabber服务器的用户可以发送消息给其他Jabber服务器的用户,你需要保证5269端口的TCP通信是为进来的连接打开。另外,如果你想安装其他IM系统的网关,你需要打开其他端口来对应制定的系统。请查阅README或其他你想安装的网关软件的文档,来获取你需要开发的端口的详细信息(如MSN网关需要1863)。
一些Jabber服务器配置在一个公司的内部互联网中或在一个防火墙后面。如果你不想开放你的服务器到其他你组织外的Jabber服务器的通信,你当然可能想到要打开任何端口。在某些情况下(比如你的组织有远程办公的员工),你可能想打开标准的Jabber客户端口5222(或者是SSL连接的5223端口),这样防火墙的外部用户就可以建立到你的服务器的连接。另外,如果你希望你的服务器上的用户与外部服务器的用户进行通信,你需要打开标准的Jabber服务器端口5269来建立服务器到服务器的连接。一个更复杂的配置可以配一个在防火墙后面的对内部用户的服务器,一个在DMZ上对外部用户的服务器,和这两个服务器之间在5269端口上建立一个可信任的服务器到服务器通道。
如果你在Jabber服务器和你的服务器上所有用户之间有一个防火墙,保证你的防火墙的超时设置和Jabber一致。Jabber用户连接到服务器上使用的是在5222端口上的长TCP套接字连接,理解这一点很重要。因为TCP套接字在用户与服务器一开始会话就建立,防火墙的对于HTTP通信的最优化的超时处理可能会断开Jabber用户的连接。
快速安装1、 保证你已经安装了GNU Pth。
2、 从jabberd的主页上获取jabberd的源代码
3、 Untar(解压), ./configure,make
4、 启动jabberd:jabberd/jabberd –h jabberserverhostname
通常,你需要在jabberd的配置文件中输入主机名,但jabber:cmdline使得现在可以通过命令行输入参数。
5、 使用你喜爱的Jabber客户端来注册你的服务器。
如果你碰到问题请继续。
服务器安装1.4.x版本的jabberd服务器可以从http://jabberd.jabberstudio.org/1.4/下载,这个目录包括根据不同平台而不同的任意builds(Solaris builds,RPMs,debs,等等)。再次请注意这里只包含jabber服务器核心代码——附加的组件可以放到其它任意地方(参见《组件管理向导》)。
因为一些服务器管理员在其他builds和jabber服务器分发时碰到一些问题,所以我们推荐从源代码开始安装服务器。这样你只需要下载jabberd 1.4.x的tar包(.tar.gz)来安装,按下面进行操作:
1、 保存文件到/tmp/(或其他目录)。
2、 打开一个控制台窗口,并建立一个目录,在该目录建立jabberd。我们假定该路径为/path/to/jabber/(一个典型的路径时/usr/local/jabber/)。注意:你可能需要以root登录或者使用su名来来创建这个目录。
3、 输入 mv /tmp/jabber-1.4.3.tar.gz /path/to/jabber/
4、 输入 cd /path/to/jabber/
5、 输入 gzip –d jabberd-1.4.3.tar.gz
6、 输入 tar –xvf jabberd-1.4.3.tar(这个将创建一个jabber-1.4.3 的目录,包含各种文件和子目录)。
7、 输入 cd jabberd-1.4.3/
8、 输入 ./configure
安全注意
如果你希望客户端通过SSL连接到你的服务器,你必须以一下的命令编译服务器
./configure—enable—ssl(同时,注意如果浓眉有从源码编译服务器,你不能在SSL模式下使用服务器)。
9、 输入make
操作系统注意
如果你你在Solaris或其他非GNU系统中运行,必须使用GNU make,而不用系统自带的make版本,用gmake代替make。
Jabberd1.4.3软件现在已经安装到你的机器上。如果你在安装软件时碰到问题,请到JADMIN mailing list(archive)搜索。如果你写一封email,请确认是否包含了你的jabberd安装的详细的信息(包括配置文件),你的操作系统,相关软件版本,等等。
检验点 #1现在是检查你机器上安装并即将运行的jabber的好时候。我们在这里没有武安全的进行功能性的测试,只是讲述成功的安装过程。按照下列步骤测试你的安装:
1、 打开一个控制台,输入cd /path/to/jabber/ (即你安装jabberd的路径)。
2、 输入 ls –l jabberd/jabberd 显示Jabber后台程序的权限。你的控制台的显示应该类似下面:
-rwxr-xr-x 1 user group 675892 Feb 25 2002 jabberd/jabberd
3、 输入 ./jabberd/jabberd 来启动Jabber后台程序,这样将会以默认的主机名启动服务器。你将在你的控制台上看到这样一行输出:
20020923T02:50:26: [notice] (-internal): initializing server
如果你获得了“unable to listen on(port)”的错误,请确认是否有其它程序在这些端口运行。netstat –ltp 命令可以让你获取一个后台程序的网络列表。
当你试图启动服务器时,你可能看到一个错误,该错误告诉你“Configuration parsing using jabber.xml failed”。出现这个问题有两个原因。一是你指定的文件并不存在,解决办法是输入 ./jabberd/jabberd –c /path/to/jabber.xml 指定你的配置文件的完整路径。另一个原因是文件存在,但存在XML错误,解决办法是检查你的XML(可以通过把你的完整的jabber.xm粘贴到xml.com上的XML Syntax Checker)。
4、 在同一台机器上打开一个独立的控制台窗口,输入telnet localhost 5222 来连接你的服务器(对,你可以通过使用简单而古老的telnet来连接你的服务器!)。你将看到下列信息:
Trying 127.0.0.1...
Connected to your-machine-name.
Escape character is '^]'.
5、现在在你的服务器上打开一个XML流,粘贴上下面的XML到你的telnet窗口:
<stream:stream
to='localhost'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'>
你将会立刻从你的服务器收到一个回复
<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' id='4192DC8C' xmlns='jabber:client' from='localhost'>
祝贺你!你的Jabber服务器正常工作啦!
6、 粘贴下面的XML:</stream:stream>到你的telnet窗口,来正常关闭流。
7、 通过杀死进程或者在你启动服务后台程序的窗口输入^C来中止服务器。
基本配置jabberd服务器现在已经安装好了,你可以检查一下它在你的系统上是否能运行起来。下面,我们将分两步来检验服务器的即使消息功能。
1、 配置服务器的主机名。
2、 建立一个存放XML的spool目录。
下面将讨论这两个步骤的细节。一旦你完整的走过这两步,我们将通过又一个测试的“检验点”,这样你将可以检查是否所有程序都正常工作。
配置主机名通过编辑一个叫做jabber.xml的文件来改变jabberd的配置,这个文件存放在你的/path/jabber/directory。Jabber.xml文件包含了大量的内容,这些内容将帮助你理解配置的每一个细节。不过,现在我们需要改变的是主机名。用你最喜爱的文本编辑器(vi,emacs等等)打开jabber.xml,编辑类似下列的行:
<host><jabberd:cmdline flag="h">localhost</jabberd:cmdline></host>
你现在需要决定你的Jabber服务器的主机名。
强烈推荐使用在开放的因特网上的DNS列表中的一个完整合法的域名(FQDN)。这可以保证所有的功能的可用和稳定。如果你没有到DNS服务器的权限,你可以使用一个动态域名的DNS服务。
注意一旦主机名被确定后,并且人们开始注册你的服务器,改变服务器的主机名对管理员和用户都会带来很多麻烦。所以明智的做法是在开始的时候选好主机名,然后一直使用下去。
要配置你的Jabber服务器的主机名,只需要将配置文件中所有的“localhost”替换成类似“jabber.mycompany.com”或任何你喜欢的名字,然后保存你的对jabber.xml的修改。
在后面的内容中可以看到关于DNS的更深的讨论(需要进行一些特殊的配置)。
文件系统设置如同上面提到的那样,Jabber服务器的核心功能之一就是保存用户相关信息。这个信息包括用户的认证信息(用户名、密码),以及联系人列表(在Jabber里叫做“花名册”),有时这个信息还包括用户的vCard和各种客户端的参数。默认情况下,这个信息存放在文件系统的一个/path/to/jabber/spool/的子目录下,并且必须与你之前配置的主机名相匹配。因此,如果你希望通过配置jabber.xml来使jabberd以jabber.mycompany.com这样的主机名来运行,你必须创建一个/path/to/jabber/spool/jabber.mycompany.com/的目录。另外,运行Jabber后台程序的jabberd进程必须对这个目录有读写权限。一旦你做了这些,Jabber后台程序就可以在这个路径下为每个注册到你服务器上的用户保存一个XML文件(以“username.xml”命名)。
OK,现在是测试一下你的基本配置的时候了。
检验点#2因为你已经配置了服务器的主机名,并建立了XML的存储区,你现在可以测试一些在测试点#1中不能测试的东西了:(1)从另一台机器上进行连接;(2)注册一个帐号;(3)发送一条消息给另一个用户。
为了进行测试,我们将再次使用“telnet客户端”来帮助你理解发送给服务器的XML。
1、 在/path/to/jabber/的目录下,输入./jabberd/jabberd –D 在调试模式下启动Jabber服务。你将在你的控制台窗口看到许多行调试信息。
如果你碰到“unable to listen on(port)”的错误,请确认在这些端口没有别的后台程序在运行,netstat –ltp 可以给你一个后台程序的网络列表
注意
现在你已经给你的主机配置了一个完整的真是域名,可能你会收到一个错误,告诉你“jabberd is unable to listen on port 5222 and 5269”。对这个错误,你需要配置你的服务器绑定一个固定IP地址。首先,在你的jabber.xml中的<pthcsock/>部分,将<ip port=”5269”/>改成<ip port=”5269”>yourIPaddress</ip>。然后,在你的jabber.xml的dialback部分,将<ip port=”5222”/>改成<ip port=”5222”>yourIPaddress</ip>。
2、 在同一台机器上打开一个独立的控制台窗口,输入telnet yourhostname 5222,“yourhostname”是你在你的jabber.xml文件中配置的主机名(可能是一个完整的真是域名)。一旦你再次看到下面:
Trying 127.0.0.1...
Connected to your-machine-name.
Escape character is '^]'.
如果你碰到“unknown host”的错误,表示主机名没有生效。检查你的DNS配置。
如果你碰到“connection refused”,检查你的Jabber配置,可能Jabber服务器无法监听指定的IP/接口,或者没有运行,这些可以通过输入netstat –ltp 来显示所有运行的网络后台程序。
3、 粘贴下列XML到你的telnet窗口,在你的服务器上打开一个XML流。用你配置启动jabberd的主机名替换“yourhostname”。
<stream:stream to=' yourhostname '
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'>
你将立刻收到一个来自你的服务器的回复:
<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' id='419311BD' xmlns='jabber:client' from= ‘yourhostname’ >
注意
如果你在这里断开了连接,检查你telnet的主机名和你在Jabber配置文件中配置的一致,以及你在上述的XML中的“from”标签中的主机名一致。Jabber协议在收到主机名时很书生气——需要支持它的虚拟主机名。
4、 发送下列XML,会发现你需要提供注册到这个服务器上的信息:
<iq id=’reg’ type=’get’>
<query xmlns=’jabber:iq:register’/>
</iq>
你将收到下列回复,告诉你注册到这台服务器上需要提供名称、email地址、用户名、密码:
<iq id='reg' type='result'>
<query xmlns='jabber:iq:register'><password/>
<instructions>Choose a username and password to register with this server.</instructions>
<name/>
<email/>
<mobile/>
<username/>
</query>
</iq>
注意
如果你在这里断开了连接,确认你在第四步输入的XML和在第三步中的telnet部分输入的是相同的(比如,你可能在第三步和第四步之间没有关闭或者重新打开了telnet)。
确认你telnet中的主机和jabberd.xml文件中配置的是一致的(每个主机名都必须支持小写字母)。
注意Debian Woody的Jabber包坏掉了,你必须使mod_auth_plain运行。
5、 接下来发送你的注册信息给服务器:
<iq id='reg2' type='set'>
<query xmlns='jabber:iq:register'>
<username>jabberuser</username>
<password>secret</password>
<name>myName</name>
<email>[email protected]</email>
</query>
</iq>
如果所有一切都正常工作,你将收到下列XML,提示你已经注册成功:
<iq id='reg2' type='result'/>
注意这里jabberd调试输出的一个警告:xdb_file failed to open file...: No such file or directory 是很普通的(因为用户的spool文件还没有被创建),所以可以很安全的被忽略掉。
如果你的spool目录没有正确的建立,你将收到下列XML:
<error code=’500’>Pasword Storage Failed</error></iq>
与此类似,如果你的用户名早已存在,你将收到下列XML:
<error code=’409’>Username Not Available</error></iq>
6、 现在你已经注册了一个帐号,你首先需要登录进去,象服务器询问登录需要的信息:
<iq id='auth1' type='get'>
<query xmlns='jabber:iq:auth'>
<username>jabberuser</username>
</query>
</iq>
服务器将告诉你所需要的认证信息:
<iq id='auth1' type='result'>
<query xmlns='jabber:iq:auth'>
<username>jabberuser</username>
<password/>
<digest/>
<resource/>
</query>
</iq>
注意
如果你在服务器的回复中没有看见<passwd/>,确认mod_auth_plain或者mod_auth_crypt在jabberd的配置中是否可用。
7、 你对你的密码可以选择“password”(明文)或者“digest”(密钥),为了简单起见,我们将使用明文。你必须为这个连接指定一个“resource”。这样我们将发送下列XML:
<iq id='auth2' type='set'>
<query xmlns='jabber:iq:auth'>
<username>jabberuser</username>
<password>secret</password>
<resource>telnet</resource>
</query>
</iq>
服务器将发送给我们下列XML,表示认证成功:
<iq id='auth2' type='result'/>
8、 最后,发送presence给服务器,让它知道你在线病可以接收消息:
<presence/>
服务器将立刻发送给你一条象下面这样的欢迎消息:
<message from='yourhostname' to='jabberuser@yourhostname'>
<subject>Welcome!<subject>
<body>
Welcome to the Jabber server at localhost -- we
hope you enjoy this service! For information about
how to use Jabber, visit the Jabber User's
Guide at http://docs.jabber.org/
</body>
</message>
如果需要的话,你可以通过修改jabber.xml文件中的<welcome/>元素中的文本,来修改welcome消息内容。
9、 然后,在另一台机器上重复步骤3到步骤8的操作(保证使用另一个非“jabberuser”的用户名)。如果你的主机名和DNS配置正确,另一台机器上的表现应该和你前面的机器上的表现完全一样。
当你完成所有操作后,从你第二个telnet窗口发送下列XML流:
你将在你的第一个telnet窗口收到相同的XML,另外会在显示发送者的Jabber ID的地方加上一个“from”。
祝贺你!你的Jabber服务器运行良好!
注意
你在发送消息的时候,可能会看到一个错误提示“sending name is invalid”。这是一个DNS错误。保证你能从网络的其它位置ping通你的Jabber服务器的主机名,告诉你的网络管理员,你的服务器的主机名需要一个有效的DNS入口。另外,你可能需要在你的机器上的/etc/hosts文件中添加一个到主机名的入口。
10、现在你已经通过乐检查点#2乐,在两个telnet窗口中发送</stream:stream>正常关闭XML流,然后通过杀死进程或者在启动服务的窗口中输入^C 关闭服务器。
日常用法 在开机时自动启动Jabberd在Script Repository有不少脚本,这些脚本可以用来启动/停止jabberd后台服务。这些脚本应放到/etc/init.d/下,并从/etc/rcX.d目录进行链接。如果你对这个不熟悉的话,你可以在Google中搜索“SystemV init scripts”或者“man chkconfig”(Red Hat)或者“man updaterc.d”(Debian)。
另一个启动和监控jabberd的方法是使用daemontools。
日志文件收缩Jabberd的日志文件需要进行收缩(压缩并存储,然后重新以一个空白文件开始),否则,它们会越来越大,最后会因为超过你的文件系统的最大容量或硬盘的最大容量而无法启动jabberd。因此,你应该使用logrotate或其它简单的工具,不幸的是,jabber1.4需要在日志收缩时停止,然后再启动。
授予管理员权限jabberd服务器使你可以通过配置jabber.xml文件中的<admin>部分,来赋予指定用户管理员的权限。这里主要有三个管理员权限:
1、 读取发送到指定管理员地址admin@yourjabberhostname的Jabber消息。
2、 查看当前所有在线用户信息。
3、 给在线用户广播消息的功能(如提醒所有用户,服务器需要重新启动),或者向任一登录用户发送一条“每日消息”。
在jabber.xml配置文件中的<admin>部分中的<read>元素中添加指定用户,可以赋予他们前两个权限。而发送消息的权限赋予<write>元素中的用户。下面的例子,是使用虚拟的shakespeare.com的Jabber服务器:
<admin>
<read>[email protected]</read>
<read>[email protected]</read>
<write>[email protected]</write>
</admin>
在这个例子中,Hamlet、Macbth以及King Lear都可以读取发送给管理员地址的消息,并且可以查看在线用户,但只有King Lear可以发送广播消息和每日消息(“write”权限包含读权限)。
如果你想使用任意管理员功能,确认你完整的Jabber ID在你的jabber.xml文件中的<admin/>部分。
查看在线用户要查看你的服务器上的在线用户,需要以一个管理员用户登录(在你的jabber.xml文件中定义),然后发送下面两条XML中的一条。比如通过telnet或者一个Jabber客户端连接到jabber服务器后发送XML:
<iq type="get" to="yourhostname">
<query xmlns="jabber:iq:admin">
<who/>
</query>
</iq>
或者
<iq type='get' to='yourhostname/admin'>
<query xmlns='jabber:iq:browse'/>
</iq> 发送广播消息
以一个管理员帐户(在你的jabber.xml文件中定义)登录,对所有在线用户广播消息,发送下面的XMl:
<message to="yourserver.com/announce/online">
<body>This is a broadcast message!</body>
</message>
你可以使用一个管理员帐户登录,然后发送一个消息给“yourserver.com/announce/online”,不过一些客户端抱怨丢失了JID,使用另一个客户端或上面的XML。
企业内部网安装jabberd服务器语在公共的网络上进行聊天是很合适的,比如提供与其它IM服务的消息互通。正因为如此,许多组织都在防火墙或NAT后面运行Jabber服务器,并且希望可以对这些服务器进行限制。
禁止服务器到服务器的通信将你的服务器与公开的互联网隔离,你可能想禁止你的服务器和其它任何服务器之间的通信。有几种方法来实现:
1、 在你的防火墙上关闭5269端口,因为在Jabber里这个端口是用来进行服务器对服务器的通信的。(你也可以关闭5222客户端到服务器通信端口)。
2、注释掉你的jabber.xml文件中下列行(这个部分处理外部的DNS路由,以及服务器到服务器的连接):
<service id="dnsrv">
<host/>
<load><dnsrv>dnsrv/dnsrv.so<dnsrv><load>
<dnsrv xmlns="jabber:config:dnsrv">
<resend service="_jabber._tcp">s2s</resend>
<resend>s2s</resend>
<dnsrv>
<service>
以及
<service id="s2s">
<load><dialback>dialback/dialback.so<dialback><load>
<dialback xmlns='jabber:config:dialback'>
<ip port="5269"/>
<dialback>
<service>
现在你的Jabber服务器不能与其它服务器通信了。
禁止注册
默认情况下,任何人都可以在你的Jabber服务器上注册帐号(帐号注册遵循Jabber协议,就像SMTP协议对于email)。许多Jabber服务器的管理员希望阻止这种注册。要实现这点,注释掉你的jabber.xml文件中下列行:
<!--
<register notify="yes">
<instructions>
Choose a username and password
to register with this server.
<instructions>
<name/>
<email/>
<register>
-->
以及
<!--
<mod_register>./jsm/jsm.so</mod_register>
-->
显然,如果你禁止了Jabber的注册功能,你需要通过别的方法来生成帐号,比如使用Script Repository上的脚本来生成spool文件中的用户帐号。用户的XML spool文件一般存放再./spool/(查看jabberd的配置文件,xdb_file模块)。记住运行jabberd的用户必须对spool文件有读写权限。
外部认证通过RADIUS、PAM、LDAP、IMAP、POP3、SAMBA或MySQL等方式来对jabberd1.4.x进行用户认证是可能的,只不过认证将会再外部进行处理。
关于外部认证的详细信息,参见external authentication主页。
高阶应用Jabber服务器的一些更高阶的应用在这里描述。
虚拟主机如果你希望同一个jabberd服务器实例处理多个不同的正式域名(如你有jabber.myserver1.net和jabber.myserver2.net两个域名,你希望通过一个服务器同时启用这两个域名,而不是分别安装两个jabberd),你可以配置jabberd来响应多个正式域名。这和配置WWW服务器(经常会碰到一个httpd实例对应多个不同的域名)的虚拟主机很类似。
将两个主机名加到你的jabber.xml文件中,保证两个主机名在同一行:
<service id="sessions">
...
<host>jabber.myserver1.net</host><host>jabber.myserver2.net</host>
...
</service>
通常一个Jabber服务器监听它的IP的5222或5223端口进行与客户端的连接,在5269端口上监听服务器间的连接。对于DNS SRV记录((RFC 2782),相应的客户端和服务器能通过其它端口或其它IP进行连接。这是什么意思?取代Jabber服务器在DNS上唯一记录,DNS首先需要进行SRV记录:“我想通过xmpp-client服务连接jabber.mydomain.org的服务器,我需要使用哪个IP和端口呢?”在连接服务器在5269端口的唯一实例前,遵循XMPP的服务器必须查询DNS的SRV入口。客户端需要在DNS上查询SRV入口,需要获取更多信息,参见draft-ietf-xmpp-core-19。
使用下列配置来进行绑定/命名:
jabberserverhostname. 86400 A jabberserverip
_xmpp-server._tcp.jabberserverhostname. 86400 IN SRV 5 0 5269 jabberserverhostname.
_xmpp-client._tcp.jabberserverhostname. 86400 IN SRV 5 0 5222 jabberserverhostname.
_jabber._tcp.jabberserverhostname. 86400 IN SRV 5 0 5269 jabberserverhostname.
别忘了主机后面的“.”(或者绑定指定主机名为“相关”名字,而不是正式域名)。
测试:
dig +short jabberserverhostname
返回你的Jabber服务器的IP。
dig +short _jabber._tcp.jabberserverhostname SRV
dig +short _xmpp-server._tcp.jabberserverhostname SRV
返回运行c2s服务(一般是主Jabber服务器)的机器的主机名。
性能调整一般来说一个Jabber服务器中需要最多处理能力的部分是处理c2s(client-to-server)的模块。对于标准的jabberd 1.4.3,这个模块命名为pthsock_client,pthsock_client在有几百个c2s连接的时候应该表现良好。
这里有一些方法来提供c2s的性能:
l 用更高效的jadc2s模块代替pthsock_client。这个可以支持几个个c2s连接。而且很简单。
l 在不同机器上运行多个c2s模块,让他们都通过connect/accept机制(参见jabber.xml上配置文件,象运行一个JUD一样运行一个外部pthsock_client)连接到jabberd主服务器上。使用round-robin(没看懂)的DNS来让Jabber服务器的IP可以支持多个IP。现在碰到一个问题就是其它Jabber服务会想当然的通过s2s来进行连接所有IP,而不是只连接主服务器的IP。一个解决办法是使用端口推进,为s2s(如上所述)再建一个SRV的DNS记录。这个解决办法你需要很多DNS和Jabber的经验。当然,你同样需要更多的硬件。
l 使用一个更快的服务器软件,如WPJabber。经过测试,WPJabber可以支持50000个c2s的并发连接。使用WPJabber并不难,因为它和jabberd1.4.x很相似。使用WPJabber的c2s模块(WPJ)的一个问题是,你需要你的操作系统支持/dev/epoll,这就意味着对于Linux你必须对你的内核打上补丁(注意/dev/epoll和Linux2.6的sys_epoll不兼容)。
本文地址:http://com.8s8s.com/it/it25513.htm