среда, 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
Добавление функции записи конференций описано в другой статье блога.

16 комментариев:

  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.

      Удалить
    2. Добрый день. Такая же проблема, как у вышеотписавшегося человека. Указанные строки в конфиге имеются. При вводе любого логина и пароля (даже неправильного) бесконечно висит состояние - "Подключение".

      Удалить
    3. Можно посмотреть в файле /etc/prosody/prosody.cfg.lua расположение логов prosody и посмотреть их, может там будет что-то интересное. Параметры ведения логов описаны в секции log = { ... }.

      Удалить
  3. Доброго времени суток!
    Подскажите пожалуйста, поставил по вашему руководству. Пользователи подключаются в разные комнаты с одинаковым именем, не могу понять в чем проблема?

    ОтветитьУдалить
    Ответы
    1. Пользователи переходят по ссылке в комнату или пишут её имя на главной странице сервиса руками? Скорее всего где-то в написании имени комнаты допускают ошибку.

      Удалить
    2. без разницы, и по ссылке и в ручную подставляя имя комнаты каждый подключается в свою

      Удалить
    3. ошибка исключена при имени комнаты "1" :)

      Удалить
    4. У меня не было подобной ситуации, но на портале Jitsi есть ветка с подобной проблемой https://community.jitsi.org/t/jitsi-creating-different-rooms-with-the-same-address/43800, правда она единственная и там нет способа исправить подобную ситуацию.

      Удалить
  4. настроил по вашей инструкции авторизация не включается (( система ubuntu 20.04

    ps / вот еще инструкцию находил аналогичную на английском https://github.com/jitsi/jitsi-meet/wiki/LDAP-Authentication

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

      Удалить
    2. Пользователи не могут авторизоваться или не появляется окно для авторизации?

      Удалить
  5. Подскажите возможно сделать чтобы гости заходили не дожидаясь модератора. А то народ ждет когда зайдет модер.

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