Установка и конфигурирование jabber сервера

2012-11-28
Согласно википедии, XMPP (Extensible Messaging and Presence Protocol — расширяемый протокол обмена сообщениями и информацией о присутствии) — основанный на XML, протокол для мгновенного обмена сообщениями и информацией о присутствии или отсутствии собеседников (как правило, поддерживаются такие признаки присутствия, как "доступен", "отошел от компьютера", "недоступен" и т. д.). XMPP является децентрализованной, расширяемой и открытой системой. Обмен сообщениями осуществляется в режиме, близком к режиму реального времени. Протокол, помимо передачи текстовых сообщений, поддерживает передачу голоса, видео и файлов по сети. XMPP является свободным для использования, т.е. любой желающий может открыть свой сервер мгновенного обмена сообщениями, регистрировать на нём пользователей и взаимодействовать с другими серверами XMPP. В качестве XMPP сервера испльзуется ejabberd - jabber демон написанный на Erlang(jabber - старое название протокола XMPP).
Установка jabber сервера
Чтобы установить ejabberd демон, необходимо выполнить команду

$ sudo aptitude install ejabberd

После этого текущее состояние xmpp сервера можно проверить командой

$ ejabberdctl status

Запуск, останов и перезапуск сервера выполняется соответсвенно командами

$ sudo ejabberd start
$ sudo ejabberd stop
$ sudo ejabberd restart

или

$ sudo /etc/init.d/ejabberd start
$ sudo /etc/init.d/ejabberd stop
$ sudo /etc/init.d/ejabberd restart

Конфигурирование jabber сервера
Конфигурационный файл xmpp-сервера расположен по адресу /etc/ejabberd/ejabberd.cfg. Файл конфигурации записан в соответствии с erlang синтаксисом, где знак % означает комментарий. Для начала необходимо добавить виртуальный хост, на котором мы будем регистрировать пользователей. Это делается в блоке %%Hostname. По умолчанию там прописан localhost. Однако один ejabber сервер позволяет работать с любым количеством доменов, которые расположены на том же хосте. Одно ограничение - все домены должны быть записаны в одну строчку, в противном случае jabber сервер выдаст ошибку. Добавим наш домен foodomain.com

{hosts, ["localhost", "foodomain.com"]}

Теперь добавим юзера, который будет иметь возможность администрировать jabber сервер удаленно. Это делается добавлением записи в блоке %%Admin user. Поскольку права на многие действия определены по умолчанию для юзера admin, добавим этого юзера к нашему домену foodomain.com.

{acl, admin, {user, "admin", "foodomain.com"}}

По умолчанию jabber работа с jabber'ом осуществляется через порт 5222. Это можно изменить в разделе %%LISTENING PORTS.Там же можно добавить поддержку обмена сообщениями через SSL доступ, раскомментировав строки

{5223, ejabberd_c2s, [
        {access, c2s},
        {shaper, c2s_shaper},
        {max_stanza_size, 65536},
        zlib,
        tls, {certfile, "/etc/ejabberd/ejabberd.pem"}
]},

Доступ к админ панели через порт 5280 устанавливается в строках

{5280, ejabberd_http, [
        web_admin
]}

Если необходимо дать возможность пользователям самим регистрироваться на сервере, то в разделе %%ACCESS RULES следует установить

{access, register, [{allow, all}]}.
{registration_timeout, infinity}.

и в разделе %%MODULES

{mod_register, [
        {access, register}
        {access_from, register}
]},

где
  • первая запись - правило доступа register в значение "для всех пользователей"
  • вторая запись - частота возможных регистраций. По умолчанию разрешается 1 регистрация за 10 минут. Поскольку пользователь может зарегистрироваться, передумать, удалить себя из чата, а после снова передумать и добавить себя в чат, устанавливаем это значение infinity.
  • треться запись - прописываем модуль, разрешающий регистрацию пользователей на сервере, а также установку/смену пароля.