вторник, 7 июля 2009 г.

Установка Ejabberd

Jabber - это сервер мгновенных сообщений основанный на открытом протоколе. Сервера jabber могут устанавливаться децентрализовано, любой желающий может открыть свой сервер мгновенных сообщений регистрировать пользователей и взаимодействовать с другими серверами jabber. Для Linux реализовано несколько серверов, одни из популярных это jabberd2, ejabberd, OpenFire. Для установки был выбран ejabberd. Его основные особенности это - простота установки, отказоустойчивость, наибольшая популярность. Написан он на языке Erland, в качестве базв данных используется Mnesia (поддерживаются и другие MySQL,...)

Первоначальная установка стандартна:
apt-get install ejabberd
В результате будет установлен не только сервер ejabberd, но и все зависимости, включая erland. (apt-get -f install - до установка зависимых пакетов)
Общий объем скаченных данных примерно 40Мб.

Все настройки находятся в конфигурационном файле /etc/ejabberd/ejabberd.cfg
Все строки начинающиеся со знака % - считаются комментариями. Любое условие состоит из названия параметра и его значений, должно заканчиваться точкой. Также следует помнить что в условии не должно быть разрывов, то есть лишних строк. И еще - если какое-либо из условий не будет определено в конфигурационном файле, используются значения, сохраненные в базе данных. Обычно все условия сразу вставляются в конфиг. файл.
Основные настройки:

override_acls.

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

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

% Пользователи с привилегиями администратора
{acl, admin, {user, "sa", "ub3.example.local"}}.
{acl, admin, {user, "sergej", "ub3.example.local"}}.
{acl, admin, {user, "sa", "localhost"}}.

% Список заблокированных пользователей
{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@grinder.com"]}.

% Разрешаем только админам отсылать
многоадресные объявления
{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.grinder.com", "sms.localhost"], [{password, "secret"}]}]},

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

% Используемые модули и параметры
{modules,
[
{mod_announce, [{access, announce}]},
...
]}.

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

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

в файле hosts - должна быть запись:
127.0.0.1 localhost
192.168.0.3 ub3.example.local

Перезапустить сервер можно стандартным способом service ejabberd restart или специальной утилитой - ejabberdctl:

ejabberdctl restart
ejabberdctl status
=> Node ejabberd@ub3 is started. status started

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

Теперь необходимо завести пользователей, имеющих права администратора. В нашем случае это будет - sa
ejabberdctl register sa ub3.example.local 111
проверяем, что пользователь успешно создан:
ejabberdctl sa

Теперь если был разрешен веб-интерфейс, заходим на странице http://ub3.example.local:5280/admin На запрос имени пользователя вводим наименование созданного администратора ejabberd. Имя надо вводить полностью как почтовый адрес sa@ub3.example.local Это основная особенность протокола jabber - все аккаунты привязаны к серверам на которых они зарегистрированы. Я думаю это сделано для реализации взаимодействия децентрализованных jabber серверов. Еще одно преимущество это то что можно использовать одинаковый имена пользователей в глобальной сети, состоящей из нескольких jabber серверов. Веб-интерфейс позволяет в удобной форме настраивать списки управления доступом, заводить и удалять пользователей, просматривать статистику. Все настройки произведенные через веб-интерфейс, в конфигурационном файле не сохраняются. При наличии записей override_* они будут действительны до первой перезагрузки.
При написании этой заметки и установки jabber-сервера я использовал статью: http://www.xakep.ru/post/39467/default.asp?print=true
В настройках squid я также сделал разрешение для порта 5222 (acl SSL_ports port 5222)

1 комментарий:

  1. Описание моей настройки Ejabberd с авторизацией по LDAP http://ant-ufa.com/computers/korporativnyiy-chat/

    ОтветитьУдалить