Jabber管理员手册中文版
目录介绍背景核心功能规划Jabber 应用系统需求操作系统硬件软件带宽DNS端口和防火墙服务器安装基本配置配置主机名文件系统设置管理功能授予管理权限察看在线用户发送广播信息企业内部互联网设置禁用“服务
目录
介绍
背景
核心功能
规划Jabber 应用
系统需求
操作系统
硬件
软件
带宽
DNS
端口和防火墙
服务器安装
基本配置
配置主机名
文件系统设置
管理功能
授予管理权限
察看在线用户
发送广播信息
企业内部互联网设置
禁用“服务器-服务器”通讯
禁用注册新用户功能
更新服务器
NAT 设置
安全
使用SSL 安全连接
安全认证
获得帮助
报告漏洞和提供补丁
介绍
这篇文章介绍如何安装,配置和管理jabberd.
Jabberd 服务器是最早的基于Jabber 协议的开放源代码服务器,是在一个公司内部或公用IM 系统中最流行的Jabber 服务器。然而,还有很多其他的Jabber 服务器,包括一些开放源代码项目(参看http://www.jabberstudio.org/)和商业提供者,如i3connect, Jabber, Inc., Jabcast, and Tipic。作为Jabber 协议的管理者,Jabber 软件基金会(JSF)不会区分不同软件的实现方式。JSF 注重 的是Jabber 的发展,和Jabber 技术的传播。
强烈推荐Jabberd 相关支持人员,服务器管理员订阅JADMIN 邮件列表。关于Jabber 的更多信息,请参考Jabber Software Foundation网站。
背景
,Jabber 项目作为自由和开放源代码项目,是由Jeremie Miller在1998年开始开发的,并作为其它传统专有IM 系统,像AIM ,ICQ ,MSN 和YAHOO 的替代品 ,1999年在Slashdot 上发布了第一个公告。Jabber 项目的核心是jabberd 服务器,这个模块化服务器是用C 写成,并使用GNU pth线程库。 经过一年的开发,Jabberd 1.0在2000年5月发布。2000年10月发布了1.2版,之后2001年1月发布1.4版,2001年4月发布1.4.1版,2002年2月发布1.4.2版。Jabberd 开发小组正在积极修补1.5开发版,并将最终作为2.0版在2003年的某个时候发布。Jabberd 服务器完全兼容于Jabber Software Foundation协议。
核心功能
总体上,Jabber 服务器运行下面这些服务:
允许一个来自兼容的客户端或者服务器端组件的TCP 连接
管理从客户端和组件进入和发出的XML 流
分发核心Jabber 数据类型(
为连接的客户维护会话信息(通常是IM 用户)
如果需要,打开和其他服务器的合法连接,路由信息
为组件储存信息,尤其是IM 用户,包括每一个用户的联系人和一些客户属性
附加属性--像群聊,用户目录,和与其他IM 系统(AIM, ICQ, MSN, and Yahoo)交互-- 不是当前核心功能的一部分,因此没有写进这个HOWTO 。 请察看“Jabber Component HOWTO”进一步获得关于如何添加这些属性到你的Jabber 服务器的信息。
规划Jabber 应用
在安装任何软件以前,尤其是一个重要的网络架构组件,像Jabber 服务器,确定你的需求和规划你的应用是很重要的。 现在Jabber 服务器可以被广泛应用于下列环境中,包括:
小的开发团队
小型到中型公司的企业内部网
大学和学院
基于web 的团体
Internet 提供商
大公司的企业内部网
如何使用你的Jabber 服务器,将毫无疑问的影响你的决定,包括硬件,操作系统,带宽,网络
,配置,防火墙,安全,数据库连接,等等。 你要在开始的时候做出一个主要的决定,要在什么操作系统下运行Jabber 。Jabberd 被设计用来在Linux 和其他多种不同风格的Unix (包括AIX, Solaris, HP-UX, BSD, 和 Mac OS X)上运行。虽然jabberd 已经被移植到到了Windows 上,但是这个移植版本运行的并不好,不提倡使用。 (这篇文章没有收录Windows 的移植版本;要察看详细信息,请参考Jabberd Windows HOWTO.)
另外,考虑一下你要提供的服务的带宽也是很重要的。需要提供单一的点对点的系统,还是群聊系统?想让你的用户和外界传统的IM 系统通讯吗?像AIM ,ICQ ,MSN ,YAHOO 。这些服务不是Jabberd 缺省的一部分,你必须提供组件。 虽然这增加了用户的使用功能,但也使你的规划更复杂,管理更困难。 (详细信息,请参考Jabber Component HOWTO.)
最后,想一想如何把Jabber 集成到已经存在的网络中。例如,你想每一个用户的账号使用他们的电子邮件地址或者网络登录名,或者你想用已经存在的用户数据库(例如,你们公司的LDAP 数据库) ,而不是缺省的文件系统存贮方法。满足你的 这些需求,可能会带来更大的复杂性(详细信息,参考即将出炉的Jabberd Database Integration HOWTO.)
系统需求
这一部分HOWTO 定义系统需求。
操作系统
虽然Jabberd 主要是GNU/Linux下开发的,但是他已经在不同的操作系统下测试过了。 1.4.2版可以运行在以下系统中:
AIX
FreeBSD
HP-UX
IRIX
Linux
Mac OS X
NetBSD
OpenBSD
Solaris 2.6, 7, 8
上面列出的系统不像Linux 使用得那么广泛,所以安装的时候可能会遇到一些麻烦。特殊的需求和说明,在这篇文章中会标出。通常,非GUN Unix系统需要GNU make,而不是你自己系统里的make 。当你在非GNU 系统上运行Jabberd 时,GNU make将会解决你的大部分问题,.
,注意: 这篇文章没有讲关于Windows 版的jabberd 1.4.2。请参考Jabberd Windows Guide察看详细信息。
硬件
硬件需求决定于你所预期的用户数。 以作者的经验,大多数jabberd 都是用在像导航项目,内部网站,开发平台,等等这些上面,大约100到1000人。 由于同时在线的人数不会超过50(例如,jabber.org 的服务器通常只有2的用户在线) ,我们可以适当的评估出大概会有500人同时在线。 对于这种情况,硬件需求是最小的:也许一个奔腾级的工作站加512M 内存就够了。
如果客户端数量巨大,那需要做一些调整。做过一个试验,jabberd 服务器可以达到10,000个用户同时在线,它是被设计用来从概念上证明,一台非工业级的服务器也可以提供非常大数量的服务。 例如,根据你所使用的操作系统,你可能需要修改OS 级别的设置来限制同一个IP 的同时连接数量,或者操作系统的file descriptor. (对于Linux ,缺省是限制到1024 file descriptors,这些可以通过proc 设置) 。 由于大量用户的情况在通常的规划之外,我不再讨论他们,但是我也希望在下一个修订版中添加更多关于可缩放服务器的信息。
软件
Jabberd 需要下列软件:
GNU pth v1.4.0。请注意,GNU pth 1.4.1与jabberd 1.4.2是不不兼容的,所以如果 你的系统里已经安装了pth 1.4.1,请先删除它,然后安装pth 1.4.0!如果你的系统里没有安装GNU pth,jabberd 安装程序会自动安装它 。
GNU make。GNU make是GNU/Linux操作系统标准的一部分,但是在非GNU 系统中,像FreeBSD 和Solaris 中必须单独安装。不像GNU pth,你必须自己安装GNU make(jabberd不会为你安装它) 。
OpenSSL 。这是可选的。如果你想让你的客户使用SSL 连接,你必须在安装jabberd 1.4.2以前安装它。
带宽
通常情况下,一个Jabber 客户端连接需要大概15字节/秒。这意味着1000个用户将会消耗15kbs 的带宽,10000个用户将会消耗150kbs 的带宽, 依次类推。注意,这是指同时在线的用户数,不是注册的用户数(当前用户数取决于你自己的规划,但是一般对于ISP 只有少于5的用户同时在线,而在企业中只有少于50的用户同时在线。请 以此为参考。
DNS
像下面描述的那样,也许你想用全称域名(FQDN)来运行jabberd 服务器。这不是在每种情况下都是必需的,但是如果你想和其他jabber 服务器通讯,或者 你想让局域网以外的用户访问服务器,那服务器的主机名(hostname)必须是一个全称域名(fully-qualified domain name)。这同样适用于你想用jabberd 服务器提供 相关服务的子域(例如,一个Jabber 用户的目录或会议服务) 。因此你必须要求系统管理员在DNS 域名表中添加你的主机名和相关的子域。
端口和防火墙
,IANA 规定了Jabber 使用的两个端口:一个用于“客户-服务器”通讯(端口5222) ,另一个用于“服务器-服务器”通讯(端口5269) 。 如果想让jabber 客户端能够和服务器通讯,必须保证TCP 5222端口是开着的。 如果想让Jabber 服务器能够向其他jabber 服务器发送消息,必须保证TCP 5269端口是开着的。另外,如果需要为其他IM 系统安装网关,需要打开指定的与其他系统通讯的端口。请参考README 或者其他文档来确定所要安装的网关软件需要打开的端口(例如,MSN 的网关端口1863是) 。
一些Jabber 服务器在公司内部网或者防火墙内使用,如果不想和组织外部的Jabber 服务器通讯,你当然不想打开这些端口。 在其他情况下(例如,公司有远程雇员) ,可以打开标准jabber 客户端端口5222(或者5223端口来使用SSL 连接) ,这样防火墙之外的用户也可以和服务器通讯了。另外,如果想让用户和外部服务器用户通讯,需要打开标准jabber 服务器端口5269来实现“服务器-服务器”的通讯。一种更复杂的配置是一个服务器在防火墙内部供内部用户使用,一个服务器在DMZ 区供外部用户使用, 通过5269端口在两个服务器之间建立“服务器-服务器”的信任通道(通过在防火墙的“控制列表”中只打开这两个服务器之间的5269端口通讯).
如果在Jabber 服务器和任何用户之间有防火墙,请保证防火墙和jabber 服务器之间的超时设置是恰当的,这是很重要的,尤其在用户使用TCP 5222端口连接到服务器的时候。因为当用户打开一个会话的时候,要保证TCP 端口是一直开着的,为了优化HTTP 设置的防火墙超时设置可能过早的断开Jabber 用户的连接。
服务器安装
1.4.2版可以从http://jabberd.jabberstudio.org/downloads/下载。这个路径包括其他平台的安装包(Solaris包,RPM 包,deb 包等等) 。注意,这 些包只包括核心jabberd 服务器 -- 附加组件在其他地方 (参考Jabber Component Admin Guide)。
因为一些管理员在安装这些包的时候遇到一些问题,所以我们推荐使用源代码包安装。你只需要下载这个文件http://jabberd.jabberstudio.org/downloads/jabber-1.4.2.tar.gz。然后按照下面的 步骤安装:
把文件保存到/tmp/ (或者任何你选择的目录) 。
创建一个目录,作为你想安装jabber 的路径/path/to/jabber/(通常使用/usr/local/jabber/)。注意:你可能需要作为root 用户 登录才能创建这个目录
输入 mv /tmp/jabber-1.4.2.tar.gz /path/to/jabber/
输入 cd /path/to/jabber/
输入 gzip -d jabber-1.4.2.tar.gz
输入 tar -xvf jabber-1.4.2.tar (这会解压到jabber-1.4.2/目录,包括各种文件和子目录)
输入 cd jabber-1.4.2/
,输入 ./configure
安全提示
如果想让客户使用SSL 连接,需要重新编译:./configure --enable-ssl (注意,如果不是从源代码安装的,那就不能在SSL 模式下运行) 。
输入 make
操作系统提示
如果正在运行Solaris 或其他非GNU 系统,请保证使用GNU make编译,而不是原有的make 。必须输入gmake ,而不是make 。
Jabberd 1.4.2应该已经安装到你的机器上了。如果安装过程中遇到什么困难,请发送消息到 JADMIN mailing list,描述你的问题。包括操作系统,相关软件版本等完整的信息。
测试#1
好,该测试jabber 是不是安装到你的机器上,并能正常运行了。我们不是测试所有的功能,只是看看安装是否成功。为了测试,按照下面的步骤做:
输入 cd /path/to/jabber/ (你安装jabber 的路径)
输入 ls -l jabberd/jabberd 察看jabber 守护进程的权限。输出类似于:
-rwxr-xr-x 1 user group 675892 Feb 25 2002 jabberd/jabberd
输入 ./jabberd/jabberd 来启动jabber 守护进程。这将用缺省的主机名“localhost”运行jabber 服务。你应该看到 下面一行输出:
20020923T02:50:26: [notice] (-internal): initializing server
注意
如果在启动服务的时候,看到错误信息"Configuration parsing using jabber.xml failed",有两种原因导致这个错误。第一个原因是指定的 配置文件不存在;解决的办法是输入 ./jabberd/jabberd -c /path/to/jabber.xml 来指定配置文件的全路径。 另一个原因是虽然这个文件存在,但是包含错误的XML 代码;解决办法是修复XML 文件(例如,粘贴整个jabber.xml 代码到xml.com 网站的XML 语法检查器) 。
输入 telnet localhost 5222 连接到服务器,可以看到下面的信息:
Trying 127.0.0.1...
Connected to your-machine-name.
Escape character is '^]'.
现在打开XML 流,粘贴下面的XML 代码到telnet 窗口:
,to='localhost' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>; 会立刻收到回复: ; 祝贺你!你的jabber 服务器已经能正常工作了。 关闭XML 流,粘贴下面的XML 代码到telnet 窗口:
杀死进程,或者只是简单的在控制台窗口输入^C来停止服务。
基本配置
现在Jabberd 已经正确安装并能在你的机器上运行了。现在,我们将通过下面两步来检验服务器的即时消息功能:
配置服务器的主机名(hostname)。
为XML 存贮设置存贮目录(spool)。
这两步在下面详细讨论。一旦你完成了这两步,我们将通过另一个测试程序验证你所作的是否正确。
配置主机名(hostname )
你可以通过编辑jabber.xml 文件改变你的配置,这个文件在/path/to/jabber/目录下。jabber.xml 文件包含详细的描述,帮助你明白每一个选项的作用。然而我们现在所要做的只是改变主机名。打开jabber.xml 文件, 做如下编辑:
现在需要决定用什么样的主机名。可以有下面这些选择:
继续使用“localhost”不变。如果只是为了开发目的,这没有什么问题。但是不能从除了这台机器以外,其他任何机器上连接到这台服务器。
改为这台机器的IP 地址。这在局域网里能很好的运行。但这也是不提倡的,尤其是需要连接到其他jabber 服务器,或者运行附加组件。
改为全称域名(FQDN)。这是更可取的做法,因为这样jabber 能更好的运行 -- 尤其是运行附加组
,件或者和其他jabber 服务器连接。(“服务器-服务器”的通讯使用一种叫做“回叫”(dialback)的功能,来保证不被欺骗。“回叫”(dialback)协议依赖DNS , 所以如果主机名不使用FQDN ,将不能和其他Jabber 服务器通讯) 。尽可能使用FQDN ,例如,jabber.mycompany.com.
要配置Jabber 服务器的主机名,只需要简单的把'localhost' 改为'jabber.mycompany.com' 或者任何想用的名字。然后保存jabber.xml 文件。
文件系统设置
像上面提到那样,Jabber 的一个核心功能是存储用户相关的的信息。这包括用户的认证信息(用户名和密码) 和联系列表(在jabber 中叫roster ,名册的意思) ;有时候这些信息也包括用户的vCard 和不同的客户属性。缺省这些信息存 放在/path/to/jabber/spool/的一个子目录中,目录名相对应上面设置的主机名。所以,如果配置jabber.xml ,用主机名jabber.mycompany.com 运行服务,那你必须创建一个/path/to/jabber/spool/jabber.mycompany.com/目录。另外,这个目录对于运行jabberd 进程的用户必须是可写的。一旦完成了这些设置,Jabberd 会在这个目录为每一个注册用户保存一个与用户同名的XML 文件(类似„username.xml‟)。
好了,现在开始测试这些基本配置。
测试#2
因为已经配置了主机名(建议使用FQDN) ,而且配置了XML 存储,现在可以做一些在测试#1中不能做的测试:(1) 从另一个机器连接上来;(2)注册一个账号;(3)给另一个用户发送消息。
为了测试,仍然telnet 到客户端,这样你就明白XML 是怎么向服务器发送消息的。
在/path/to/jabber/目录中,输入 ./jabberd/jabberd -D来启动Jabber 守护进程调试模式。你将会看到很多调试信息在屏幕上滚过。
注意
现在已经配置了主机名使用FQDN ,可能会收到一条错误信息"jabberd is unable to listen on ports 5222 and 5269"。为了纠正这个错误,需要配置服务器绑定一个指定的IP 地址。首先,在jabber.xml 文件
在这台机器上打开一个终端,输入telnet 主机名 5222,这里' 主机名' 是指在jabber.xml 文件中的主机名(建议使用FQDN) 。你将再一次看到:
Trying 127.0.0.1...
Connected to your-machine-name.
Escape character is '^]'.
通过粘贴下面的XML 代码段到telnet 窗口,来打开一个XML 数据流:
to='yourhostname' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>; 应该马上从服务器收到回复: ; 发送下面的XML 代码来看看需要为注册用户提供什么信息: ; 应该收到下面的回复,告诉你要注册一个用户需要提供名字,email 地址,帐号,和密码。 Choose a username and password to register with this server. ; ; ; 接下来发送注册信息到服务器: ; ; 如果一切顺利,将会收到下面的XML 代码表示注册成功: 如果spool 存储目录设置得不正确,将会收到下面的XML 代码: 同样的,如果账户已经存在,会收到下面的XML 代码: 现在已经注册了一个账号,可以登录了。首先,问一下服务器登录需要什么信息: ; ; 服务器会回答需要哪些认证信息: ; ; 可以选择"password" (明文密码) 或"digest" (加密密码) ;为了方便,我们选择明文密码。还必须为这个连接指定"resource" (资源)。发送下面的XML 代码: ; ; 服务器会发送信息,确认认证成功: 最后,发送'presence' 信息,让服务器知道你已经在线并准备接收消息: