Для внутренних нужд, понадобилось организовать защищенный обмен сообщениями между пользователями, был выбран протокол XMPP и сервер ejabber 2. Так как имелся свободный сервер на FreeBSD, было решено развернуть всё именно там.
ejabber написан на замечательном языке Erlang, в том числе и его конфигурационный файл, однако знаний языка для редактирования конфигурационного файла не требуется, он достаточно читабельный.
Сервер ejabberd является лидером среди Jabber-серверов. Его использует Facebook, Vkontakte, Yandex, Google и многие другие компании для своих сервисов. Часто используется для обмена данными по XMPP для всевозможных онлайн игр и т.д.
Для примера мы будем использовать домен для jabber-сервера jabber.example.org, а домен для конференций будет conference.jabber.example.org. IP-адрес сервера будет 203.0.113.42.
Установка
Обновим дерево портов:
cd /usr/ports
portsnap fetch update
И установим ejabberd:
cd /usr/ports/net-im/ejabberd
make install clean
echo 'ejabberd_enable="YES"' >> /etc/rc.conf
Генерация ключей
Для защиты трафика будем использовать SSL, создадим подкаталог для хранения ключей ejabberd:
После чего отредактируйте файл ejabberd.cfg (строки начинающиеся с символа "%" это комментарий):
%% Ищем {hosts, ["localhost"]}... заменяем на наш домен:
{hosts, ["jabber.example.org"]}.
%% Ищем {listen, [{5222, ejabberd_c2s}... и добавляем путь до сгенерированного ранее файла сертификата:
{certfile, "/usr/local/etc/ejabberd/certs/ssl.pem"}, starttls,
%% Далее ищем "{acl, admin, {user, "ermine", "example.org"}}." и указываем пользователя как админа:
{acl, admin, {user, "adw0rd", "jabber.example.org"}}.
%% Можете сменить "{access, max_user_sessions, [{10, all}]}.", для увеличения
%% количества одновременных пользовательских сессий (но это не обязательно):
{access, max_user_sessions, [{100, all}]}.
%% Для увеличения максимального количества офлайн сообщений, надо изменить
%% "{access, max_user_offline_messages, [{5000, admin}, {100, all}]}." на (это тоже не обязательно):
{access, max_user_offline_messages, [{5000, admin}, {1000, all}]}.
Далее мы ещё добавим в файл дополнительные настройки для MUC, так что пока не запускайте сервер.
Создание конференций (они же чаты)
За это отвечает протокол MUC (Multi-users conference), который дает возможность создавать комнаты для группового общения пользователей. В ejabberd за это отвечает модуль muc_module, ну и все остальные модули с префиксом "muc_".
Одна из проблем, с которой вы можете столкнуться это ограничение на количество сообщений, которое хранится пока пользователь находится в офлайне. По умолчанию это 20 сообщений, т.е. если вы отсутствовали более чем 20 сообщений в чате, то вам достануться только последние 20. Можно указать другое значение, для этого измените опцию history_size, в конечном итоге это будет выглядить так:
Также, мы расскоментировали строку {host, "conference.@HOST@"}, которая регистрирует имя домена для конференций, т.е. у нас получится "conference.jabber.example.org".
Настройка DNS для домена example.org
Необходимо добавить следующие A и SRV-записи. В качестве примера DNS-сервера выступает Bind9, но вы можете использовать любой другой, совместимый с его конфигурационным файлом:
jabber A 203.0.113.42
conference.jabber A 203.0.113.42
_xmpp-server._tcp.jabber.example.org. IN SRV 0 0 5269 jabber.example.org.
_jabber._tcp.jabber.example.org. IN SRV 0 0 5269 jabber.example.org.
_xmpp-client._tcp.jabber.example.org. IN SRV 0 0 5222 jabber.example.org.
Применяем настройки:
named-checkconf
rndc reload
После чего можете проверить записи с помощью утилиты dig, пример:
dig -t srv _xmpp-server._tcp.jabber.example.org
В результате должны получить ANSWER-секцию следующего содержания:
Если запуск не удался, то возможно у вас проблема с .erlang.cookie, укажите нужные права на файл /var/spool/ejabberd/.erlang.cookie (т.е. в домашнем каталоге должен храниться этот файл, посмотреть домашний каталог можно так pw usershow ejabberd). Устанавливаем права:
Пользователей можно добавлять в консоли, через ejabberdctl. Первого пользователя (которого мы указали в качестве админа в конфигурационном файле) вам придется обязательно добавить таким способом, так как вам надо пройти авторизацию в веб-интерфейсе, а без учетной записи это не получится сделать:
Сервер ejabberd напрямую не предоставляет таких услуг. Это реализуется за счет протокола Jingle и конкретных реализаций на стороне клиента. Данные обменивают по принципу P2P и поэтому могут встречаться проблемы у пользователй, которые работают из-под NAT. Для этих целей следует использовать STUN-сервер.
Для примера возьмем Pidgin, так как это простой для настроек клиент и доступен на многих платформах. Установите этот клиент, после чего нажмите на Accounts -> Manage Accounts -> Add.... И примерно так заполните форму Add Account:
После чего пробуйте подключиться, все у вас должно получиться!
Подсказали как сделать общие группы ростера, надо подключить "mod_shared_roster". После чего, в веб-админке вашего виртуально хоста появится меню "Shared Roster Groups", в котором вы можете заводить группы, пользователи которых будут видны всем участникам вашего хоста
Комментарии
Подсказали как сделать общие группы ростера, надо подключить "mod_shared_roster". После чего, в веб-админке вашего виртуально хоста появится меню "Shared Roster Groups", в котором вы можете заводить группы, пользователи которых будут видны всем участникам вашего хоста
Оставьте свой комментарий