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

Сети > Для новичка

Сегодня как никогда популярны различные системы мгновенного обмена сообщениями (Instant Messaging – мгновенные сообщения), вроде ICQ, Jabber, AOL, MSN, Yahoo и IRC сети. Все общение, в которых происходит в реальном времени. Если ранее во многих организациях просто блокировали такой трафик, чтобы перекрыть возможный канал утечки информации, то сейчас неоспоримым является тот факт, что применение IM систем часто повышает производительность. Установка собственного Jabber или ICQ сервера, позволит решить эти обе проблемы сразу.

Jabber vs ICQ

Не смотря на то, что пользователи больше знают о ICQ, самым популярными среди открытых проектов занимающихся разработкой IM сервера являются Jabber. Jabber используют открытый протокол XMPP (eXtensible Messaging and Presence Protocol), использующий для быстрого обмена сообщениями и информацией о присутствии между любыми двумя абонентами не plain текст, а XML. Хотя это и несколько увеличивает объем сообщения и требует наличия XML парсеров, которые потребляют некоторую часть ресурсов. Но в обмен дает jabber гибкость и расширяемость. Благодаря гибкости протокола jabber сервер способен поддерживать множество протоколов – ICQ, IRQ, MSN, RSS, Yahoo и др. Да если ICQ это только обмен сообщениями между двумя пользователями, то jabber совмещает в себе и возможности IRC. Поэтому вместо двух серверов (ICQ и IRC) вполне возможно обойтись и одним. Так будет гораздо удобнее как администраторам, так и пользователям. В Jabber изначально используется Unicode, поэтому проблем с кодировками не существует. Также jabber отличает продуманная система защиты информации, все реализации серверов поддерживают SSL, клиенты шифрование с помощью PGP/GPG, пароли передаются не в открытом виде, а используются md5-хеши. Протокол XMPP в отличие от ICQ стандартизирован и открыт, поэтому список серверов реализующих его на порядок больше чем ICQ.

Сервера Jabber

Вероятно, самый полный список серверов реализующих Jabber можно найти по адресу(www.jabber.org/software/servers.shtml). После просмотра столбцов “Feature Score” и License=Gnu GPL, из всех присутсвующих можно отобрать лишь четыре – jabberd 1.x и 2.x, OpenFire и ejabberd. Список поддерживаемых операционных систем у всех одинаков – AIX, *BSD, HP-UX, Linux, MacOS X, Solaris, Windows. Поэтому смотрим функциональность и удобство. Первые два очень хорошие серверы, славятся своей стабильностью в работе, написаны на языке С. По возможностям, эти серверы являются лишь базой, так как большая их часть вроде конференций, поиска пользователей и некоторых других реализовано посредством плагинов. Чтобы заставить работать некоторые комбинации придется изрядно попотеть. К тому же версия 1.x уже практически не развивается. Сервер OpenFire (до февраля 2007 – WildFire) самый простой в установке, так как для его запуска потребуется лишь наличие Java Runtime Environment. Да он написан на Java, но сегодня, по-моему, это никого уже пугать не должно. Для тех, кто не хочет использовать внешнюю базу данных (MySQL, Postgres, Microsoft SQL Server, DB2), в наличии есть встроенная HSQLDB. Все настройки осуществляются через удобный веб-интерфейс. В установке по умолчанию OpenFire имеет большое количество возможностей, остальное (Asterisk, широковещательные сообщения, IM шлюз, контент фильтр и прочее) реализуется посредством плагинов. И последний ejabberd (www.process-one.net/en/ejabberd). Практически все возможности заложеные в протоколе, реализованы из коробки. Написан на языке Erlang (erlang.org) и в качестве базы данных используется Mnesia (поддерживается и другие – MySQL, PostgreSQL). Язык Erlang предназначен создания отказоустойчивых распределенных приложений. Результат – ejabberd может работать в кластере, то есть один домен физически может обслуживать несколько компьютеров, синхронизируя информацию через единую базу данных. Откомпилированные приложения выполняются в Erlang (JAM) emulator, в этом он несколько похож на Java. Кстати одним и первых и самых активных комюнити считается(ejabberd.jabber.ru) имеющий форум на русском, с которого рекомендуется начать знакомство с 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_R11B-4.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.

 установка ejabberd с помощью bin пакета

По окончании установки, для удобства создаем символическую ссылку на исполняемый файл:
$ 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, при загрузке демон считывает этот файл, анализирует и сохраняет в базу данных. И при последующей работе использует базу данных. Конфигурационный файл содержит последовательность условий Erlang. Все строки, начинающиеся со знака “%” считаются комментариями и игнорируются. Любое условие состоит из названия параметра, которое стоит на первом месте, и далее идут одно или несколько его возможных значений. В конце условия ОБЯЗАТЕЛЬНО ставится точка. Также следует помнить, что в условиях не должно быть разрывов, то есть лишних строк, для правки желательно использовать редактор умеющий ставить Unixовский одиночный символ окнчания строки. Иначе все вроде бы будет выглядеть нормально, но сервер не будет выполнять свои функции. Если какое либо из условий не будет определено в конфигурационном файле, будет оставлено значение, сохраненное в базе данных. Чтобы их аннулировать используются конструкции: override_global, override_local, override_acls. Обычно их сразу вставляют в конфигурационный файл, чтобы не путаться, в том, какие настройки сервер знает, а какие нет. При установке, как с использованием исходных текстов, так и с помощью пакетов создается шаблон, остается его лишь немного подправить:

override_acls.

% Список домена(ов), который обслуживает сервер.
{hosts, ["tux.in.ua", "localhost"]}.

% Язык сообщений сервера.
{language, «ru»}.

% Пользователи с привилегиями администратора.
{acl, admin, {user, «grinder»}}.
{acl, admin, {user, «sergej»}}.

% Список пользователей, которых нужно блокировать.
{acl, blocked, {user, «test»}}.

% Разрешаем локальных пользователей
{acl, local, {user_regexp, «»}}.

% Разрешаем только администраторам использовать конфигурационный интерфейс.
{access, configure, [{allow, admin}]}.

% Разрешаем регистрацию пользователей.
{access, register, [{allow, all}]}.

% Так можно запретить самостоятельную регистрацию пользователей, сделав сервера закрытым
%{access, register, [{deny, all}]}.

% Сообщение при регистрации, можно использовать русский.
{welcome_message,
{«Welcome!», «Welcome Grinder Jabber Service.»}}.

% Кому отсылать сообщения о регистрации новых пользователей
{registration_watchers, ["grinder@tux.in.ua"]}.

% Разрешаем только админам отсылать объявления
{access, announce, [{allow, admin}]}.

% Только незаблокированные пользователи могут соединяться с севером.
{access, c2s, [{deny, blocked}, {allow, all}]}.

% Установим ограничение на скорость в 1000б/с и присвоим имя «normal»
{shaper, normal, {maxrate, 1000}}.

% имя «fast» будет соответствовать 50000б/с
{shaper, fast, {maxrate, 50000}}.

% все пользователи кроме входящих в admin будут соединяться со скоростью «normal»
{access, c2s_shaper, [{none, admin}, {normal, all}]}.

% Для соединений сервер-сервер (S2S) становим скорость «fast»
{access, s2s_shaper, [{fast, all}]}.

% Администраторы сервера являются и администраторами MUC (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.tux.in.ua", "sms.localhost"], [{password, "secret"}]}]},

% Веб-интерфейс
{5280, ejabberd_http, [http_poll, web_admin]}]}.

% Используемые модули и параметры:
{modules,
[
{mod_announce, [{access, announce}]},
{mod_register, [{access, register}]},
{mod_roster, []},
{mod_shared_roster, []},
{mod_privacy, []},
{mod_configure, []},
{mod_configure2, []},
{mod_disco, [{extra_domains, ["users.jabber.org"]}]},
{mod_stats, []},
{mod_vcard, []},
{mod_offline, []},
{mod_echo, []},
{mod_private, []},
{mod_irc, []},
{mod_muc, [{access, muc},
{access_create, muc},
{access_admin, muc_admin}]},
{mod_pubsub, []},
{mod_time, []},
{mod_last, []},
{mod_version, []}
]}.

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

Настраиваем 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.1.158 tux.in.ua

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

$ sudo /etc/init.d/ejabberd restart

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

$ sudo ejabberdctrl restart

Проверяем статус работ сервера:

$ sudo ejabberdctl status
Node ejabberd@tux.in.ua is started. Status: started

Если сервер в ответ получаем другое сообщение, просматриваем вывод “/bin/netstat -at” если в выводе нет открытых портов указанных в конфигурационном файле, значит, сервис не запустился (или запустился частично). Останавливаем его работу и проверяем ejabberd.cfg. Если же порты в списке есть, то начинать следует с разрешения имен.
Теперь необходимо завести пользователей имеющих права администратора. В нашем случае это grinder и sergej:

$ sudo ejabberdctl register sergej grinder.com super_password

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

$ sudo ejabberdctl registered-users
sergej@grinder.com

Все нормально, аналогично заводим и второго админа. Теперь если был разрешен веб-интерфейс, вызываем веб-браузер и заходим на страницу http://tux.in.ua:5280/admin/.

 

213.png

 

На запрос имени пользователя и пароля вводим параметры учетной записи администратора. Только к имени добавляем и домен, то есть вместо sergej следует вводить sergej@tux.in.ua. Веб-интерфейс позволяет в удобной и наглядной форме настраивать списки доступом, заводить и удалять пользователей, просматривать статистику и некоторое другое. Следует помнить, что все настройки, произведенные через веб-интерфейс, в конфигурационном файле не сохраняются. При наличии записей override_* они будут действительны до первой перезагрузки. Все? сервер к работе готов, можно зазывать пользователей.

 

просмотр данных пользователя

 

 

Транспорт ICQ <-> Jabber

Некоторые пользователи, вероятно, не захотят отказываться от ICQ. Для них можно настроить транспорт ICQ <-> Jabber. Организуется он с помощью PyICQt (pyicq-t.blathersource.org/), для работы которого дополнительно потребуются библиотеки Twisted, PyCrypto и PyOpenSSL (www.twistedmatrix.com). В Ubuntu/Debian их очень просто установить одной командой:

$ sudo apt-get install python-twisted python-crypto python-pyopenssl

Она установит Python и прочие недостающие программы и библиотеки. Теперь скачиваем и распаковываем PyICQt. Переименовываем шаблон конфигурационного файла config_example.xml в config.xml и редактируем:
<pyicqt>
<jid> icq.tux.in.ua</jid>
<!—здесь указан текущий каталог, ejabberd должен иметь право на запись в него–>
<spooldir>.</spooldir>
<pid>PyICQt.pid</pid>
<mainServer>127.0.0.1</mainServer>
<mainServerJID>ejabberd.localhost</mainServerJID>
<!— веб-интерфейс нужен nevow (www.nevow.org) –>
<website>http://jabber.localhost/</website>
<webport>12345</webport>
<port>5347</port>
<!— пароль для доступа к ejabberd, должен совпадать с ejabberd.cfg и быть сложным –>
<secret>secret</secret>
<!—язык для сообщений об ошибках –>
<lang>en</lang>
<encoding>cp1251</encoding>
<icqServer>login.icq.com</icqServer>
<icqPort>5190</icqPort>
<!—блокируем регистрацию (по желанию) –>
<disableRegister/>
<enableAutoInvite/>
<!– <disableXHTML/> –>
<!– <disableMailNotifications/> –>
<disableDefaultAvatar/>
<admins>
<jid>grinder@localhost</jid>
</admins>
</pyicqt>

Теперь запускаем шлюз командой “python PyICQt.py”. Открываем, клиент и в браузере ресурсов находим “icq.tux.in.ua”, вводим свой UIN и пароль. Если все настроено правильно, то в списке должен появиться агент с именем “ICQ Transport” или подобный. После чего можно добавлять контакты ICQ в форме UIN@tux.in.ua.

Источник:
http://www.tux.in.ua/articles/138 

Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>