Почти в каждом офисе, насчитывающем 30 и более сотрудников, рано или поздно возникает необходимость реализовать систему мгновенного обмена сообщениями. Причем, желательно со списком контактов, хранящимся централизованно, на сервере, структурированном по отделам, с сохранением истории сообщений, удобным русскоязычным интерфейсом и прочими рюшечками, которые так ценит руководство. Что ж, это задача не из числа неподъемных. Я расскажу как ее реализовать на базе связки jabber-сервера Openfire и СУБД MySQL под управлением Windows.
Нам нужна выделенная машина с Windows (версии XP и старше), дистрибутивы Openfire и MySQL. Начнем с установки и настройки MySQL.
Установка MySQL
Выбор MySQL продиктован, по большей части, ее бесплатностью и надежностью. Это важные характеристики как для руководства (которое не хочет выделять деньги на удовлетворение своих прихотей потребностей организации в ИТ), так и для системных администраторов (которые не хотят использовать неблагонадежные системы, находящиеся в «группе риска»).
Берем дистрибутив MySQL с сайта Sun (http://www.sun.com/software/products/mysql/getit.jsp) и запускаем установщик.
Мы видим типичный диалог между пользователем и ПО. Жмем «Next»
Выбираем тип установки «Typical«
и запускаем инсталляцию.
По ее окончании, установщик предложит немедленно приступить к настройке и регистрации сервера в Sun. Первое жизненно необходимо, второе – по желанию.
Конфигуратор сервера MySQL – опять же привычный нам Wizard.
Так как мы создаем решение, которое будет годами радовать сотрудников нашей организации, настраивать сервер мы будем детально.
Мастер спросит нас о типе машины, на котором будет работать сервер MySQL. Выбираем вариант «Server Machine«. Вариант для разработчика не подойдет, т.к. при росте базы и количестве обращений к ней, сервер будет «захлебываться» от недостатка памяти, отводимой для него. Выделенный сервер MySQL, в свою очередь, радостно съест все системные ресурсы вне зависимости от реальной нагрузки на него.
Тип базы — «Multifunctional«.
Я устанавливаю MySQL на виртуальную машину с одним жестким диском, поэтому выбор места хранения баз данных у меня ограничивается системным разделом. В общем случае (при установке MySQL на отдельный сервер) рекомендуется хранить базы данных в отдельной директории на несистемном разделе.
Мастер спросит о планируемом количестве конкурентных соединений с базой данных. По большому счету, для jabber-сервера более чем достаточно варианта DSS, но в расчете на рост организации лучше перестраховаться и установить вручную сотню-другую допустимых соединений. Это употребит больше памяти, но обеспечит стопроцентную доступность базы данных для клиентов.
Далее мастер спросит, следует ли разрешить соединяться с базой данных по сети и, если да, то какой порт использовать для соединения. Безусловно следует. Причем, рекомендуется использовать порт по умолчанию, т.е. 3306. Можно сразу же добавить этот порт в исключения для брандмауэра (чекбокс «Add firewall exception for this port»). У меня на виртуальной машине брандмауэр отключен, так что я оставил опцию нетронутой. Чекбокс «Enable Strict Mode» рекомендуется включить. Включаем не вникая.
Следующий остановочный пункт – кодировка, в которой будут храниться таблицы данных. Весь цивилизованный мир планомерно переходит на UTF-8. Мы не будем отставать.
После выбора кодировки баз данных, мастером будет предложено установить MySQL как службу Windows и инициировать его автоматический запуск при загрузке системы, а также добавить в переменную PATH пути с исполняемыми файлами MySQL. Первое нам нужно для того, чтобы не сосредотачивать внимание на запуске MySQL после каждых выключения или перезагрузки сервера, а второе для того, чтобы иметь возможность выполнять команды MySQL из командной оболочки Windows, не утруждая себя указывать расположение исполняемых файлов MySQL вручную.
Наконец, настало время выбрать пароль для root.
И выполнить сценарий конфигурирования.
Установка закончена, сервер MySQL готов!
Создание базы данных MySQL
Управлять MySQL можно как из командной строки, так и с помощью графических средств администрирования (например, phpMyAdmin). Так как нам предстоит всего-навсего создать базу данных, ограничимся командной строкой:
Для любителей смотреть сайты без графики:
mysqladmin –user=root —password=ваш-надежный-пароль create im
Я создал базу данных под названием «im» (от англ. instant messaging). Вы же вольны придумать ей любое название.
Установка Openfire
Пришло время устанавливать непосредственно сам jabber-сервер. Вообще-то их выбор не ограничивается одним вариантом, но Openfire на голову выше остальных по простоте развертывания и удобству администрирования. Поэтому качаем дистрибутив с http://www.igniterealtime.org/projects/openfire/ и приступаем к установке:
Этот процесс настолько тривиален, что приводить больше двух скриншотов не вижу смысла.
Запускаем…
Итак, открылась консоль Openfire. В ней выводится информация о состоянии сервера.
Запускаем браузер и заходим на http://127.0.0.1:9090
Нас приветствует установщик сервера Openfire. Выбираем язык (да-да, English. Официальной русификации Openfire пока не существует. Да и не очень-то она нужна) и жмем «Continue«.
В настройках сервера необходимо указать домен (обычно указывается имя или IP-адрес компьютера, на котором установлен Openfire, но можно сделать красивее, и обозвать домен вычурным вариантом вроде Corporate-Messaning-System.local).
Примечание: на скриншоте я указал домен «workspace», а потом изменил его на «test», но напрочь позабыл переснять скриншот. А, между прочим, эта информация нам еще пригодится при настройке клиентов. Так что запоминайте: я выбрал домен «test«!
Далее нужно выбрать базу данных: стандартный вариант (наш, с внешней базой данных) или корявый (использовать встроенную базу данных Openfire. Однажды я так уже делал. Через 3 месяца пришлось переустанавливать Openfire вместе с базой данных, так как она перестала инициализироваться).
Так как мы выбрали вариант с внешней базой, необходимо настроить коннектор.
Database Driver Presets – MySQL
JDBC Driver Class – по умолчанию
Database URL – jdbc:mysql://127.0.0.1:3306/im
Вот где нам пригодился порт подключения к базе, выбранный при настройке MySQL, а также имя базы данных (у меня — «im«, как упоминалось выше).
Связка username/password – это учетная запись root сервера MySQL, настроенная мастером конфигурирования MySQL.
Также меняем значение «Maximum Connections» на 100.
Если вы все сделали верно, то вам будет предложено выбрать способ заведения пользовательских аккаунтов и групп для клиентов сервера Openfire. Вариантов всего 3:
1) Ручное управление. Вариант хорош тем, что список контактов будет максимально «чист»: никто не появится на сервере просто так, без вашего ведома. Кроме того, имена пользователей и их логины тоже можно будет гибко настраивать. Да, это создаст еще один поинт, на который администратор будет отвлекаться по мере необходимости. С другой стороны… читаем дальше.
2) LDAP. Моя сеть построена на базе Active Directory. Конечно, было бы очень удобно подтягивать пользователей и группы из AD, имея только одну точку администрирования. Но, к сожалению, Openfire подтягивает их… кривовато. Кроме учетных записей пользователей, регистрируются доменные компьютеры, Builtin-группы и прочий трэш. В итоге одна точка администрирования оборачивается в те же две, только без права вычистить мусор из базы Openfire. Таким образом, сложная AD хоть и интегрируется в Openfire, но неудобоваримо.
3) Интеграция из Clearspace. Маловероятно, что в вашей организации есть подписчики Clearspace, поэтому вариант даже не рассматриваем.
Указываем e-mail и пароль администратора…
и завершаем установку.
Настройка Openfire
После окончания установки сервера Openfire, необходимо вернуться в консоль (значок лампочки в трее) и перезапустить сервер (Stop – Start). Если этого не сделать, вас может не пустить в веб-интерфейс управления сервером: будет высыпаться сообщение об ошибке авторизации. После перезапуска заходим в админку Openfire в браузере:
Логинимся и попадаем в консоль администратора.
Я не буду вдаваться в тонкости настройки сервера. Нам нужно максимально быстро развернуть корпоративное решение для обмена мгновенными сообщениями, чем мы и займемся. Первым делом создадим пользователя. Я создал учетную запись воображаемому Иванову Ивану.
К слову, советую серьезно отнестись к полю «Name«, т.к. именно его значение будет использоваться в контакт-листе клиента jabber.
Теперь создадим группу. Скажем, для бухгалтерии.
Добавим в нее пользователя IvanovII.
И расшарим группу для всех клиентов нашего сервера. Это лишит пользователей необходимости вручную заполнять контакт-листы.
В принципе, процесс можно продолжать, пока на сервере не будут организованы все целевые пользователи и группы.
Подключение клиентов
Самое время приступать к подключению пользователей к нашему серверу. Для этого необходим jabber-клиент, коих существует более чем много. Однако, 3 варианта все же предпочтительнее. 1-й – Spark (http://www.igniterealtime.org/projects/spark/index.jsp) от авторов самого Openfire. По правде говоря, я ожидал от него большего. Но он оказался громоздким и нестабильным. То есть именно таким, который мне не подходит. 2-й – QIP Infinum (http://qip.ru/ru/pages/download_infium_ru/). Главное преимущество QIP – привычный интерфейс. Он уже пару лет является стандартом де-факто в качестве клиента ICQ для русскоязычных пользователей, поэтому большинству сотрудников вашей организации не придется изучать новый продукт. Но на этом его плюсы заканчиваются, и начинаются минусы: навязчивая реклама, не совсем корректная работа (часто отваливается от сервера на базе Openfire) и неумение делить контакт-лист личной ICQ и корпоративного jabber’а. 3-й – Pandion (http://www.pandion.be/). ИМХО, идеальный клиент для организации корпоративного обмена сообщениями. Бесплатный, компактный, дружелюбный, симпатичный, Pandion делает именно то, что от него требуется. Я буду рассматривать подключение к серверу именно Pandion-клиентов.
Установка клиента тривиальна. В самом конце рекомендую поставить галочку в чекбоксе на автоматический запуск клиента при загрузке. Таким образом, никого из пользователей корпоративной сети не придется принуждать запускать его вручную.
Скачали, установили. Запускаем:
Pandion сразу попросит ввести данные пользователя. Вводим имя пользователя нашего Ивана Иванова, через @ вводим домен (помните мой комментарий по поводу неверно отснятого скриншота? Вот где нам пригодится эта информация о домене. В моем случае это, напоминаю, test) и жмем ссылку «Настройки Соединения«.
В этом окошке предлагается ввести адрес и порт сервера, выбрать тип шифрования, метод аутентификации и прокси-сервер. В моем случае адрес сервера – 192.168.1.14. Так как я предпочитаю безопасный обмен сообщениями и выбираю тип шифрования SSL, порт сервера тоже придется указывать соответствующий: 5223 (в сводке информации о сервере Openfire он указан).
Жмем Ок, и в предыдущем окошке нажимаем «Вход«.
Ура, мы внутри нашей jabber-сети.
Однако хотелось бы увидеть результат наших трудов по созданию и расшариванию групп и пользователей. На другом клиентском компьютере устанавливаем Pandion и логинимся на сервер администратором (не забываем настроить соединение с сервером и шифрование):
Вот уже 2 клиента в нашей сети. Как видите, в контакт-листе администратора автоматом появилась группа «Бухгалтерия«, в которой засветился пребывающий он-лайн Иван Иванович Иванов. Отправим ему сообщение:
А он его с наслаждением прочитает:
На этом настройку клиентов можно закончить.
2 комментария:
1) в окне логона ставьте пользователям галочки «Запомнить мой пароль» и «Подключаться автоматически«. Вкупе с автозагрузкой Pandion, это позволит пользователям вообще забыть о необходимости как бы то ни было задумываться о клиенте jabber, а просто пользоваться его благами, как они пользуются доступом в Интернет, корпоративным файл-сервером или рабочими базами данных;
2) обратите внимание на опечатку в кнопке отправки сообщения. «Отравить» – это как-то не айс. Но фиксится. В директории C:Program FilesPandionlanguages найдите файл ru.xml и поиском отыщите слово «отравить«. Можно поправить текст и распространить правильную копию Pandion по сети.
Последние штрихи
Без дополнительной настройки Openfire запускается как приложение. То есть после перезагрузки или выключения сервера необходимо заходить в Windows и вручную запускать его. Это не самый подходящий вариант. Присвоим Openfire статус службы и настроим ее автозапуск. Для этого на сервере Openfire выполняем команды:
Для любителей смотреть сайты без графики:
cd «program filesopenfirebin»
openfire-service.exe /install
openfire-service.exe /start
И проверяем, что Openfire появился в оснастке управления службами и стартует автоматически:
Вуаля. Еще одна маленькая победа.
How-To F.A.Q., How-To, IM, Jabber, Software, Дела админские
Рассмотрим установку сервера ejabberd на компьютеры под управлением ОС Windows в стандартной конфигурации для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет myjabber.ath.cx) указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).
Первым делом скачайте программу-установщик на свой компьютер, сделать это можно на официальном сайте Process One на странице загрузки. После скачивания запустите файл и приступайте к установке.
Установка сервера[править]
После запуска установщика первым делом появится диалог выбора языка. Выберите русский и нажмите «OK«. Запустится мастер установки, который поможет выполнить Вам все необходимые шаги. Во время работы мастера Вам придется ответить на следующие вопросы:
- Принятие лицензионного соглашения. Ejabberd распространяется на условиях лицензии GPL.
- Каталог для установки программы. Здесь будут находиться основные исполняемые файлы сервера и файлы конфигурации, а также база данных пользовательских аккаунтов под названием Mnesia.
- Доменное имя сервера. Как уже говорили выше, пусть это будет myjabber.ath.cx.
- Логин администратора. Вместе с доменным именем он составит Jabber ID администратора сервера.
- Пароль администратора.
- Вариант конфигурации сервера. Кластеры используются только на высоконагруженных серверах, поэтому отвечаем «Нет«.
После ответа на эти вопросы начнется процесс установки, во время которого будут выполнены основные настройки сервера. После установки сервер займет на диске около 15 Мб. Для окончания установки осталось выполнить лишь несколько шагов.
-
Выбираем язык
-
Запуск мастера установки и настройки
-
Знакомимся с лицензионным соглашением
-
Выбираем каталог для установки
-
Вводим домен сервера
-
Вводим логин администратора
-
Вводим пароль администратора
-
Выбираем тип конфигурации сервера
-
Установка сервера
-
Установка завершена
Запуск сервера[править]
Сервер добавляет себя в список сервисов системы, но не запускается автоматически. Для запуска в ручном режиме сделайте двойной щелчок по ярлыку «Запустить ejabberd» на рабочем столе, а для запуска сервера при старте системы измените в «Панель управления -> Администрирование -> Сервисы» тип запуска сервиса ejabberd с «Ручной» на «Автоматический«.
Если при попытке запуска сервера возникает следующее сообщение об ошибке:
Starting ejabberd... ./ejabberdctl: erl.exe: can't execute: (14001) Error 14001 There is a problem starting Erlang. If the error you see is 14001, you need to install: Microsoft Visual C++ 2005 SP1 Redistributable Package You can download that installer from www.microsoft.com You can also check the ejabberd Administrator Guide
то потребуется дополнительно установить Microsoft Visual C++ 2005 SP1, скачать его можно с официального сайта Microsoft.
После успешного запуска сервера откроется информационная веб-страница в браузере.
Панель администратора и клиент, подключенный к серверу
С этого момента к Вашему серверу можно подключаться с других компьютеров, пользователи могут заводить учетные записи, общаться между собой и устраивать конференции.
Используя свой администраторский аккаунт, Вы можете выполнять некоторые административные функции прямо из своего Jabber-клиента, например, можно создавать новые учетные записи и просматривать список подключенных пользователей. Эти функции доступны через браузер сервисов. Также становятся доступны стандартные функции администратора — рассылка массовых сообщений для всех пользователей и установка так называемого «Сообщения дня».
Кроме того, Вы можете получить доступ к веб-интерфейсу, через который можно управлять настройками сервера и смотреть статистику.
Авторизация в панели администратора
Этот интерфейс доступен на Вашем компьютере по адресу http://localhost:5280/admin. Для авторизации введите в поле «Пользователь» полный Jabber ID администратора, а в поле «Пароль» — пароль, введенный Вами при установке сервера.
Ссылки[править]
- Настройка ведения логов в конференции
2022. AstraChat — open-source чат для локальной сети на базе XMPP
Похоже, что Slack уйдет из России. А на российские мессенджеры в условиях кибервойны и аварий в дата-центрах — тоже нельзя будет положиться. Поэтому заменять Slack лучше сразу мессенджером, который можно установить на собственный сервер и полностью его контролировать. Из open-source мессенджеров для локальной сети, пожалуй, лучший — это AstraChat. Он работает и на Windows, и на Linux, и на Mac, имеет мобильные клиенты для iPhone и Android. А главное — он основан на надежном и безопасном протоколе XMPP, который не боятся использовать в государственных организациях и в банках. Кроме стандартного обмена сообщениями, AstraChat поддерживает аудио-связь, создание групповых чатов, пересылку изображений, индикацию онлайн статуса.
2014. PhoneUP интегрировали с Cisco Jabber
Компания Aurus представила новую версию своего программного продукта для расширения возможностей систем корпоративной IP-телефонии, построенной на базе Cisco Unified Communications Manager — PhoneUP 3.8. Основная новинка релиза — интеграция модуля «Директория» с Cisco Jabber. Теперь адресная книга Cisco Jabber может формироваться из нескольких корпоративных систем и баз данных и, таким образом, содержать не только контакты сотрудников из Active Directory. Например, при интеграции с CRM, Cisco Jabber штатными средствами подпишет любой входящий звонок от клиента. Новый функционал также востребован в разнородных сетях связи – модуль «Директория» позволит объединить контакты всех удаленных подразделений и аффилированных компаний, независимо от используемых в них АТС. А если актуальная информация о сотрудниках и их телефонах хранится в специализированной HR-системе, Cisco Jabber сможет получать контакты непосредственно из нее.
2008. Cisco купила Jabber
Речь идет не о протоколе Jabber (jabber.org), а о компании Jabber Inc (jabber.com). Эта компания была основным спонсором сообщества разработчиков Jabber с 2000 года и занимается разработкой и поддержкой коммерческой IM-платформы для бизнес-коммуникаций Jabber Extensible Communications Platform (Jabber XCP).Протокол Jabber (недавно переименованный в XMPP) — это открытый и безопасный стандарт для обмена мгновенными сообщениями и контроля онлайн-статуса. Jabber имеет шансы стать основным протоколом для всех мессенджеров. На сегодняшний день он является основным протоколом для систем GTalk, Gizmo, IBM Lotus Sametime, а другие системы, например MS Live Messenger и Yahoo Messenger используют Jabber для общения друг с другом. Приобретение платформы Jabber XCP и команды разработчиков, которые как никто другой разбираются в IM, — это еще один шаг Cisco к прямой конкуренции с Microsoft в сфере бизнес-коммуникаций. Как известно, Cisco владеет лучшим сервисом вэб-конференций Webex (LiveMeeting отдыхает) и недавно приобрела email-сервер PostPath (который по своим возможностям превосходит MS Exchange). Jabber XCP — отличное решение, чтобы переплюнуть MS Office Communications Server.
2008. ejabberd 2.0.0: новая версия Jabber-сервера
Разработчики ejabberd объявили о выходе Jabber-сервера ejabberd версии 2.0.0. Новая версия, по сравнению с веткой 1.1, содержит более 200 улучшений. В целом, в новом релизе реализованы следующие возможности: улучшена работа в кластерах и масштабируемость;внесены изменения в механизм межсерверных соединений;внесен ряд улучшений в механизмы безопасности, включая поддержку PAM, возможность установки ограничений в многопользовательских конференциях;добавлена поддержка обмена файлами через proxy;внесены изменения в модуль WebClient.
2007. Яндекс запустил свой Jabber-сервер
Яндекс запустил свой Jabber-сервер, интегрированный в службу Я.ру (на котором уже можно зарегистрироваться и без приглашений, возможно эти события связаны). Данные из профиля на Я.ру уже введены в vCard, также на автоматически настроенный транспорт «Почта» приходят уведомления о новой почте. В качестве логина используется почта *@ya.ru (т. е. ваш_логин_на_яндексе@ya.ru), и соответственно, ваш яндексовский пароль. Jabber-хост: xmpp.yandex.ru, порт: 5223, SSL-шифрование надо включить.
2007. Расширяются возможности мгновенного обмена сообщениями Jabber
Компании, которым необходим инструмент для организации более эффективной совместной работы сотрудников в реальном времени с использованием мгновенных сообщений (instant messaging, IM), обнаружат, что продукты на базе протокола XMPP (Jabber) обеспечивают хороший набор функций и интеграцию с другими платформами. Недавно лаборатория eWeek Labs изучила три продукта, базирующиеся на XMPP: OPN System Rivoli компании Antepo, Jabber XCP (Extensible Communications Platform) 5.1 фирмы Jabber и Wildfire Enterprise 3.1 производства Jive Software. OPN System Rivoli компании Antepo стоит 18 долл. на пользователя. Цены на Jabber XCP начинаются с 35 долл. на пользователя. А цена Wildfire Enterprise составляет 495 долл. плюс 12 долл. на каждого пользователя. Antepo предлагает бесплатную версию своего приложения с ограниченной функциональностью, а Jive Software — усеченную версию Wildfire с открытым исходным кодом.
2006. В CommuniGate Pro появилась поддержка Jabber
Компания CommuniGate Systems выпустила версию 5.1 коммуникационного сервера CommuniGate Pro. В ней переработаны Web-интерфейсы пользователя и администратора сервера, причем последний переведен на русский язык. Наряду с этим заметно упростилась процедура инсталляции CommuniGate Pro. В версии 5.1 представлен также новый протокол коммуникаций между клиентом и сервером, названный XIMSS (XML Interface to Messaging, Scheduling and Signalling), на базе которого организован интерфейс сервера XML API. Протокол XIMSS упрощает методы доступа к серверу программных клиентов, а также позволяет снизить стоимость клиентских программ и устройств. Обеспечена также поддержка популярного протокола обмена мгновенными сообщениями XMPP (или Jabber). Это значительно увеличивает число клиентских IM-программ, которые могут работать с сервером. С новой версией будет поставляться удобный Web-интерфейс пользователя для чтения почты, работы с календарем, заметками, задачами. Поддерживаются расширенные функции управления звонками и переадресации вызовов с возможностью их настройки пользователем.
Prosody — это легковесный кроссплатформенный XMPP-сервер, написанный на языке программирования Lua. На хабре есть несколько статей по настройке prosody в стандартном варианте — в linux. Настройка в windows содержит несколько подводных камней, о которых я постараюсь рассказать.
Сперва расскажу о плюсах и минусах данного решения. Плюсы: экстремальная легковесность.
На скриншоте — типичное потребление ресурсов prosody+служебной утилиты srvany, которую я использовал для создания службы. Ещё к плюсам можно отнести модульность и поддержку многих XEP.
И минусы: отсутствие GUI (для кого-то это не минус), для настройки под windows нужно поработать напильником. Настройка под windows сложнее аналогичной настройки под linux.
Первый подводный камень ожидает нас уже на этапе скачивания дистрибутива. Для windows можно скачать, как инсталлятор, так и просто архив с prosody. Дело в том, что все до единого bat-файлы содержат строчку
if exist Uninstall.exe set datastore=%APPDATA%Prosody
Это значит, что если найден деинсталлятор, то все данные сервера будут храниться в %APPDATA% запустившего сервер пользователя. Это не то, что нам нужно, поэтому, для того, чтобы хранить данные там же, где хранится всё остальное, нужно либо использовать дистрибутив с архивом вместо инсталлятора, либо переименовать после инсталляции файл uninstall.exe, например, в uninstall.bkp.exe. Скачиваем и устанавливаем необходимый дистрибутив.
Второй подводный камень — prosody под windows не имеет службы. Будем считать, что вас не устраивает каждый раз для запуска prosody логиниться под пользователя и запускать bat-файл prosody.bat. Для создания службы prosody я предлагаю использовать утилиту srvany, входящую в Windows Server 2003 Resource Kit Tools. Даже если ОС на вашем сервере будет отличаться от server 2003, srvany должна нам помочь.
- Устанавливаем resource kit, соглашаемся с предупреждениями о несовместимости с ОС, если они будут.
- Открываем командную строку cmd от имени администратора, выполняем следующее (вставьте свой путь к srvany):
instsrv.exe Prosody "C:Program Files (x86)Windows Resource KitsToolssrvany.exe"
- Открывaем regedit, идём в «HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesProsody«
- Создаём раздел «Parameters«.
- В разделе «Parameters» создаём строковый параметр «Application» со значением «C:Program Files (x86)Prosodyprosody.bat» (подставьте свой путь).
Служба создана, можно выставить ей тип запуска «автоматически«. Внимание! Остановить созданную таким образом службу нельзя, для остановки завершите процессы srvany и lua. До тех пор, пока не сделаны все настройки, службу запускать не надо.
Настроим prosody. Для этого запустим bat-файл editconfig.bat. Все опции документированы, я не буду описывать всю настройку досконально. Документация по модулям может быть найдена на официальном сайте.
Рекомендуется использовать tls для шифрования сессий. Есть несколько вариантов настройки tls:
- Можно получить бесплатный сертификат на год у StartCom. Если вы планируете открыть доступ к jabber-серверу из интернета.
- Можно использовать самоподписанный сертификат. При первоначальном подключении к такому серверу клиенты, обычно, выдают множественные предупреждения.
Генерация самоподписанного сертификата
Использовать prosodyctl для генерации сертификата в windows мы не можем, т.к. эта утилита не портирована. Необходимо
- скачать openssl для windows
- Указать конфигурационный файл openssl.cnf из поставки prosody (лежит в папке cert). Для этого необходимо открыть командную строку и выполнить следующее (указав свой путь):
set OPENSSL_CONF=C:Program Files (x86)Prosodycertsopenssl.cnf
- Перейти в директорию с распаковынным openssl и сгенерировать сертификаты:
openssl req -new -x509 -days 1825 -nodes -out "prosody.crt" -newkey rsa:2048 -keyout "prosody.key"
- Можно просто отключить модуль tls (хоть он и помечен, как generally required) или не указывать путь к сертификатам в конфигурационном файле. Это подойдёт для небольшого корпоративного офиса.
Если вы настраиваете корпоративный сервер, то вам понадобится включить модуль groups для общего ростера.
Необходимо раскомментировать соответствующую строчку в конфиге для того, чтобы загружать модуль groups при старте сервера, подготовить текстовый файл с описанием групп и указать путь к файлу:
modules_enabled = {
-- Other modules
"groups"; -- Enable mod_groups
}
groups_file = "groups.txt"
Создадим groups.txt в поддиректории data. Если вы планируете использовать кириллицу, то правьте файл с помощью notepad++ или любого другого продвинутого текстового редактора в режиме UTF-8. Следующий пример файла взят из официальной документации:
[Support Team]
support@example.com
john.doe@example.com
[Development Team]
hardworkingdeveloper@example.net=Joe Coder
other.dev@example.com=Mel
Здесь есть один нюанс. Пользователи каждой группы видят только тех, кто входит в эту же группу. О других случаях официальная документация молчит. Взглянув на исходный код модуля видно, что если поставить + перед названием группы, то она становится общей — эту группу видят все.
[+Support Team]
support@example.com
john.doe@example.com
[+Development Team]
hardworkingdeveloper@example.net=Joe Coder
other.dev@example.com=Mel
Добавлять в группу можно даже несуществующих на данный момент пользователей.
Во время конфигурации можно запускать prosody из стартового скрипта prosody.bat для проверки результата. Запускайте скрипт от администратора во избежание проблем. После окончательной настройки запустите созданную ранее службу prosody. Управлять prosody на ходу можно, используя модули admin_adhoc и admin_telnet.
В корпоративной среде среди сисадминов «старой закалки» бытует мнение, что лучший мессенджер и чат, хорошо защищенный и гибкий — это Openfire. Но, к сожалению, основное достоинство этого продукта — бесплатность. Когда дело доходит до реальных задач, он решает их либо недостаточно хорошо, либо просто пасует, потому что не хватает необходимых инструментов.
Сказывается недостаток осведомленности о других продуктах, которые с успехом выполняют те же задачи: свой собственный сервер, переписка под контролем, шифрование трафика, закрытый мессенджер, не зависящий от облачных сервисов, звонки и обмен документами, поддержка разных операционных систем и мобильных устройств, плотная интеграция с другими программами, которые уже используются в компании.
Наша компания вот уже 18 лет занимается развертыванием и настройкой корпоративных мессенджеров в самых разных компаниях. И год за годом приходится преодолевать дремучие заблуждения системных администраторов, технических директоров и IT-менеджеров самых разных уровней в этой области.
Корпоративный мессенджер? Поставьте Openfire! Он бесплатный и там все есть. Мне админы говорили и на всех форумах написано. Jabber — это сила! Гора клиентов под все ОС, неограниченные возможности, расширяемость, open source, безопасность и бла-бла-бла.
За годы работы накопился внушительный список, которым мы делимся с нашими клиентами, настоящими и будущими, чтобы банально сэкономить время и не повторять по 100 раз одни и те же мантры.
В статье описаны проблемы, с которыми постоянно сталкиваются люди, использующие в своей работе сервер корпоративного мессенджера Openfire и его клиентское приложение Spark.
Наш основной рабочий продукт — защищенный мессенджер MyChat. Он работает тоже на открытом протоколе, но это не XMPP. Поэтому говорим мы про Openfire, но показывать, как надо — будем на примере MyChat. В статье сравниваем самую свежую версию Openfire 4.7.0 (x64) от 19.01.2022 и корпоративный мессенджер MyChat версии 8.14.4 от 01.02.2022 года.
- Openfire + Java + XMPP = хорошо?
- Очень большой расход трафика, избыточный протокол
- Восстановление пароля админа в Openfire
- Проблемы с русским языком
- Нельзя удалять отправленные сообщения
- Проблемы с русскими логинами в Active Directory
- Общая древовидная книга контактов
- Передача файлов в Openfire: боль и страдания
- Как подключаться к Openfire одновременно разными устройствами
- Нет статусов получения/прочтения в приватах и конференциях
- Многопользовательские конференции в Openfire
- Нет системы прав и ограничений
- Установка сервера Openfire на Windows
- Клиент Spark для Openfire
- Spark 3.0.0 beta
- iOS + Android + Openfire?
- Голосовые и видеозвонки
- Никакой технической поддержки от производителя
- Сравнение Openfire и корпоративного мессенджера MyChat
- Рекомендации по переходу на MyChat
1. Openfire + Java + XMPP = хорошо?
Итак, OpenFire — это сервер, написанный на Java, который работает по протоколу XMPP (Jabber). Казалось бы, что тут плохого? Java — кросс-платформенная технология, сервер можно запускать на любой операционной системе. Jabber — открытый протокол, в Сети огромное количество приложений под любую ОС, которые его поддерживают.
В силу того, что Java довольно прожорлива к оперативной памяти, будьте готовы к нагрузкам из расчета 2 гигабайта на 800 онлайн пользователей. Это грубо 2-3 мегабайта на одного человека в сети. Расчет не очень точный, потому что расход памяти растет нелинейно, сначала сильно, а потом медленнее. Но рассчитывайте на такой сценарий, оптимизировать не получится. Будьте аккуратны при запуске Openfire параллельно с другими сервисами на одном физическом или виртуальном сервере.
Если повышенный расход памяти сервером еще можно как-то пережить, то зоопарк клиентских приложений, что работают по протоколу XMPP, однозначно добавит вам седых волос. Мы тестировали последние версии Miranda, Pidgin (почившего в бозе), QIP Infium (тоже RIP), Pandion, Psi, Conversations, Adium, Vacuum-IM и, наконец, Spark двух последних версий (официальный клиент для Openfire).
Перефразируя классика, все эти приложения служат одной цели, но косячат каждое по-своему. Если в вашей компании не только Windows, а еще и Linux, macOS, Android и iOS (покажите пальцем в человека, у которого нет смартфона), вам придется, скорее всего, ставить разные клиентские приложения на разные системы. С разными интерфейсами и непонятно какой русификацией.
Кроме того, вы не получите полный функционал вашего сервера Openfire, потому что все эти приложения реализуют функционал XMPP с отличиями, не полностью, либо со своим специфическим видением. И это логично, потому что это совершенно разные бесплатные программные продукты, они никому ничем не обязаны.
Особняком стоит Spark, официальный клиент для Openfire, но в нем есть две ложки дегтя.
Первое. Он ОЧЕНЬ прожорлив по памяти. Если вы собираетесь развернуть его на терминальном сервере, ждите неприятностей.
В принципе, тут никаких сюрпризов, Спарк написан на Java, соответственно, память он есть как не в себя. Причём, новая бета-версия «кушает» в 9 раз больше, чем нативное приложение MyChat Client, которое умеет в разы больше и работает значительно быстрее:
Если у вас терминальный сервер, то использовать Spark на нём — плохая идея. В терминале используйте MyChat. И память сэкономите, и быстродействие выше, и функционала значительно больше.
Второе. Нет версий под мобильные платформы. Вам придется использовать сторонний продукт.
Снова смотрим в сторону MyChat — тут с поддержкой платформ всё в норме, Windows/Linux/macOS, iOS/Android и версия для браузера.
2. Очень большой расход трафика, избыточный протокол
Цитата с сайта компании IBM: «Наверное, главным недостатком протокола является то, что передаваемая информация крайне избыточна, так как более 70% трафика XMPP составляют статусные сообщения о присутствии».
Еще одной проблемой может оказаться то, что посредством данного протокола невозможно передавать не модифицированные бинарные данные. Поэтому для передачи файлов приходится использовать дополнительные протоколы.
Для локальной сети с гигабитными сетевыми интерфейсами это, понятно, не проблема. Но, когда вы столкнётесь с задачей подключения к корпоративному чату людей со смартфонами «в полях», проблема трафика встанет очень остро. И дорого.
С трафиком у MyChat дела обстоят значительно лучше. Во-первых, протокол значительно экономнее, построен на JSON, во вторых, все сообщения упаковываются GZIP, причём сервер и клиент сами решают, есть в этом смысл или нет. Например, если сообщение очень короткое, то сжатие будет неэффективно.
Простой пример работы небольшого сервера:
11 дней работы, 60 пользователей, 5 конференций, чуть меньше 3 000 сообщений, 28 мегабайт трафика. Суммарно. Тут и спорить не о чём.
3. Восстановление пароля админа в Openfire
Не существует нормального способа восстановления или замены утерянного пароля администратора (admin/admin). Вам придется вручную править XML файлы настроек или работать с утилитами вроде phpMyAdmin, чтобы править базу данных с помощью SQL-скриптов.
В MyChat такой проблемы не существует в принципе. Всегда можно войти в админку по токену с MyChat Client, например, чтобы изменить пароль администратора, или открыть консоль управления прямо на сервере, либо, в крайнем случае, использовать восстановление пароля.
4. Проблемы с русским языком
Одна из самых популярных тем на форуме поддержки Openfire. Несмотря на то, что в программе повсеместно используется UNICODE, при сохранении протоколов разговоров в национальных кодировках (не английский язык) получается нечитаемая каша. Люди для решения проблемы рекомендуют править исходные тексты плагинов(!) и пересобирать их самому.
Отдельная боль — локализация интерфейса Openfire и его официального jabber-клиента Spark.
Если сменить язык на английский, то Openfire ведёт себя, как сепаратист. Частично — меняет, частично — плевать хотел на то, что ему сказали:
С локализацией Spark, традиционно, тоже проблемы. Но это же бесплатный сыр, пользуйтесь, что дают, и не жалуйтесь.
Просмотр профиля, магическая кнопка «Отчистить»:
5. Нельзя удалять отправленные сообщения
Это большая проблема, и она не решена в Openfire. Причин для удаления сообщений в корпоративной среде множество: от ошибочно отправленных до сознательного удаления конфиденциальных данных. Понятно, что задача удаления сообщений достаточно сложна, технологию должен поддерживать как сервер, так и клиентское приложение на всех операционных системах, причем сообщения должны удаляться и из истории, а затем синхронизироваться, как это сделано ещё в древних версиях MyChat в 2017 году.
В общем и целом — проблема не решается, потому что XMPP. Сделать расширение протокола можно без проблем. Но его никто не станет поддерживать, а следовательно, функционал работать не будет.
6. Проблемы с русскими логинами в Active Directory
Традиционная проблема Openfire. Разработчики считают, видимо, что логины в домене бывают только в кодировке ASCII.
Однако в MyChat такой проблемы нет, и он тоже работает с доменом через LDAP, как и Openfire. К тому же поддерживает сразу несколько доменов, прозрачную авторизацию, смешанные типы авторизаций и бог знает что ещё.
7. Общая древовидная книга контактов
Тут начнём с MyChat. Позже я поясню, почему. Итак: компания, используется пара доменов, 400-500 сотрудников, разные OU, вложенности по подразделениям, куча информации про людей, вроде ФИО, телефонов, фотографий, должностей, email и так далее.
Зашли в интеграцию с доменом, подключились, втянули пользователей с подразделениями в сервер. Общий список контактов сформировался автоматически. С любым уровнем вложенности.
Одной кнопкой, Карл!
Я уже не говорю про скриптовый движок, с помощью которого можно настроить любые «хотелки».
Что предлагает Openfire?
Ручное формирование списка контактов. Так называемый ростер. Уровень вложенности — один. Если импорт из домена — всё одной пачкой. О стиле отображения пользователей в чате можете забыть. Есть доменный displayname — вам хватит.
Почему не сделать, как в MyChat? Надо имя, фамилия, внутренний телефон — ок. Надо email + доменный логин — пожалуйста. Хочется ник с должностью или полное ФИО — будьте пожалуйста. Причём заметьте, не надо НИЧЕГО менять в учётных записях пользователей. Даже сервер перезапускать не надо
И да, два домена — ставьте два сервера. И линкуйте их. Openfire не умеет в несколько доменов в одиночку.
А ещё Openfire периодически теряет связь с Active Directory. Не сильно напрягает, но все равно хочется стабильности. Раз уж функция синхронизации заявлена. А если пользователю меняется пароль в AD, то через некоторое время он перестает подключаться к Openfire. Совпадение? (с)
8. Передача файлов в Openfire: боль и страдания
Настроить передачу файлов в Openfire могут не только лишь все (c). Файлы не отправляются. Ни скрепкой над полем ввода, ни иконкой сверху. Если отправить скрепкой, то в чат падает сообщение, что не получилось. Если кнопкой — то просто в dev/null
Причём, порт для передачи файлов TCP 7777 занят сервером Openfire и проверяется Telnet-ом:
Мало того, что в «родном» клиенте Spark это не работает, так что если вы решить взять какой-нибудь другой Jabber-совместимый клиент вроде Miranda, PSI или Pandion, то между ними файлы передаваться не будут, потому что способы передачи несовместимы друг с другом. Это к вопросу о байке «джаббер клиентов десятки, можно взять любой, который понравится, и всё будет работать». Ничего подобного.
С «горой джаббер клиентов» ситуация настолько плачевная, что даже комментировать нечего.
Снова попытка передачи файлов между Spark разных версий:
Отправка изображений тоже не работает, программа «подвисает», и никаких диагностических сообщений не выдаёт:
Однако, в некоторых ситуациях передача файлов работала. Но в клиенте Miranda
9. Как подключаться к Openfire одновременно разными устройствами
Или, другими словами — мультилогины. Вы же не задумываетесь, как это работает, когда запускаете Telegram на компьютере и в своём смартфоне. Одновременно. Оно просто работает.
Технически, конечно, всё очень непросто. Но для конечного пользователя всё естественно и понятно.
Но в Openfire вас снова ждёт проблема: при одном аккаунте невозможно писать с двух разных устройств. Точнее, залогиниться-то можно, но сообщения получает тот аккаунт, который залогинился последним. В итоге сообщение не доходит в оба устройства, а только в одно.
Синхронизация? Нет не слышали.
В MyChat мультилогины работают прекрасно, ещё с версии 8.2.
10. Нет статусов получения/прочтения в приватах и конференциях
Ну, просто нет. 2022 год, Viber, Whatsapp, Telegram, Signal… Это штатная фича, я вообще не представляю, как без неё можно работать.
В MyChat эта фишка есть. И не только в приватных диалогах, но и в конференциях.
Работает удобно и надёжно.
11. Многопользовательские конференции в Openfire
Скажем прямо, они есть:
Не очень удобные, в них мало что можно, но это лучше, чем ничего. С привкусом особенностей XMPP, но тем не менее.
Проблема только в том, что пользователям придётся самостоятельно входить в эту конференцию, нельзя практически ничего настроить. Например, запрет выхода, автоматический вход по группам пользователей, как в MyChat.
Права настраиваются индивидуально для каждой конференции:
Но их почти нет, поэтому процесс простой
Зато можно добавить в модераторы несуществующего пользователя:
…Эмм, три раза подряд:
Не очень понятно, как система понимает, кто модератор конференции, если в Openfire нет системы прав и ограничений.
12. Нет системы прав и ограничений
Про роли пользователей, группы прав и ограничений, видимо, в Ignite Realtime не слышали. Или обычный пользователь, или root. Получается, если мне надо одной группе пользователей отправлять файлы и личные сообщения, а другой — нет, то не выйдет. Или берём в руки напильник, Intellij Idea, исходный код и делаем, что нам надо. Логично, это же open source.
Ок, права пользователей — снова, не сильная сторона Openfire.
В MyChat есть группы прав, с древовидной структурой. Можно настроить любой аспект работы программы, всего прав под две с половиной сотни штук. Хочешь запретить выход из программы — одна галочка. Разрешить оповещения с подтверждением прочтения — одна галочка (не заморачивайтесь, этой супер фишки в Openfire нет и не предвидится).
Права применяются “на лету”, даже переподключать приложения не надо.
Даже нюансы работы администраторов можно настроить. Например, юному падавану дать только системные логи читать, сотруднику службы безопасности — смотреть протоколы переписок. Чтобы не сломали не погнули чего в настройках сервера. А заместителю админа — всё, кроме управления правами. Любой каприз, в общем.
Логично?
13. Установка сервера Openfire на Windows
Я специально вынес эту прекрасную процедуру аж в конец статьи, потому что так делать серьёзный софт корпоративного уровня просто нельзя. И я покажу, почему.
Качаем 90 мегабайтный инсталлятор последней версии Java Runtime Environment (JRE x64, это важно, потому что дистрибутив OpenFire тоже x64) с официального сайта java.
Потому что Openfire без него не установится. Ок, это нормально:
Сеанс профилактического пугания от Oracle про то, если если мы используем Java в коммерческих целях, то надо платить:
Пропускаем эти нюансы, устанавливаем JRE и повторно ставим Openfire.
В инсталляторе нет русского языка:
Ладно, мы не гордые, едем дальше. Но что это, у инсталлятора нет цифровой подписи в 2022 году??
Ок, плюём на безопасность и идём дальше. Стандартная установка, лицензионное соглашение, выбор папки, запуск в конце установки, всё, как обычно:
Сервер запустился в виде службы на TCP порту 9090 (http://localhost:9090/setup/index.jsp), в браузере открылся мастер настройки для выбора языка, где русский уже есть. Однако в левой части он определил, что язык русский, а в правой, как двуликий Янус, сомневается, и предлагает выбрать:
Выбираем русский и двигаемся дальше. Дизайн страниц как будто бы адаптивный, но не очень:
К сожалению, справки нету, поэтому догадаться, что такое «Ключ шифрования свойства» не получается. Пропускаем и продолжаем.
Выбираем встроенную базу данных, потому что ставим сервер с нуля и пока внешнюю БД использовать рано.
Используем стандартные настройки профиля, однако уже сразу непонятно, а как быть, если нам надо использовать доменных пользователей и обычных, или сразу несколько доменов?
Отдельно доставляет этот чекбокс, снятый по умолчанию:
Снова «Безопасность». То есть, по умолчанию, в базе Openfire хранятся пароли в открытом виде (!), а не хешированные с солью. Причём, я должен знать, насколько моё клиентское приложение продвинутое, умеет оно в хешированные пароли или нет.
2022 год на дворе. Ок, я не знаю, поэтому галку не жмём, идём дальше.
Настройка учётной записи админа:
Локализаторы интерфейса не в курсе наличия тире вместо двух минусов, а количество запятых в предложении, в котором “Например” с большой буквы в середине фразы, бьёт все рекорды.
Зачем два поля для повтора пароля, если пароль можно посмотреть иконкой?
Что будет, если я укажу некорректный адрес почты администратора или просто сделаю опечатку? Или я вообще не хочу указывать email?
Ок, пропускаем этот шаг и…
Жмём кнопку «Назад» в браузере и, ура, вроде всё получилось?
Слово «Кажется» не вселяет оптимизм. Но инструкция по переустановке сервера уже пахнет не очень хорошо. Ок, идём в консоль администратора и вводим логин с паролем admin/admin:
Работает, нас впустило в админку. Интерфейс, конечно, ужасен, но его же видит только администратор с устойчивой психикой, расшатанной закалённой текстовыми XML файлами настроек всевозможного софта.
Прыгающий текст:
Кривые тексты с пробелами в странных местах единой «простынёй», без абзацев и стилистики:
6 (!!!) страниц текстовых свойств для редактирования переменных. Подумаешь, придумывать удобный интерфейс для этого всего, пусть администраторы регулярно «пострадывают’:
Минимальное разрешение экрана, чтобы можно было пользоваться админкой без горизонтальной линейки прокрутки — 1860 точек по горизонтали. Так и запишем в системные требования, FullHD монитор.
Как не входил, если я сейчас залогинен в админку, уже минут 20?
В профиле пользователя практически нет никаких свойств, в отличие от MyChat, где этих полей гора, на любой вкус, плюс можно ещё и custom-поля добавить и использовать потом (или импортировать из домена):
Дата регистрации — прошлый век. Но я регистрировался 6 февраля 2022 года. И я онлайн. Но серверу Openfire виднее, конечно.
Ок, ладно, профиль пользователя — снова, не сильная сторона Openfire.
В принципе, при создании пользователя можно указать всего 4 поля и один чекбокс, администратор или обычный пользователь:
14. Клиент Spark для Openfire
Качаем последний доступный Spark версии 2.9.4 от 15 ноября 2020 года. Без JRE (один и тот же разработчик сервера и клиентского приложения). Тут же, на странице загрузки религия позволяет выложить дистрибутив с JRE и без него. Для сервера же, категорически нет:
А вот и первые грабли:
Клиент Openfire — 32-разрядный. Про это забыли написать на странице загрузки. Действительно, зачем, нам же по кайфу продираться через эти недоразумения и ставить ДВА раза JRE, x32 и x64.
Качаем вариант с x32 интерпретатором джавы, ставим, запускаем инсталлятор Спарка снова. Закономерно, цифровой подписи нет. Придумали ещё, мы же тут всем доверяем на слово:
Спарк собирается ставиться в Program Files:
Логично, не зря же он запросил повышенные привилегии на старте Это ненормальное и неправильное решение. На клиентских компьютерах у пользователей нет прав на установку софта в Program Files.
Про автоматизированную установку в домене речь не идёт, потому что MSI пакета нет, в отличие от MyChat. Но, с другой стороны, обновляться тоже вряд ли Spark будет в обозримом будущем, раз последний апдейт был почти 15 месяцев тому назад.
А если обновится, то администратор обойдет 400 компьютеров и обновит всё вручную, ему за это зарплату платят, верно?
В добрых традициях локализации Openfire Spark переведён на русский язык частично:
Зато он догадался, что у меня в системе основной — русский язык. Ок, логинимся на сервер:
Как-то не сложилось. Очень понятный, дружественный интерфейс. Очевидно, поиск сервера должен работать. Но не работает. В MyChat почему-то работает, находит все серверы в локальной сети, названия, параметры, версию. Может проверить подключение. Но тут должен быть особый дзен.
Порт правильный. Сервер работает.
Ага, надо ввести домен. Руками. «laptop-lksprqaq». Его можно увидеть в админке. Аллилуйя:
Куча окошек, чтобы войти в конференцию:
Отправка файлов не работает. Зачем про это писать отдельным сообщением к конференцию, на английском языке — неясно.
Традиционно, можно отправлять сообщения самому себе, они будут показываться по два раза:
Но и фотография не показывается, хотя загружена.
Как настроить общий древовидный список контактов — загадка. Но можно добавить пользователей в контакт-лист вручную:
Либо это можно сделать на сервере, но вложенности не будет, только группа/пользователи, не более.
Дизайн — моё почтение.
Пытаюсь загрузить фото в профиль, и получаю сообщение, не на русском, что моя фотка — не квадратная, и вообще я должен был её заранее подготовить и уменьшить до размера 64 на 64 точки, не барское это дело, фотографии кадрировать:
Однако, фотку программа приняла.
Если включить перевод, то он не работает, а чат задумывается на несколько секунд:
15. Spark 3.0.0 beta
Честно говоря, я был разочарован отсутствием красивых и удобных клиентов для Jabber на платформе Windows. Наверное поэтому, компании вроде Yandex и Google в свое время пилили свои клиенты. Был раньше классный MDC, но, к сожалению, развивать его прекратили. Исходники были доступны, но волну никто не подхватил.
Соответственно, были надежды на то, что 3-я версия Spark стала значительно лучше. Но, к сожалению, это не так.
Проблемы начались традиционно, сразу после загрузки дистрибутива:
У инсталлятора Spark всё так же нет цифровой подписи.
Глюков тут, само собой, ещё больше, чем в предыдущем Spark, их даже специально не надо искать. С пылу, с жару, клик на пустой группе контактов:
[email protected]@example, гм…
Всё те же косяки с локализациями, «Отчистить» и так далее, и тому подобное.
16. iOS + Android + Openfire?
Свадьба не сложилась. Есть сторонние приложения для Android разной степени готовности, для iPhone чего-то нормального и внятного нету до сих пор.
Ревизор не рекомендует (с)
У MyChat с поддержкой мобильных приложений всё в порядке. С блекджеком и куртизанками пушами и видеозвонками Даже для AppGallery небезызвестного Хуавея есть сборка.
17. Голосовые и видеозвонки
Если вы познали дзен, скурили километры мануалов и вслепую редактируете XML в vim, то настройка звонков для Openfire не должна вызвать у вас дрожи и душевных терзаний.
Но, по-правде — встроенных звонков в Openfire нет. Есть разной степени сырости решения, которые будут использовать звонки через интернет вроде сервиса Jitsi.
А что у MyChat? У MyChat тут всё в порядке. Голосовые звонки, видеозвонки, демонстрация экрана. WebRTC «под капотом». Всё это счастье работает «из коробки» в разных операционных системах и устройствах. Даже в браузере.
Свой TURN сервер для «пробивания» упоротых NAT-ов.
В общем и целом, взрослое решение для звонков, даже в LAN, без интернета вовсе. И, кстати говоря, звонки в MyChat «кушают» мало трафика, алгоритмы адаптируются под ширину полосы пропускания автоматически. Глушат «эхо», режут лишние звуки и шумы.
18. Никакой технической поддержки от производителя
Цитата с официального форума. Поддержка Openfire оказывается несколькими волонтерами на добровольных началах или вы найдете кого-нибудь сами, на платной основе, кто достаточно разбирается в этой системе. Ну а что вы хотели, это же open source и бесплатный продукт. Вам никто и ничем не обязан, если что-то сломается или возникнет проблема, которую не получается решить самостоятельно.
Снова-таки, MyChat тут стоит особняком. Потому что техническая поддержка оказывается самими разработчиками и сотрудниками компании уже много лет. Среднее время ответа можете оценить сами на форуме поддержки.
19. Сравнение Openfire и корпоративного мессенджера MyChat
В таблице сравниваем самую свежую версию Openfire 4.7.0 (x64) от 19 января 2022 года и MyChat версии 8.14.4 от 1 февраля 2022 года.
№ | Возможность | Openfire | MyChat |
---|---|---|---|
Установка, удаление и обновление |
|||
1.1 | Инсталлятор | Есть | Есть |
1.2 | Деинсталлятор | Есть | Есть |
1.3 | Автоматическая установка | Нет | Есть |
1.4 | Система автоматического обновления | Нет | Есть |
1.5 | Автоматическое обновление и сохранение всех данных при установке самой «свежей» поверху старой |
Есть | Есть |
1.6 | Portable версия | Нет | Есть |
Сетевые возможности | |||
2.1 | Работа в больших сетях | Есть | Есть |
2.2 | Работа в сложных сетях и через Интернет | Есть | Есть |
2.3 | Гарантированная доставка сообщений | Есть | Есть |
2.4 | Работа в терминальных сессиях | Есть, большой расход памяти | Есть |
2.5 | Шифрование трафика | Есть, но не все клиенты поддерживают | Есть |
2.6 | Работа в очень плохих сетях (спутниковая связь, «длинные» пинги) | Зависит от клиентского приложения | Есть |
Стандартные функции | |||
3.1 | Персональные сообщения | Есть | Есть |
3.2 | Статусы сообщений (получено, прочитано) | Нет | Есть |
3.3 | Текстовые конференции | Есть | Есть |
3.4 | Оповещения с контролем прочтения | Нет | Есть |
3.5 | Общая доска объявлений | Нет | Есть |
3.6 | Обмен файлами | Зависит от клиентского приложения | Есть |
3.7 | Передача изображений | Зависит от клиентского приложения, отправляется как файл | Есть |
3.8 | Автоматическая подсветка линков в тексте | Есть | Есть |
3.9 | Просмотр истории сообщений | Есть | Есть |
3.10 | Звуковое информирование о событиях | Есть | Есть |
3.11 | Личный список контактов | Есть | Есть |
3.12 | Отправка сообщений и файлов пользователям, которых нет в сети | Есть | Есть |
3.13 | Графические смайлики | Есть, но не emoji | Есть |
3.14 | Голосовые звонки | Нет | Есть |
3.15 | Видео звонки | Нет | Есть |
3.16 | Демонстрация экрана | Нет | Есть |
3.17 | Мультилогины (несколько устройств для одной учётной записи в сети одновременно) | Есть, но сообщения приходят только в один аккаунт | Есть |
3.18 | Поддержка PUSH-сервисов для Android/iOS устройств | Нет | Есть |
3.19 | Синхронизация истории сообщений с сервера | Нет | Есть |
Интеграция с Active Directory |
|||
4.1 | MSI пакет для разворачивания через групповые политики | Нет | Есть |
4.2 | Прозрачная авторизация пользователей | Нет | Есть |
4.3 | Импорт пользователей из Windows-домена | Есть, ограниченный | Есть |
4.4 | Поддержка любого количества разных доменов | Нет | Есть |
4.5 | Совместная работа «обычных» и доменных пользователей | Есть | Есть |
4.6 | Вход под доменными пользователями в приложениях MyChat под другие ОС: Android/iOS/Linux/macOS/WEB | Нет | Есть |
Настройка внешнего вида | |||
5.1 | Языки интерфейса | Есть | Есть, UNICODE |
5.2 | Кастомизация внешнего вида | Есть | Есть |
5.3 | Изменение шрифтов | Есть | Есть |
Администрирование | |||
6.1 | Централизованная настройка прав и ограничений пользователей | Есть, очень ограниченные | Есть |
6.2 | Группы пользователей | Есть | Есть |
6.3 | Фильтры «плохих» слов | Нет | Есть |
6.4 | Фильтры по IP, MAC, HardwareID | Нет | Есть |
6.5 | Антиспам и антифлуд фильтры | Нет | Есть |
6.6 | Система управления пользователями | Есть, ограниченная | WEB-интерфейс |
6.7 | Подробная справочная информация о пользователях (ФИО, email, телефоны, дата рождения, фото и т.п.) |
Есть, ограниченная | Есть |
6.8 | Просмотр протоколов и переписки на сервере | Нет | Есть |
Операционные системы | |||
7.1 | Windows | Есть | Есть |
7.2 | Android | «Родных» — нет | Есть |
7.3 | iOS | «Родных» — нет | Есть |
7.4 | Linux | Есть | Есть |
7.5 | macOS | «Родных» — нет | Есть |
7.6 | WEB | Нет | Есть |
Дополнительные возможности |
|||
8.1 | Сетевые статусы пользователей «свободен», «занят», «нет на месте» | Есть | Есть |
8.2 | Скриптовый язык для написания простых программ, расширяющих возможности чата | Нет | Есть |
8.3 | Интеграция с внешними сервисами | Есть | Есть |
8.4 | Система поиска пользователей | Есть, ограниченный | Есть |
8.5 | Древовидный общий список контактов, единый для всей сети, с неограниченным уровнем вложенности |
Нет | Есть |
8.6 | Менеджер учётных записей, если за одной программой работает несколько человек | Есть | Есть |
8.7 | Система игнорирования пользователей | Нет | Есть |
8.8 | Система плагинов для расширения возможностей программы | Есть | Есть |
8.9 | Список подразделений компании | Нет | Есть |
8.10 | Список должностей компании с сортировками «начальники — сверху» в списках контактов |
Нет | Есть |
8.11 | Внутренний форум | Нет | Есть |
8.12 | Управление проектами | Нет | Есть, Kanban |
8.13 | Чат для сайта | Нет | Есть |
8.14 | Конструктор дистрибутивов | Нет | Есть |
8.15 | Приглашение пользователей в чат по email или ссылке, без регистрации и установке приложения | Нет | Есть |
Техническая поддержка пользователей программы |
|||
9.1 | Встроенная справочная система | Нет, одна страница на форуме | Есть |
9.2 | Форум сообщества поддержки | Есть | Есть |
9.3 | Поддержка разработчиков по электронной почте | Нет | Есть |
9.4 | Дополнительные справочные материалы, статьи по использованию программы на сайте, блог | Нет | Есть |
9.5 | Поддержка разработчиков по Skype, Viber, Telegram, WhatsApp | Нет | Есть |
9.6 | Поддержка разработчиков по телефону | Нет | Есть |
9.7 | Приоритетная платная техническая поддержка | Нет | Есть |
9.8 | Платные доработки мессенджера «на заказ» | Нет | Есть |
3. Рекомендации по переходу на MyChat
Почему? Мессенджер OpenFire подойдёт для нетребовательных по функционалу и администрированию компаний, которым не нужны мобильные приложения. Программа медленно развивается, нет хорошей поддержки современных операционных систем и мобильных платформ Android/iOS.
Главный недостаток — практически полное отсутствие системы администрирования пользователей. Нет звонков и надёжной системы хранения и синхронизации истории сообщений. Многое можно в той или иной мере настроить, но готового решения “из коробки” вы не получите. Также вы не получите исчерпывающую техническую поддержку, потому что практически любой Jabber-сервер и клиентские приложения под него делаются разными командами людей или индивидуальными разработчиками по своим личным желаниям и возможностям. Из-за этого хорошей совместимости не будет. Также есть проблемы с клиентскими приложениями для Android/iOS под сервер OpenFire.
Как перейти? Для небольших компаний и бюджетных организаций переход с OpenFire на MyChat — логичный шаг, это полностью бесплатно. Стандартная лицензия MyChat до 20 человек онлайн — бесплатная, без ограничений по времени использования. Обновления также бесплатные.
Для бюджетных организаций и компаний с ограниченным финансированием это хорошее решение. Можно сэкономить на лицензиях и зарплате системного администратора. Потом, если компания будет увеличиваться, можно расширить лицензию до коммерческой. Ничего переустанавливать или перенастраивать не надо.
Цены. Коммерческая лицензия нужна, если у вас больше 20 сотрудников. Клиентские приложения бесплатные. Одно конкурентное подключение стоит 4 USD. Год обновлений входит в стоимость лицензии. Отдельно покупаются только MyChat Guest, конструктор дистрибутивов Distrib Maker и робот-викторина.
Адекватная служба поддержки. На украинском, английском, и русском языках. Очень большой активный форум технической поддержки (больше 44 тысяч постов на март 2022 года).
Давно на рынке? Первая версия MyChat вышла в 2004 году, за это время появились голосовые и видеозвонки, приложения под все популярные ОС, система управления задачами Канбан, внутренний форум и файловый сервер, интеграции с 1С, Телеграм, phpBB, Asterisk, TurboSMS и популярными языками программирования. Обновления MyChat стабильно выходят до 12 раз в год.
Больше полумиллиона из Украины, Беларуси, Молдовы, Казахстана, США, Италии, Швейцарии, Канады, Финляндии, Австралии, Индии, Польши, Великобритании, Германии, Таиланда, России и других стран. Реальные большие отзывы покупателей.
Под катом чисто техническая статья про настройку Jabber-сервера под Linux и клиентов к нему под Windows с одновременным прикручиванием формирования контакт-листа из AD LDAP с SSO-авторизацией посредством Kerberos.
Сперва небольшой обзор имеющихся доступных решений.
Как ни странно, из актуальных Jabber-серверов SSO / GSSAPI поддерживают все три: eJabberd, Openfire, Prosody. Первый я не осилил ввиду зубодробительности erLang-а. Точнее, в дефолтной конфигурации его запустить как раз плюнуть (спасибо дистростроителям). Но вот если надо прикрутить что-то эх-такое, чего изначально не было предусмотрено в конструкции, возникает дикая попа-боль. Второй весьма user-friendly, большинство фич работают из коробки. Но это Java со всеми вытекающими. В частности, даже банальное подсовывание SSL-сертификата сразу превращается в увлекательнейший траходром. Третья лишена большинства недостатков первых двух, но она отвратительно (точнее, почти вообще никак) не документирована и не масштабируется. В том плане, что до 100…150 пользователей работает ОК, потом начинает тупить, тормозить и валиться. Конкретно мне больше и не надо, поэтому я взял в качестве сервера Prosody. О ней и пойдет дальнейший разговор.
Касаемо клиентов. Всего хоть как-то GSSAPI под виндой сейчас поддежривают: Miranda, Psi, Spark, Pidgin.
Miranda хороша-красива, когда «обвешана». На «голую» (без плагинов) без слёз не взглянешь. Если же надо обновить версию, то «обвес» придётся формировать заново. Она не enterprise-friendly. Она глючновата в плане интерфейса. Может, например, почему-то не показать поступившее входящее сообщение. Может обвалиться после очередного обновления винды. Не проверяет SSL-сертификат сервера на валидность. Одним словом, мы попробовали, попользовались, нам не понравилось.
Что касается Psi, то для реализации GSSAPI там надо самостоятельно собирать Qt-шную библиотеку под названием qca-wingss. Готового бинарника я ожидаемо не нашёл, а скопилировать самостоятельно ниасилил.
Spark — это опять же Java, со всеми вытекающими. Кто желает, может пользовать. Меня от неё тошнит.
Остался Pidgin. Но и тут всё не слава богу. Во-первых, последняя виндовая версия, которая ещё умеет GSSAPI — это 2.10.11. В более свежих поддержку GSSAPI/SSPI выпилили (это касается только виндовых сборок; под линуксом всё нормально). Во-вторых, на клиентские машины нужно дополнительно ставить MIT Kerberos for Windows. Берут здесь. В более-менее «стандартной» конфигурации каких-то дополнительных настроек не требуется, в не совсем типичных случаях его тоже потребуется «подкрутить».
Окей, с выбором софта более-менее разобрались. Теперь некоторые неочевидные нюансы. Полностью процесс «от А до Я» расписывать не буду. Потому что в энторнетах есть некоторое количество хаутушек, да и админ, взявшийся за подобную задачу, наверняка уже обладает некоторыми навыками и компетенцией. Расскажу о том, во что «влетел» конкретно я.
Что касается сервера. Документация к нему не отличается точностью и полнотой. Там есть определённая путаница. Следует учитывать, что до версии 0.8 данный механизм был реализован в модуле «mod_saslauth» через прокладку в виде saslauthd. После версии 0.8 функционал был перенесён в отдельный модуль «mod_auth_cyrus», а saslauthd больше не нужен. То есть пакет «sasl2-bin» можно и не ставить, а руководствоваться нужно вот этой статьёй.
Далее. Как всегда, требуется сформировать в системе правильный конфиг «/etc/krb5.conf» и сгенерировать keytab. И самое главное, prosody должна иметь доступ на чтение и к тому, и к другому. Если вовремя не вспомнить, что в Debian-е по умолчанию она запускается из-под отдельного непривилегированного пользователя, то могут возникнуть весьма трудно диагностируемые проблемы и странные совершенно неинформативные фатальные ошибки в логах.
Кроме того, если в том же OpenFire функционал импорта пользователей из AD реализован «из коробки», то в случае c Prosody его придётся колхозить самостоятельно, ручками. Это не так уж и сложно, но это нужно сделать. Об этом я напишу во второй части.
Теперь что касается клиента.
Pidgin-а ставим как обычно, но не свежее версии 2.10.11. С MIT Kerberos никаких премудростей нет, обычный wizard типа «xyяк, xyяк и в продакшн» «next, next и готово». На последнем шаге он спросит, надо ли автоматически стартовать при логине пользователя и надо ли сразу получать Kerberos-тикеты. Ответ: нет, не надо. Впрочем, на самом деле пофиг. Будет работать и так, и так.
В самом Pidgin-е в настройках аккаунта указываем только логин, имя домена и ресурс. Поле «пароль» оставляем пустым. Примерно так.
Если по условию задачи Kerber-осовский Realm совпадает с Jabber-овым доменом, то больше никаких действий предпринимать не нужно. Всё заведётся, пользователь успешно залогинится. В противном случае придётся совершить ещё ряд небольших шаманств.
Во-первых, сделать текстовый файл с названием «krb5.ini» по аналогии с линуксовым «krb5.conf» с указанием KDC и сопоставлением сущностей «domain» и «realm». Чтобы оно понимало, из какого Realm-а запрашивать ключи для того или иного домена и где вообще искать KDC (Key Distribution Center). Упомянутый «krb5.ini» следует положить либо в «c:windows», либо в профиль пользователя (по желанию админа). Во вторых, после неудачной попытки залогиниться нужно назначить «Default Ticket» прямо в интерфейсе MIT Kerberos (на скриншоте обвёл синим прямоугольником). Это требуется сделать ровно один раз. Возможно, данную настройку можно выполнить и через реестр. Не знаю, настолько глубоко не ковырял.
Как-то так и настраивается SSO-аутентификация. Про формирование ростера (списка контактов и групп) читайте в следующем псто.
Содержание
- Установка ejabberd под Windows
- Установка сервера
- Установка и настройка Jabber-сервера
- Содержание
- Подготовка
- Компьютер
- Интернет
- Практика
- Регистрация доменного имени
- Установка и настройка программы-сервера
- Поднимаем свой Jabber сервер
- Установка
- Настройка
- Настройка DNS
- Ставим MySQL (maria-db)
- Готовим MySQL к подключению jabberd
- Настраиваем jabberd
- Автозапуск при старте системы
- Получаем доверенный сертификат
Установка ejabberd под Windows
Рассмотрим установку сервера ejabberd на компьютеры под управлением ОС Windows в стандартной конфигурации для использования в локальной сети с открытым доступом из Интернет и с использованием службы DynDNS.
Предполагается, что у Вас уже установлена операционная система, настроен доступ в Интернет, а доменное имя на DynDNS (допустим, это будет myjabber.ath.cx) указывает на внешний адрес Вашего компьютера (либо тот, который доступен из Вашей локальной сети, если Вы настраиваете сервер без возможности подключения к нему из Интернета).
Первым делом скачайте программу-установщик на свой компьютер, сделать это можно на официальном сайте Process One на странице загрузки. После скачивания запустите файл и приступайте к установке.
Установка сервера
После запуска установщика первым делом появится диалог выбора языка. Выберите русский и нажмите «OK«. Запустится мастер установки, который поможет выполнить Вам все необходимые шаги. Во время работы мастера Вам придется ответить на следующие вопросы:
- Принятие лицензионного соглашения. Ejabberd распространяется на условиях лицензии GPL.
- Каталог для установки программы. Здесь будут находиться основные исполняемые файлы сервера и файлы конфигурации, а также база данных пользовательских аккаунтов под названием Mnesia.
- Доменное имя сервера. Как уже говорили выше, пусть это будет myjabber.ath.cx.
- Логин администратора. Вместе с доменным именем он составит Jabber ID администратора сервера.
- Пароль администратора.
- Вариант конфигурации сервера. Кластеры используются только на высоконагруженных серверах, поэтому отвечаем «Нет«.
После ответа на эти вопросы начнется процесс установки, во время которого будут выполнены основные настройки сервера. После установки сервер займет на диске около 15 Мб. Для окончания установки осталось выполнить лишь несколько шагов.
Установка и настройка Jabber-сервера
Требования для работы и процедура установки собственного сервера Jabber являются не такими сложными, как это кажется непосвящённому. Jabber не сильно требователен к ресурсам, поэтому сервер для него возможно устроить практически где угодно. Сложность в установке не превышает сложности установки типичного веб-форума, а местами и ещё проще.
Содержание
Подготовка
Компьютер
Для работы сервера Jabber вполне достаточно старенького компьютера с процессором с тактовой частотой 500 МГц, размером оперативной памяти 128 Мб и жёстким диском 4 Гб. Разумеется, возможно использовать и более мощные компьютеры. Если вы планируете хранить историю сообщений на сервере, потребуется более объемистый жесткий диск. Можно установить Jabber-сервер и на машину, которая уже работает как сервер, это не повредит другим программам, как вы можете догадаться. А можно использовать свой настольный компьютер, если вы не выключаете его на ночь. Ниже приведены наиболее оптимальные применения для основных Jabber-серверов:
- Ejabberd — наиболее универсальный вариант, рекомендуется. Сервер поддерживает кластеризацию. У сервера высокая отказоустойчивость
- Jabberd — старые компьютеры с низкой вычислительной мощностью
- Prosody — персональный сервер с низкой нагрузкой. Простой в настройке, но не отличается стабильной работой при высокой нагрузке. Нет кластеризации.
- Openfire — предприятия. Прост в настройке, но из-за виртуальной машины java потребляет много ресурсов.
Подробнее смотрите в статье «Выбор сервера»
Интернет
Возможно сделать так, чтобы к вашему серверу можно было подключиться не только из локальной сети или предприятия. Но не каждый провайдер позволяет своим клиентам использовать собственный сервер в интернете. Для работы сервера нужно, чтобы ваше подключение к интернету было с так называемым «публичным», или «белым» адресом IP. Проверить его наличие можно с помощью этой инструкции. Также желательно, чтобы этот IP-адрес был фиксированным, чтобы к нему можно было легко привязать доменное имя. Все эти проблемы отпадут сами собой, если вы используете сервер VPS или Dedicated от поставщика услуг хостинга — они всегда подразумевают предоставление в ваше распоряжение фиксированных «белых» IP. Наконец, важным фактором является стабильность подключения — проблемы со стороны сервера сказываются на всех подключённых пользователях одновременно.
Практика
Регистрация доменного имени
Как уже было сказано раньше, для работы jabber-сервера необходимо обзавестись доменным именем. Конечно, в крайнем случае можно обойтись и без него, но, согласитесь, вряд ли вам захочется видеть и использовать Jabber ID вида «vasya@169.254.96.124» или «petya@2001:470:0f3b:28fa::1«. Поэтому последним шагом перед, собственно, установкой сервера будет регистрация собственного доменного имени, тем более сделать это так просто! Подробнее об этом, а также о привязке домена к IP-адресу своего сервера читайте в статье «Регистрация доменного имени». Возможно использование и динамического адреса.
Установка и настройка программы-сервера
Подготовив «железо» для будущего сервера, подключив его к сети и привязав к нему доменное имя в этой сети, можно переходить непосредственно к установке необходимого программного обеспечения. Ниже приводятся подробные инструкции для упомянутых трех популярных серверов в варианте для двух операционных систем — семейства юниксоподобных ОС (в частности дистрибутивов GNU/Linux и BSD) и Windows. Если у вас нет особых причин использовать Windows для сервера — мы рекомендуем в качестве основы взять GNU/Linux, как более защищенную и стабильно работающую платформу.
Поднимаем свой Jabber сервер
Paramtamtam · 2015.4.1 · 12 min
Да с игрищами и блудницами, да. Но перед тем как это делать — давай определимся — какой сервер мы будем ставить. Выбор предо мной, собственно, был не велик:
- OpenFire (Apache License 2.0) — написан на Java и большинство функций на нём делаются в бесплатной версии;
- EJabberd (GNU GPL) — написан на Erlang , модульный, есть веб-морда в комплекте, поддерживает кластеризацию;
- jabberd2 (GNU GPL) — написан на C , тоже модульный, более компактный;
Решено было разворачивать на.. jabberd2 потому что:
- Он написан на C и отличается малым потреблением ресурсов (два других кандидата в ней относятся в частности к памяти очень расточительно) плюс высокой производительностью (среднее потребление памяти v2.3.2 (x86_64) — sm/6Mb + c2s/7Mb);
- Лишен лишних свистелок — он просто модульный xmpp сервер;
- Он до сих пор поддерживается, да и сам по себе просто няшка.
Установка
Всю работу выполняем под рутом. Будьте внимательны и осторожны!
Цепляемся к нашему серверу на CentOS 7 (установка на других дистрибутивах отличается, но в большинстве своем менеджером пакетов и некоторыми другими тонкостями), и подключаем первым делом EPEL-репозиторий:
После чего ставим сам jabberd:
Вместе с собой он притащит в систему (только что поставленную, в нашем случае) ещё
65 пакетов, для чего потребуется
Отлично, теперь просто проверяем — запускается ли он у нас:
И если вывод (крайние строки) похож на:
Без каких-либо летально/фатальных сообщений — значит всё у нас хорошо.
Настройка
Остается дело за малым — настроить его. Давай теперь определимся с тем, какой он в итоге должен иметь вид, тезисно:
- Имя сервера должно иметь вид xmpp.domain.ltd ;
- Хранение информации о пользователях в mysql базе (это и удобное администрирование, и при необходимости — легко делается веб-морда для регистрации пользователей, к примеру);
- Открытая регистрация для пользователей (при заходе на наш сервер человек указывает желаемый ник, нажимает в своем же клиенте “Зарегистрироваться”, профит);
- Логи переписки юзверей не ведем (по умолчанию), логи работы демонов — пишем в отдельный файл;
- Работа как без указания шифрования в настройках (SSL/TSL), так и с шифрованием;
- Транспорты и всё что с ними связано — оставим на потом.
Настройка DNS
Для того, чтоб при запросе xmpp.domain.ltd запросы попадали на наш сервер, где стоит jabberd — необходимо в DNS зоне domain.ltd добавить запись типа A со значениями хост — xmpp , значение — Ip.Адреса.Нашего.Сервера . Для сервиса pdd.yandex.ru это может выглядеть так:
Более того, так же есть смысл добавить следующие записи:
- _xmpp-client._tcp.xmpp типа SRV с весом ` и портом 5222 со значением xmpp.domain.ltd. и приоритетом 20`
- _xmpp-server._tcp.xmpp типа SRV с весом ` и портом 5347 со значением xmpp.domain.ltd. и приоритетом 20`
Проверить работоспособность DNS очень просто — достаточно запустить ping домена xmpp.domain.ltd и убедиться что ответы приходят, и приходят с ip 11.22.33.44 .
Ставим MySQL (maria-db)
Машка ставится легко и не принужденно:
Если всё запустилось без ошибок — ставим Машку в автозагрузку:
После чего мы заходим в БД и выполняем предварительную настройку:
Теперь у нас для mysql юзера под именем root установлен пароль MyMysqlPassword .
Так же есть смысл немного поправить настройки ( /etc/my.cnf ) доведя их, например, до следующего вида:
И перезапустить демона:
Теперь она будет потреблять памяти поменьше, но эти настройки актуальны лишь для мало нагруженных ресурсов.
Готовим MySQL к подключению jabberd
Чтоб jabberd смог работать с БД, необходимо её подготовить. Сперва необходимо зайти в консоль mysql:
И запустить скрипт создания таблицы (если что, он ещё есть на GitHub):
И создаем mysql-пользователя с именем jabberd2 и паролем MyJabberdPassword , предоставляя ему права на чуть ранее созданную бд:
На этом моменте считаем что mysql у нас готов к тому, чтоб начать работу с jabberd. Переходим к его настройке.
Настраиваем jabberd
Конфигурационные файлы jabberd находятся по пути /etc/jabberd/ , и имеют формат xml . Первым делом — сделаем резервную копию конфигов, которые будем изменять:
А так же создаем лог-файл (в который мы будем писать лог, вместо syslog ) и ставим на него права:
Внимание! Если у вас активна SELinux — то демон jabberd не сможет писать в лог файл. Необходимо или корректно настроить права доступа, или выключить SELinux, изменив в файле /etc/sysconfig/selinux строку SELINUX=permissive , permissive на disabled , после чего перезагрузить ОС.
И начнем с файла sm.xml , приведя следующие его части к виду:
Согласно этому конфигу, jabber сервер в качестве ключа аутентификации использует файл /etc/jabberd/server.pem . Логи пишутся в файл /var/log/jabberd.log . Имя сервера xmpp.domain.ltd . Для хранения данных используем локальный mysql, имя БД jabberd2 , пользователь jabberd2 с паролем MyJabberdPassword . Аккаунт (JID) администратора [email protected] . Пользователям разрешена регистрация ( ), и вновь зарегистрированным пользователям в контакт-лист мы добавляем пользователей (JID-ы) описанных в файле /etc/jabberd/templates/roster.xml .
Внимание! В приведенном примере отображены лишь те параметры, которые есть смысл изменить или добавить. Так как исходный конфиг отлично документирован — разобраться в нем не должно составить большого труда.
После внесения изменений мы можем проверить его, перезапустив демона и посмотрев логи на наличие ошибок, и netstat на наличие открытых портов 2843 , 2844 и 2845 :
Данную процедуру есть смысл повторять после изменения каждого файла, дабы вовремя предпринять меры по исправлению возможных ошибок при конфигурации.
Приступаем к правке файла c2s.xml , который отвечает за настройки соединения client-2-server:
Согласно этому конфигу, jabberd в качестве ключа аутентификации использует всё тот же файл /etc/jabberd/server.pem . Логи этого модуля (c2s) тоже пишутся в файл /var/log/jabberd.log . В секции разрешаем регистрацию пользователей, дважды указываем доменное имя сервера, приветственное при регистрации сообщение и путь к ключу. Остальные параметры в большинстве своем можно оставить в таком виде, в котором они есть по умолчанию. Пароли в базе храним на период запуска — в открытом виде (Внимание — не безопасно! После запуска — перевести на решим шифрования). Для остальных значений в указываем интуитивно-понятные параметры
Внимание! Как и в предыдущем примере — отображены лишь те параметры, которые есть смысл изменить или добавить.
Настал черед файла s2s.xml , который отвечает за настройки соединения server-2-server (в данный момент использовать данный функционал не будем, но у нас он будет уже преднастроен):
Внимание! Ну, ты уже понял — отображены лишь те параметры, которые есть смысл изменить или добавить
И укажем ростер JID-ов, которых необходимо добавлять ко всем пользователям, которые только зарегистрировались (именно его мы указывали в /etc/jabberd/sm.xml ):
Здесь пояснять ничего, думаю, нет смысла. Подробнее можно почитать по этой ссылке.
Если после перезапуска демона у нас ничего критичного в логах нет, и необходимые порты открыты — считаем что на этом шаге jabberd у нас корректно настроен и работает.
Можем попробовать зарегистрировать учетную запись на нашем сервере в любимом jabber-клиенте. Всё должно работать, включая TLS/SSL шифрование (но с сообщением что сертификат самоподписанный).
Автозапуск при старте системы
В нашей связке jabberd+mysql имеется одно слабое место — а именно запуск jabberd перед тем, как запустится mariadb. Я решил эту задачу довольно примитивно — созданием политкорректного скрипта /etc/rc.d/init.d/jabberd (взят оригинальный, и пути поправлены под CentOS), и запуск его с задержкой в 15 секунд из /etc/rc.local после старта системы.
И добавляем следующую запись в /etc/rc.d/rc.local :
И так же для “активации” обработки этого файла сделаем его исполняемым:
После чего перезапускаем сервер целиком, и повторяем проверку на отсутствие ошибок в /var/log/jabberd.log , /var/log/messages и наличие открытых портов.
Получаем доверенный сертификат
Всё хорошо — клиенты у нас подсоединяются, TSL/SSL работает, SRV записи в DNS имеются, пользователи успешно регистрируются, системные логи — пишутся, и после перезапуска сервера — демоны поднимаются и работают как и задумывалось.
Но у нас постоянно появляется окно о самоподписанном сертификате в клиенте при первом подключении. Для того чтоб этого избежать мы можем получить бесплатный SSL сертификат на startssl.com и использовать именно его.
После процедуры получения сертификата у нас будет 3 файла:
- ssl.key — приватный ключ;
- ssl.crt — сертификат;
- sub.class1.server.ca.pem — корневой сертификат startssl.com;
Эти три файла переносим на сервер, переходим в директорию с ними и выполняем:
Не забываем о некоторых юансах:
- Лучше открыть итоговый сертификат любимым текстовым редактором и проверить чтоб секции не были нарушены;
- Итоговый сертификат должен заканчиваться одной пустой строкой;
Т.е. вид его должен быть в результате следующий:
Jabber это открытый протокол для быстрого обмена сообщениями и информацией о присутствии между любыми двумя пользователями сети. В последне время jabber становится всё более популярным, что можно объяснить его простотой и открытостью.
Очень часто jabber используется как средство обмена сообщениями и файлами внутри компании. В этом случае можно сильно экономить на трафике, поскольку весь обмен сообщениями и файлами идёт только внутри локальной сети (в отличии от ICQ/Yahoo!/MSN, когда сообщения передаются через центральный сервер, установленный за пределами вашей локальной сети).
В этой заметке будет описан запуск простого jabber-сервера для локальной сети. В качестве сервера будет использован jabberd-1.4, который хоть и считается устаревшим, является одним из самых простых в настройке, и при этом стабильных серверов. В качестве операционной системы будет использована Gentoo Linux, однако приводимые тут инструкции в большинстве случаев будут справедливы и для других дистрибутивов.
Итак, приступаем к установке. Наверное сразу хочется выполнить команду:
emerge net-im/jabberd
Однако это не правильно, поскольку по умолчанию jabberd собирается с поддержкой ipv6, и отказывается запуска если у вас нет ipv6-адреса ни на одном из интерфейсов. Кроме того, поскольку мы собираем самый простой сервер, нам можно выключить так же поддержку различных баз данных и SSL (В локальной сети SSL не очень актуально). Для этого нужно добавить в файл /etc/portage/package.use строчку:
net-im/jabberd -ipv6 -mysql -postgres -ssl
И только после этого наконец можно выполнить команду:
emerge net-im/jabberd
После установки открываем в любом редакторе файл /etc/jabber/jabberd.xml и приступаем к настройке сервера.
Для начала находим строчку:
<host><jabberd:cmdline flag="h">localhost</jabberd:cmdline></host>
И заменяем в ней localhost, на имя нашего сервера:
<host><jabberd:cmdline flag="h">jabber.company.net</jabberd:cmdline></host>
В принципе этого достаточно. Далее вы можете поправить по своему усмотрению информационные сообщения сервера. Так же можно запретить авторизацию открытым текстом, закомментировав строку:
<mod_auth_plain>/usr/lib/libjabberdsm.so</mod_auth_plain>
Для тех кто не силён в XML, приведу пример закомментированной строки:
<!-- <mod_auth_plain>/usr/lib/libjabberdsm.so</mod_auth_plain> -->
Всё. Теперь можно запускать jabber-сервер:
rc-update add jabber default /etc/init.d/jabber start
Если на сервере настроен файрволл, то нужно разрешить доступ к порту 5222 со стороны локальной сети:
iptables -A INPUT -m tcp -p tcp --dport 5222 -s 192.168.0.0/255.255.255.0 -j ACCEPT
Кроме того, если вы хотите взаимодействовать с другими jabber-серверами, то вам нужно открыть порт 5269 для всех:
iptables -A INPUT -m tcp -p tcp --dport 5269 -j ACCEPT
После чего нужно сохранить правила iptables:
/etc/init.d/iptables save
Если вы хотите отключить публичную регистрацию, то раскомментируйте строчку:
<noregister/>
И закомментируйте строки:
<register notify="yes"> <instructions>Choose a username and password to register with this server.</instructions> <name/> <email/> </register>
И перезапустите сервис:
/etc/init.d/jabber restart
Надеюсь что эти инструкции будут для вас полезными.