Делаем 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
