среда, 6 мая 2020 г.

Установка и настройка Jitsi Meet с авторизацией пользователей в Active Directory и гостевым доступом

Необходимость взаимодействовать с коллегами в условиях удалённой работы потребовала оперативно развернуть систему видеоконференций, чтобы заменить очные совещания.
В этой заметке будет описано то, как установить Jitsi Meet - полнофункциональную и абсолютно бесплантую систему для организации ВКС.
Разработчики поддерживают пакеты только для ОС, основанных на Debian. В качестве серверной ОС будет выступать Ubuntu 18.04.4 LTS.
Проверим наличие обновлений и установим имеющиеся.
apt update && apt upgrade -y
Установим корректный часовой пояс для нашего сервера
dpkg-reconfigure tzdata
Переходим к установке самого ПО. Добавим ключ безопасности и адрес официального репозитория
wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -
echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list
Обновим список досупных пакетов и установим Jitsi Meet
apt update && apt install -y jitsi-meet
Если в системе не установелен apache или nginx, то будет установлен nginx, кроме этого в процессе установки будет запрошен сертификат, который будет использоватсья для безопсного соединения с сервером. Это может быть как купленный у поставшика сертифика, так и полученный от Let's Encrypt. Если будет использоваться сертификат от Let's Encrypt, то в процессе установку нужно выбрать использовать самоподписанный сертификат. В конце установки будет указано расположение скрипта для генерации сертификата.

Вот и всё! Установка закончена. Всё быстро и просто. Можно перейти по адресу свежего сервера https://meet.oldfag.ru и увидеть главную страницу Jitsi Meet. Всё,что нужно для начала видеоконференции - придумать название комнаты и нажать кнопку ОК.

Функционал, необходимый для организации ВКС у нас есть, но в текущей конфигурации нашим сервером может воспользоватсья любой посетитель из глобальной сети.

Добавим авторизацию в Active Directory. Только авторизованные пользователи будут иметь права модератора, анонимные посетители будут иметь права только присоединиться к существующим собраниям. Ядром системы является XMPP-сервер Prosody, он и будет авторизовывать пользователей. Установим необходимые дополнительные пакеты
apt install -y prosody-modules
Создадим файл конфигурации для подключения к Active Directory
nano /etc/prosody/conf.avail/ldap.cfg.lua
со следющим содержанием
authentication = 'ldap2' -- тип аутентификации

ldap = {
    hostname = 'oldfag.ru', -- имя контроллера домена, лучше использовать имя домена на случай отказа конкретного контроллера домена. 
    bind_dn = 'CN=ldap_sync,CN=Users,DC=oldfag,DC=ru', -- имя пользователя для подключения к Active Directory
    bind_password = 'userpassword', -- пароль пользователя для подключения к Active Directory
    user = {
        basedn = 'DC=oldfag,DC=ru', -- корень просмотра 
        filter = '(&(objectClass=user)(memberof=CN=Пользователи ВКС,CN=Users,DC=oldfag,DC=ru))', -- фильтр для поиска пользователей
        usernamefield = 'sAMAccountName', -- атрибут,используемый как имя пользователя
        namefield = 'cn', -- атрибут, используемый как отображемое имя
    },
}
К ВКС будут иметь доступ не все пользователи домена, а только те, которые состоят в группе Пользователи ВКС. Добавим ссылку на созданный файл в каталоге /etc/prosody/conf.d/, который используется для хранения конфигурационных файлов
ln -sf /etc/prosody/conf.avail/ldap.cfg.lua /etc/prosody/conf.d/
В основном конфигурационном файле сервера изменим метод авторизации
nano /etc/prosody/conf.avail/meet.oldfag.ru.cfg.lua 
в секции VirtualHost "meet.oldfag.ru" нужно изменить строку с
authentication = "anonymous"
на
authentication = "ldap2"
Сохраняем изменния в файле и перезапускаем сервис
systemctl restart prosody
Теперь к серверу могут подключиться только авторизованные пользователи.
Для того, чтобы добавить возможность анонимного подключения к созданным конференциям нужно в основной конфигурационный файл prosody (/etc/prosody/conf.avail/meet.oldfag.ru.cfg.lua) добавить ещё один виртуальный хост, добавив в конец файла ещё одну секцию
VirtualHost "guest.meet.oldfag.ru"
    authentication = "anonymous"
    c2s_require_encryption = false
Создавать dns-запись для guest.meet.oldfag.ru не нужно, это виртуальный хост, который используется только внутри prosody.

После этого отредактируем файл конфигурации самого Jitsi Meet
nano /etc/jitsi/meet/meet.oldfag.ru-config.js
изменив строку
// anonymousdomain: 'guest.example.com',
на
anonymousdomain: 'guest.meet.oldfag.ru',
тут же укажем необходимость указать имя при подключении, раскомментировав строку
requireDisplayName: true,
а так же отключим звук у пользователей при подключении
startWithAudioMuted: true,
Теперь добавим в файл конфигурации jicofo необходимость требовать авторизации, с сохранением анонимного доступа для внешних пользователей.
nano /etc/jitsi/jicofo/sip-communicator.properties
и добавим строку
org.jitsi.jicofo.auth.URL=XMPP:meet.oldfag.ru
Сохраним изменения и перезапустим сервисы
systemctl restart prosody && systemctl restart jicofo
Чтобы избежать зумбомбинга нужно при создании конференций указывать для них пароль доступа, тогда, даже угадав имя конференции анонимный пользователь не сможет присоединиться к ней.

Конференцию не обязательно создавать с главной страницы сервиса, можно просто создать ссылку вида https://meet.oldfag.ru/whatever. Когда по ней перейдёт первый авторизованный пользователь, будет создана конференция с именем "whatever".

По умолчанию, при установке Ubuntu фаервол отключен, что недопустимо для системы, смотрящей в публичные сети. Поэтому посленим шагом настройки будет добавление необходимых правил и включение фаервола.
ufw allow ssh
ufw allow http
ufw allow https
ufw allow in 10000/udp
ufw enable
Добавление функции записи конференций описано в другой статье блога.

4 комментария:

  1. Добрый день!

    Скажите, пожалуйста, не знаете ли вы способа части этих пользователей назначать права модераторов автоматически, для любых конференций или избранных. А всем остальным пользователям домена обычные права.

    ОтветитьУдалить
    Ответы
    1. Самый простой вариант всех пользователей, которые не являются модераторами пускать анонимно, а у пользователей с правами модератора просить авторизацию. Более сложный вариант попробовать создать рабочую конфигурацию с использованием модуля mod_muc_allowners для prosody

      Удалить
  2. Добрый день!
    Сделал всё по вашей инструкции на Ubuntu 20.04, авторизация вроде проходит, но после ввода корректного логина и пароля бесконечно висит состояние - "Подключение" и ничего не происходит. Не подскажете, куда копать?

    ОтветитьУдалить
    Ответы
    1. Можно проверить, есть ли эти строки

      cross_domain_bosh = false;
      consider_bosh_secure = true;

      в файле конфигурации сервера /etc/prosody/conf.avail/meet.oldfag.ru.cfg.lua. В моём случае они уже были после установки Jitsi Meet. Строки должны находится перед секцией VirtualHost "meet.oldfag.ru". Имя сервера, естественно, нужно заменить на ваше. Так же при ldap-авторизации нужно использовать имя пользователя без указания домена, т.е. не user@oldfag.ru, а просто user.

      Удалить