ejabberd 简明配置
(2012-03-08 18:48:52)关于ejabberd可参考 http://www.ejabberd.im/。
1.安装ejabberd
到 http://www.process-one.net/en/ejabberd/downloads 下载ejabberd,选择 Source Code。下载后解压安装。
tar zxvf jabberd-2.1.10.tar.gz
cd ejabberd-2.1.10/
./configure --prefix=$HOME/apps/ejabberd-2.1.10
make
make install
以上命令把ejabberd安装到 --prefix 参数指定的目录。
如果出现错误:
...{undef,[{asn1ct,compile_asn1,...
是因为erlang的包没装全,如果是Ubuntu系统,可执行
sudo aptitude install erlang-nox
2.配置ejabberd
切换到安装目录 $HOME/apps/ejabberd-2.1.10。
编辑 etc/ejabberd/ejabberd.cfg:
设置服务的域 {hosts, ["example.com"]}
注解掉对端口5269(ejabberd_s2s_in)的监听;
设置管理员帐号 {acl, admin, {user, "winpub", "example.com"}}
注解掉模块启用mod_register
启动服务
sbin/ejabberdctl start
查看服务状态
sbin/ejabberdctl status
添加用户
sbin/ejabberdctl register winpub example.com mypasswd
打开浏览器,输入 http://localhost:5280/admin 可以管理ejabberd服务。
3.安装额外管理包
命令行工具ejabberdctl默认的管理功能很少,需安装额外管理模块以支持更多的功能。
根据 http://www.ejabberd.im/ejabberd-modules 的描述获取ejabberd模块,编译mod_admin_extra,
svn co https://svn.process-one.net/ejabberd-modules
cd ejabberd-modules/mod_admin_extra/trunk
./build.sh
生成的模块为 ebin/mod_admin_extra.beam,拷贝到ejabberd的模块目录
cp ebin/mod_admin_extra.beam $HOME/apps/ejabberd-2.1.10/lib/ejabberd/ebin
在ejabberd的服务配置文件 ejabberd.cfg 启用该模块:
{modules, [
]}.
不带任何参数运行ejabberdctl 会发现有更多可用的命令了。
4.启用ldap认证
注释掉 {auth_method, internal}.
根据ldap的配置去掉如下行的注释
{auth_method, ldap}.
{ldap_servers, ["localhost"]}.
{ldap_rootdn, "dc=example,dc=com"}.
{ldap_password, "******"}.
{ldap_base, "dc=example,dc=com"}.
{ldap_uids, [{"mail", "%u@example.com"}]}.
5.启用TLS加密
生成证书
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem
openssl rsa -in privkey.pem -out privkey.pem
cat privkey.pem >> server.pem
rm privkey.pem
修改ejabberd.cfg,启用证书:
{listen,[{5222, ejabberd_c2s, [{certfile, "/path/to/server.pem"}, starttls,...
参考 http://www.ejabberd.im/tuto-install-ejabberd
6. 让自己出现在共享的花名册里
修改源码mod_shared_roster.erl,在函数 get_user_roster(Items, US) 里,
找到行
fun(User, Acc2) ->
改成
fun(User, Acc2) ->
编译模块
erlc -pa . mod_shared_roster.erl
把生成的mod_shared_roster.beam覆盖原始模块文件。
7. 禁止用户修改花名册
有人提供了 mod_filterroster.erl,参考 http://www.ejabberd.im/node/1589 。
不过有时候erlang进程会crash掉,原因是没找到匹配的方法调用,在文件尾部把最后一个end的标点改成分号,新加一个方法
end;
check_rosterchange(_) ->
可以避免这个问题。
启用https / wss(启用https后,websocket 自动 支持 wss )
把普通http访问的配置拷贝一份,改一下端口,加上 tls,certfile 配置即可;certfile是上面的方法生成的pem证书文件
-
ip: "192.168.127.128"
port: 9281
module: ejabberd_http
request_handlers:
"/websocket": ejabberd_http_ws
## "/pub/archive": mod_http_fileserver
web_admin: true
http_bind: true
register: true
captcha: true
tls: true
certfile: "/lib/ejabberd-0.0/server.pem"