Задача: поднять свой self-hosted мессенджер с преферансом и профурсетками доменной авторизацией и шифрованием.
Нюансы:
Nulla: облачные решения вроде Slack или Teams не подходят. Причин три: небезопасно, дорого, нужен быстрый интернет и современное железо.
Unus: доменные логины — есть имена с кирилицей, поэтому jabber-варианты вроде Openfire сразу отпадают, потому что не умеют в UNICODE-логины.
Duo: в компании работают несколько доменов, надо их использовать одновременно. С прозрачной авторизацией, чтобы пользователи не вводили логины/пароли, а сразу развернуть MSI через GPO и в бой.
Tres: есть пользователи с Android-девайсами, они должны подключаться параллельно, с теми же доменными логинами. Через интернет, с шифрованием, максимально безопасно. И чтобы пуши работали.
Время на предварительный поиск такого месседжера не приводим, потому что это задача не из простых. Нужен реально живой проект, который пилится уже много лет. Мы же реально понимаем, что серьёзный корпоративный софт — это больше про поддержку, исправление недочётов и решение "боли" клиента, а не "клауд-бэйсд", "футуродевелопмент", "блокчейн-инновейшн" и вот это вот всё.
Для препарирования выбран MyChat — корпоративный мессенджер с давней историей, большим живым форумом поддержки на русском языке и, (внимание!) бесплатной версией на 20 конкурентных подключений. Без trial-периода. Его просто нет. Так бывает.
Время на запуск — 15 минут. Поехали.
- Скачиваем и ставим дистрибутив сервера
- Импорт юзеров из домена
- Разворачиваем MSI пакет
- Включаем прозрачную авторизацию
- Port mapping на роутере, чтобы подключить людей через интернет
- Доменный логин на Android-смартфоне
- Мультилогин и привязка к телефону
1. Скачиваем и ставим дистрибутив сервера
00:00 Качаем дистрибутив с оф.сайта, нам нужен пока только сервер под Windows.
01:00 Запускаем инсталлятор, всё линейно и просто. Сервер ставим по умолчанию, подойдёт любая OS от Windows 7 и старше. Можно серверная, можно десктопная, x86/x64 — без разницы. Системные требования скромные, MyChat хорошо работает даже на допотопном по современным меркам железе.
Инсталлятор просит повышение привилегий UAC при старте, оно и понятно, зачем — установка идёт в Program Files. Дистрибутив с цифровой подписью, всё прилично.
В процессе установки программа просит email администратора и название компании, в которой она будет работать:
Email прописывается в профиль админа сервера, а название компании потом будет показываться в чате. Так что "Рога и копыта" не используем, а пишем что-то вменяемое :)
Автозапуск с Windows не делаем:
Забегая наперёд, скажу, что это нужно, чтобы запускать сервер службой. Ну а пока просто потренируемся с GUI-приложением.
03:00 Запускаем MyChat Server:
Разрешаем доступ. Таких запросов будет ещё два, для встроенного Web-сервера NodeJS и TURN-сервера для работы звонков.
Сервер работает:
03:10 Жмём кнопку "Администрирование" и заходим в админку:
Хочется пнуть разработчиков Openfire, ведь можно же сделать удобно и понятно, а не шариться судорожно по форумам в попытках узнать, а какой же дефолтовый логин и пароль у админа? :)
Система предупреждает нас, что надо будет поменять логин/пароль админа и впускает в консоль управления:
Админка шустрая, быстро работает и хорошо реагирует на команды управления.
Вся навигация делается через дерево слева, которое, как гармошка, открывается, когда выбрать корневой элемент. Возможностей и разных фич тут гора с тележкой, но всё грамотно разнесено по разделам + есть встроенная справка по F1. Открывается тут же, в браузере. В ней можно залипнуть на несколько часов :)
2. Импорт юзеров из домена
04:30 Заходим в импорт пользователей из домена:
Тут всё просто. Указываем хост контроллера домена и любого юзера с паролем, у которого есть право подключаться к домену. Это необязательно админ.
Подключение происходит через LDAP, втаскиваются пользователи, их фотографии, а также структура компании, если у вас всё толково разбросано по Organizational Units в дереве домена. Если нет — то можно только втянуть юзеров, подкрутив фильтр импорта, чтобы взять только тех, кого надо:
Нажимаем кнопку "Подключиться", а затем "Импортировать". Всё, учётки с доп. полями вроде email, должностями, email и телефонами импортированы.
3. Разворачиваем MSI пакет
06:00 Качаем MSI с сайта разработчиков и ставим его через GPO. Всё стандартно. Есть даже инструкция, как это делать, для тех, кто делает это первый раз или делал давно и уже подзабыл.
Есть, кстати, интересный нюанс, касаемо того, как лучше ставить клиентское приложение, MSI пакетом или по классике, обычным EXE-инсталлятором. Кто-то может возразить, мол, а зачем городить огород с обычным инсталлятором, нужно скрипты рисовать, чтобы автоматом развернуть приложение, а MSI — это решение "из коробки", одобренное самими майками Microsoft.
Всё так. Но если вы ставите MyChat Client EXE-инсталлятором, он по умолчанию предлагает ставить приложение в профиль Windows-пользователя. А MSI пакет ставится только в Program Files. По канону.
Из-за этого, когда будете ставить обновление, то для обновления через GPO пользователям надо сделать logoff/logon, чтобы политика применилась и обновление мессенджера накатилось. А если приложение установлено в C:\Users\%USERNAME%\AppData\Local\MyChat Client\ — обновление идёт прямо с вашего сервера MyChat, "на лету". Это реально очень удобно и быстро. Повышения привилегий UAС не требуется.
Какой вариант выбрать — решать вам. А вот справка в помощь, как автоматизировать установку приложения (ключи инсталлятора).
4. Включаем прозрачную авторизацию
08:00 Тут сразу "два в одном". Во-первых, клиентское приложение должно знать, что нужно использовать прозрачную авторизацию. Потому что в масштабах сервера разные типы авторизаций можно произвольно "миксовать". Что кому удобно.
А во-вторых, приложение должно знать, куда подключаться, это хост или IP сервера MyChat.
Чтобы настроить всё это, нужно накатить через те же групповые политики простой REG-файл такого вида:
REGEDIT4
[HKEY_CURRENT_USER\Software\MyChat Client]
"Domain" = "Domain_name"
"IP" = "IP_adress_MyChat_Server"
Этих двух полей достаточно. За подробностями и более тонкой настройкой стоит заглянуть в официальную справку (пункт 3).
5. Port mapping на роутере, чтобы подключить людей через интернет
12:00 Пункт необязательный, если у вас люди только в локальной сети или через VPN, то настройка проброса портов на роутере не понадобится.
Если же вы подключаете людей через интернет, то нужно настроить port mapping на роутере.
Список портов, которые нужно пробросить, указан в справке (зелёным цветом).
Для тех, кто слышит эти слова впервые, суть такая: есть внешний ("белый") IP адрес, доступный через интернет и выданный компании провайдером. Этот адрес присвоен роутеру, который раздаёт интернет в офисе.
На этот адрес будут подключаться люди через интернет.
Роутер настраивается так, что все обращения на свой адрес по указанным портам (TCP 2004, 443, 8888) он переадресовывает внутрь локальной сети на IP адрес, где работает MyChat Server (например, 192.168.10.100).
Если для вас это филькина грамота, лучше попросить специалиста настроить всё, это делается за пару минут. Штатная процедура, никакой магии.
Кстати, есть важный момент, существенный для Android. Есть политики безопасности гугла, которые требуют, чтобы приложение из внешних сетей соединялось только по HTTPS (протокол с шифрованием). Это нормально, но вам нужен сертификат (купленный, или сгенерированный через Let’s Encrypt — не важно). А этот сертификат выдаётся только на домен, а не на IP адрес. То есть, помимо внешнего IP вам нужен ещё и домен, привязанный к этому IP.
После того, как всё настроили, можно чекнуть корректность через админку MyChat.
Теперь вы знаете всё :)
6. Доменный логин на Android-смартфоне
15:00 Здесь всё достаточно просто. Качаете приложение из маркета, запускаете, добавляете свой сервер, указываете логин юзера с доменом и пароль.
Никакой прозрачной авторизации, к сожалению. Но это, в принципе, логично. Это же смартфон, а не Windows-компьютер, авторизованный в домене.
В момент подключения к серверу Android-приложение передаёт по зашифрованному каналу логин и пароль доменного юзера на сервер MyChat, а тот уже через LDAP проверяет, можно ли делать логин. Если всё ок — вы попадаете в чат. После первого успешного логина вход делается автоматически.
Важный момент. Для того, чтобы работали PUSH-уведомления в смартфоне, на вашем сервере MyChat должен быть интернет и доступ к mychat-server.com по TCP порту 52020. Если доступ закрыт — сделайте правило в файрволе для исходящего трафика.
7. Мультилогин и привязка к телефону
Практически во всех мессенджерах есть обязательная привязка к номеру телефона. То есть, смартфон — первичен, а компьютер или ноутбук уже потом. Например, вы можете запустить Telegram на смартфоне и на компьютере. Сообщения будут отображаться и там и там, автоматически синхронизируясь на разных устройствах.
А вот WhatsApp сначала только на смартфоне, а уже потом на компьютере.
Но если у вас нет лишнего смартфона, или вы не хотите подключать свой номер телефона — то в большинство мессенджеров вам не попасть. Telegram, Viber, Line, Skype, WhatsApp — все требуют номер телефона.
С MyChat в этом плане сильно удобнее. Не хотите использовать номер телефона – никто не заставляет, входите по нику. Или по адресу электронной почты. Или доменным логином. Да хоть по UIN, как в лохматые 90-е в аське. В общем, вы поняли :)
Ограничений на количество одновременных "инкарнаций" на разных устройствах нет. Абы лицензий хватило.