Делаем Jabber-сервер

Материал из Wiki.UnixForum.org

Перейти к: навигация, поиск

Доброго времени суток, дамы и господа!

Содержание

[править] Преамбула

- Вопрос общения в локальной и не только локальной сети периодически тревожит тех, кто эти самые сети обслуживает. Всякие сетевые болталки не решают, а больше добавляют проблем. Принимая во внимание, что виндус и линукс-машины в одной локальной сети уже не столь невероятная вещь, как раньше, то помирить разносортицу этих болталок не представляется возможным. Использование ICQ тоже особого восторга не вызывает - сообщение коллеге на соседний стол отправляется от Вас куда-то за бугор и потом возвращается обратно к Вашему коллеге, сидящему на расстоянии 2 метра от Вас. Любые проблемы с сервером, с каналом на пути -- и общение не состоялось. Да и безопасность явно хромает. Все должно быть под контролем и правильное решение проблемы звучит так: "Надо иметь свой сервер!". Такой сервер называется JABBER (см. 1, 2 ).

[править] Что это

Если вкратце, то jabber это та же аська, только лучше и надежнее. Более того, функционал jabber можно расширить для выполнения требуемых задач и обеспечения взаимодействия между различными системами. Немаловажная особенность jabber - его децентрализованность и безопасность. Нет единого сервера и многие реализации сервера используют SSL при обмене данными между клиентом и сервером - то, что требуется для обеспечения реальной безопасности локальной сети.

[править] Поднимаем сервер

[править] Openfire

Недолго думая, отправляемся на страничку серверов jabber по адресу: http://www.jabber.org/software/servers.shtml Смотрим и оцениваем имеющееся там добро.
На выбор предлагаются различные реализации серверов jabber - проприетарные (платные), GPL, BSD, под Windows, Linux, MacOS. В данном случае выбираем сервер OpenFire (бывший WildFire). Его и забираем по адресу: http://www.igniterealtime.org/downloads/index.jsp#openfire.
Для ознакомления с характеристиками бесплатных серверов любопытствующие приглашаются на эту страничку: http://www.jabber.org/admin/jsc/
Итак, сервер Openfire 3.3.0 для Линукс (на момент написания статьи - май 2007 г.) предлагается в вариантах полного, вместе с явой, rpm-пакета весом 23,73 мегабайта и тарбола без явы весом всего в 5,64 мегабайта. Качаем нужное, и устанавливаем. Я использовал тарбол. Распаковал в /opt и запустил сервер командой /opt/openfire/bin/openfire start.

[править] Первоначальная настройка

Запускаем браузер, в адресной строке набираем: http://127.0.0.1:9090, и переходим к собственно процессу настройки.


Русского языка тут к сожалению нет, но все равно этого на сервере никто, кроме администратора не увидит. Соответственно, выбираем English жмем Continue и переходим к выбору имени сервера. Тут проще указать IP сервера, вроде 192.168.0.2, в последствии можно будет и поменять. Жмем Continue.
Теперь определяем тип хранилища данных.
По дефолту - локальный список пользователей и групп, но можно интегрировать и в LDAP (см.1, 2 )-сервер (рекомендуется почитать документацию). Для простоты выбираем Default и жмем Continue. Теперь вводим электронный адрес для сообщений администратору и пароль администратора jabber-сервера. Сам администратор будет называться admin.

[править] Шлифовка

Заходим в администраторскую панель - в браузере в адресной строке вводим: http://127.0.0.1:9090,
и далее вводим admin и выбранный Вами пароль администратора:


Пока обратим внимание на настройки имени сервера и настройки списка пользователей и групп.
Жмем кнопку Edit Properties и редактируем поле Server Name. Логично задать имя домена, вроде mydomine.ru. Переключатель SSL Enabled ставим во включенное состояние и жмем Save Properties.
Переходим в раздел Server Sertificates (расположенное слева меню), находим фразу Click here to restart HTTP server и кликаем на ссылке <here>.
После перезапуска сервера можно заходить с использованием шифрованного протокола https. Что и делаем. Вводим адрес https://127.0.0.1:9091 в адресной строке браузера и получаем ту же админскую панель по шифрованному каналу.
Теперь разбираемся с пользователями. Несколько пользователей, конечно, можно набрать и вручную, но если их много или лень выдумывать логины и пароли, то стоит задать автоматическую регистрацию. Для этого переходим на Registration & Login (в левой части окна) и правим значение Inband Account Registration в Enabled. Напрочь отключаем возможные неприятности с анонимной регистрацией - в Anonymous Login ставим Disabled.
Создаем пару-тройку пользователей:


Кликаем по ссылке Users/Group в верхней части страницы и с помощью ссылки Creat New User создаем пользователей системы. Далее создаем несколько групп с помощью ссылки Creat New Group. Для управления списками отображения групп на клиентах используем ссылку Group Summary в левой части страницы, потом выбираем из списка нужную группу. На этом настройка сервера в основном завершена.

[править] ejabberd

[править] Установка ejabberd

На странице закачки проекта ejabberd можно найти ссылки на установочные файлы для Windows, Mac OS X (PowerPC и Intel), Linux и исходные тексты. В репозитариях дистрибутивов Debian, Ubuntu, Mandriva, OpenSUSE, Fedora, FreeBSD имеются пакеты для установки ejabberd. Для компиляции, помимо make и gcc, понадобятся библиотеки OpenSSL и Zlib, а также Erlang/OTP. Установка последнего несколько необычна, но проста. Скачиваем дистрибутив: $ wget –c http://erlang.org/download/otp_src_<последняя_версия>.tar.gz Создаем каталог для установки:

$ sudo mkdir /usr/local/erlang
$ cd /usr/local/erlang
$ sudo mkdir otp_r11b 
$ cd otp_r11b

Распаковываем дистрибутив:

$ sudo gunzip -c /home/grinder/otp_src_R11B-4.tar.gz | tar xfp -

Запускаем установочный скрипт:

$ sudo ./Install /usr/local/erlang/otp_r11b

Скрипт начнет задавать вопросы, в большинстве случаев достаточно оставлять значение по умолчанию, просто нажимая «Enter». По окончании установки для удобства создаем символическую ссылку на исполняемый файл:

$ sudo ln -s /usr/local/erlang/otp_r11b/bin/erl /usr/bin/erl

Установка ejabberd из исходных текстов стандартна:

./configure; make; sudo make install

В Ubuntu и других дистрибутивах, имеющих в репозитарии ejabberd, процесс установки выглядит на порядок проще:

$ sudo apt-get update
$ sudo apt-get install ejabberd

В результате будет установлен не только сервер ejabberd, но и все зависимости, включая erlang. Пакет с расширением bin для Linux и exe для Windows предлагают графический инсталлятор, позволяющий по ходу установки произвести основные настройки.

[править] Конфигурационный файл ejabberd

Все настройки находятся в конфигурационном файле /etc/ejabberd/ejabberd.cfg (установленный с бинарника ejabberd конфигурируется с файла /opt/ejabberd-<verison>/conf/ejabberd.cfg). При загрузке демон считывает этот файл, анализирует и сохраняет в базу данных. Конфигурационный файл содержит последовательность условий Erlang. Все строки, начинающиеся со знака «%», считаются комментариями и игнорируются. Любое условие состоит из названия параметра, которое находится на первом месте, а далее идет одно или несколько его возможных значений. В конце условия обязательно ставится точка. Также следует помнить, что в условиях не должно быть разрывов, то есть лишних строк, для правки желательно использовать редактор, умеющий ставить Unix'овый одиночный символ окончания строки.

Если какое-либо из условий не будет определено в конфигурационном файле, используются значения, сохраненные в базе данных. Чтобы их аннулировать, применяются конструкции override_global, override_local, override_acls. Обычно условия сразу вставляют в конфигурационный файл, чтобы не путаться в том, какие настройки сервер знает, а какие нет. При установке, как с использованием исходных текстов, так и с помощью пакетов, создается шаблон, остается его лишь немного подправить:

# vi ejabberd.cfg
override_acls.

Список домена(ов), который обслуживает сервер

{hosts, ["mydomain.ru", "localhost"]}.

Язык сообщений сервера

{language, "ru"}.

Пользователи с привилегиями администратора

{acl, admin, {user, "ej-admin"}}.
{acl, admin, {user, "so-root"}}.

Список заблокированных пользователей

{acl, blocked, {user, "test"}}.

Разрешаем локальных пользователей

{acl, local, {user_regexp, ""}}.

Разрешаем использовать конфигурационный интерфейс только администраторам

{access, configure, [{allow, admin}]}

Разрешаем регистрацию пользователей.

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

Так можно запретить самостоятельную регистрацию пользователей, сделав сервер закрытым. Следует заметить, что в пративном случае вам предется самим регестрировать новых пользователей, что не всегда удобно, особенное если организация большая. Проще настройками брандмаузера определить кому можно использовать ваш сервер, а кому нет.

%{access, register, [{deny, all}]}.

Сообщение при регистрации, можно использовать буквы русского алфавита. Но убедитесь, что ваша системная локаль UTF-8. Иначе вместо русских букв будут крякозябры. :-)

{welcome_message,
{"Welcome!", "Welcome MyDomain Jabber Service."}}.

Кому отсылать сообщения о регистрации новых пользователей {registration_watchers, ["admin@mydomain.ru"]}. Разрешаем только админам отсылать многоадресные объявления

{access, announce, [{allow, admin}]}.

Только незаблокированные пользователи могут соединяться с севером

{access, c2s, [{deny, blocked}, {allow, all}]}.

Администраторы сервера являются и администраторами MUC (Multi User Chat)

{access, muc_admin, [{allow, admin}]}.

Разрешаем всем пользователям подключаться к MUC

{access, muc, [{allow, all}]}.

Используем встроенную базу данных. Внешнюю лично я не стал использовать, так как не захотел заморачиваться, И, видимо, зря. Ибо перенос на другую машину базы немного не тривиальная задача.

{auth_method, internal}.

Порты, на которых будут работать сервисы ejabberd

{listen,
% Обычный сервис client-2-server
[{5222, ejabberd_c2s, [{access, c2s},
starttls, {certfile, "/etc/ssl/certs/ejabberd.pem"},
{shaper, c2s_shaper}]},
% Сервис client-2-server с использованием SSL
{5223, ejabberd_c2s, [{access, c2s},
tls, {certfile, "/etc/ssl/certs/ejabberd.pem"},
{shaper, c2s_shaper}]},
% Порт для работы server-2-server
{5269, ejabberd_s2s_in, [{shaper, s2s_shaper}]},
{outgoing_s2s_port, 5269}.
% Транспорт Jabber <-> ICQ
{5347, ejabberd_service, [{ip, {127, 0, 0, 1}}, {access, local},
{host, ["icq.mydomain.ru", "sms.localhost"], [{password, "secret"}]}]},
% Веб-интерфейс
{5280, ejabberd_http, [http_poll, web_admin]}]}.

Используемые модули и параметры

{modules,
[
{mod_announce, [{access, announce}]},
...
]}.

В принципе, конфигурационный файл понятен, но при его заполнении следует быть внимательным.

[править] Настраиваем DNS, заводим администраторов

В этом же каталоге находится еще один важный файл - inetrc, отвечающий за работу со службой DNS. Если сервер ejabberd применяется в локальной сети, где нет смысла настраивать DNS-сервер, необходимо указать на использование /etc/hosts:

{file, hosts, "/etc/hosts"}.
{file, resolv, "/etc/resolv.conf"}.
% сначала ищем записи в hosts, а затем обращаемся к DNS
{lookup, [file, dns]}.

В файле /etc/hosts должна быть запись, указывающая на соответствие IP-адреса и имени компьютера:

127.0.0.1 localhost
192.168.0.1 mydomain.ru

Теперь запускаем/перезапускаем сервер. Это можно сделать двумя способами. Стандартным:

$ sudo /etc/init.d/ejabberd restart

Или с использованием утилиты ejabberdctl:

$ sudo ejabberdctl restart

Проверяем статус работы сервера: $ sudo ejabberdctl status

Node ejabberd@mydomain.ru is started. Status: started

Если в ответ мы получаем другое сообщение, то просматриваем вывод netstat -na. Если в выводе нет открытых портов, указанных в конфигурационном файле, значит, сервис не запустился (или запустился частично). Останавливаем его работу и проверяем ejabberd.cfg. Если же порты в списке есть, то начинать следует с разрешения имен.

Теперь необходимо завести пользователей, имеющих права администратора. В нашем случае это ej-admin и so-root:

$ sudo ejabberdctl register ej-admin mydomain.ru super_password

Проверяем, что пользователь успешно создан:

$ sudo ejabberdctl registered-users

ej-admin@mydomain.ru

Все нормально, аналогично заводим и второго админа. Теперь, если был разрешен веб-интерфейс, вызываем веб-браузер и заходим на страницу http://mydomain.ru:5280/admin. На запрос имени пользователя и пароля вводим параметры учетной записи администратора. Только к имени добавляем и домен, то есть вместо ej-admin вводим ej-admin@mydomain.ru. Веб-интерфейс позволяет в удобной форме настраивать списки управления доступом, заводить и удалять пользователей, просматривать статистику. Следует помнить, что все настройки, произведенные через веб-интерфейс, в конфигурационном файле не сохраняются. При наличии записей override_* они будут действительны до первой перезагрузки. Все, сервер к работе готов, можно зазывать пользователей.

Небольшой комментарий

Если у вас в /etc/hosts прописано подобно моему

127,0,0,1 localhost sgshm.ru

и компьютер в smb-сети виден как sgshm.ru, то с win-клиентами проблем не будет, а на *nix-клиентах придется еще прописать ip-адрес компьютера на котором крутится сервер в поле "соединиться с сервером" (английское названия поля не помню).

[править] Клиенты

Приведу несколько распространненых клиентов для протокола jabber:
Bitlbee
Centericq
Pidgin
Kopete
Psi

[править] Настройка клиента на примере Psi

Для обмена сообщениями рекомендуется именно Psi. В его пользу говорит наличие версий под Windows, Linux и MacOS. Распространяется под лицензией GNU GPL, а интерфейс похож на привычный ICQ. Забираем его на сайте: http://psi-im.org/download
Скачиваем и устанавливаем. Остается настроить - выбрать название для аккаунта, ввести логин пользователя джаббера (JID), пароль и прописать друзей. Для этого нажимает кнопку "Пси" в нижнем левом углу и выбираем пункт Account Setup.

В появившемся окне выбираем кнопку Add. В очередном окошке записывам название аккаунта и, если отсутствует учетная запись, ставим галочку в чекбоксе Register new account. Нажимаем Add и в заключительном окошке вводим свой JID в виде myname@mydomine.ru, пароль и повтор пароля, а также данные настроек для сервера.
Убедившись в правильности введенных данных нажимаем кнопку Register.


После регистрации можно изменить некоторые параметры аккаунта. Для этого нужно опять вызвать окно Account Setup, выделить аккаунт и нажать кнопку Modify. Полезно отметить галочки в строках Automatically connect on startup и Automatically reconnect if disconnected, на закладке Connection в пунктах Use SSL encryption (to server), Ignore SSL warnings соответственно (чтобы отключить постоянные сообщения, что с сертификатом что-то не так).
Для начала работы с транспортом на нем надо зарегистрироваться. Нажимаем в нижнем левом углу на кнопку Psi, в меню выбираем Service Discovery и в списке сервисов выбираем нужный. Правым кликом мышки на сервисе вызываем меню и выбираем Register. Если регистрируется транспорт ICQ, то необходимо иметь учетную запись ICQ и ввести свой UIN и пароль к нему.

ВНИМАНИЕ: информация будет храниться на сервере!

Для добавления пользователя аськи надо дать команду Add contact и в диалоге поиска выбрать из списка сервис ICQ Transport.

[править] Дополнительная информация

Более подробно о jabber можно почитать на http://ru.wikipedia.org/wiki/XMPP
Один из популярных ресурсов, посвященных джабберу: - http://www.jabber.ru/
Список публичных серверов для джаббера можно посмотреть на этом сайте - http://www.jabber.org/user/publicservers.shtml
Имеется встроенный клиент джаббера для Firefox (версий 1.5 и 2.0), Flock и ThunderBird - называется SamePlace и распространяется в виде плагина. Посмотреть/оценить/скачать можно здесь:
http://beta.sameplace.cc/

[править] Окончание

Вот и все. Пользуйтесь на здоровье! :)

[править] О статье

Авторы:

fed71


ejabberd

Большое спасибо:

  • Сергей «grinder» Яремчук
    grinder
    Ибо статья практически полностью его "Союз тети Аси и дяди Джабера". От меня добавлены несколько коментариев и изменены имена серверов и логины пользователей. Так же опущена часть статьи рассказывающа об организации транспорта ICQ <-> Jabber
  • Любимому Поисковику. :-)

BYV aka Yamah

see also