サーバーをインターネットに向けて公開している。現在はProsodyで利用するユーザーを追加して、IDとパスワードで認証しているが、これをActive Drectoryによるユーザー認証に変更したい。
Jitsi Meetでユーザー認証を担当するのはProsody。これをLDAP認証に変更すれば良さそう。
ウチではSamba AD DCが動いてドメイン管理をしている。まだSSOが実現できていないが、LDAP認証でそれっぽいサービス(Kopano, Alfresco等)を運用しており、LDAP認証が動作する環境になっている。実際にはLDAPSか。
そして、いま、この記事を書くためにテスト環境を作った。
Ubuntu 18.04で、Apache+Jitsi Meetな環境を作り、Prosodyによるユーザー認証も実装済み。
やること。
ProsodyでLDAP認証の設定
ほぼ、ここに書いてあることを実行。
Github / Jitsi / LDAP Authentication
LDAP認証に必要なモジュールをインストール
関連するモジュールが2つあるらしいので、これをインストール。
$ sudo apt install prosody-modules lua-ldap
認証に関する設定ファイルを作る
LDAP認証に関する設定を書く。このファイルは新規に作成する。
/etc/prosody/conf.avail/ldap.cfg.lua
authentication = 'ldap2'
ldap = {
-- 連携するSamba AD DCと接続条件を指定
hostname = 'addc.hogeserver.hogeddns.jp',
use_tls = true,
-- ユーザー認証に使うユーザーを指定(専用のユーザーを作ったほうが良さそう)
bind_dn = 'cn=administrator,cn=Users,dc=hogeserver,dc=hogeddns,dc=jp',
bind_password = 'secret',
-- 利用可能なユーザーをどうフィルタするか指定
user = {
usernamefield = 'samAccountName',
basedn = 'cn=Users,dc=hogeserver,dc=hogeddns,dc=jp',
filter = 'objectClass=user',
namefield = 'givenName',
},
}
※恐らく、bind_dnやbasednの設定値はActive Directoryの場合と違っていると思われる。
独自の項目をユーザーに持たせて、Jitsi Meetを利用できるユーザーを制限することができそう。
また、Jitsi Meetを使える人!というグループを作って管理することもできそうな気がする。試していないのでなんとも言えないが、この情報でいけるかと。
Github / mod_lib_ldap
ここに良いサンプルになりそうなものがある。
Github / getkaiwa / kaiwa-server
こうして作成した設定を有効化させる。実際には、availディレクトリにあるファイルのシンボリックリンクをconf.dに作成する。
$ sudo ln -sf /etc/prosody/conf.avail/ldap.cfg.lua /etc/prosody/conf.d/
Prosodyの基本動作を一部変更
BOSH接続を許可する。最終行にあるincludeの前に書くべきらしい。
/etc/prosody/prosody.cfg.lua
-- component_secret = "password"
consider_bosh_secure = true
------ Additional config files ------
Jitsi Meetの認証方法の変更
Jitsi Meetの認証設定をLDAPに変更する。
/etc/prosody/conf.abail/temp.hogeserver.hogeddns.jp.cfg.lua
…
--authentication = "anonymous"
--authentication = "internal_plain" ← Prosdyによるユーザー管理をやめる
authentication = "ldap2"
-- Properties below are modified by jitsi-meet-tokens package config
…
VirtualHost "guest.temp.hogeserver.hogeddns.jp" ←これはProsodyによるユーザー管理と同じ
authentication = "anonymous"
c2s_require_encryption = false
その他の設定(おさらい)
1年前に書いた記事でテスト環境を構築しているので、既に設定はしてあるのだが、だからといって「そっち見て!」というのはちょっと不親切。いつか自分も困りそう。
ということで、JicofoとVideobridgeの設定についてもこちらに書いてみる。
Jicofoの設定
1年前に記事を書いたときには空ファイルだったが、今は1行だけ設定が書かれている。ここにProsodyがインストールさているホストを設定する。標準のインストールをしているので、同一サーバーにある。
/etc/jitsi/jicofo/sip-communicator.properties
org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.temp.hogeserver.hogeddns.jp
org.jitsi.jicofo.auth.URL=XMPP:temp.hogeserver.hogeddns.jp
Meetの設定
ゲストユーザーの認証で使うドメインを指定する。
/etc/jitsi/meet/temp.hogeserver.hogeddns.jp-config.js
var config = { ・・・ hosts: { // XMPP domain. domain: 'temp.hogeserver.hogeddns.jp',
// When using authentication, domain for guest users.
anonymousdomain: 'guest.temp.hogeserver.hogeddns.jp',
※guest. がないとマイク・カメラが選択できない症状が現れる。
※最後のカンマを忘れずに。
設定を反映させる
だいぶわかってきた気がするのが、以下で関連するサービスがすべて再起動できるっぽいこと。
$ sudo systemctl restart apache2 prosody jicofo jitsi-videobridge2
※apache2のところは、nginxかもしれない。
なお、prosodyについてはreloadコマンドも用意されているが、試した感じうまく働いているようには思えなかった。
設定を反映させたら、接続、ログインしてみる。
起きたこと
ログインユーザーのドメイン名がちょっと違う
ログイン時に rohhie が使える。しかし、ログインユーザーは本来
rohhie@hogeserver.hogeddns.jp であるべきところ、
rohhie@temp.hogeserver.hogeddns.jp になっている。
設定→プロフィールで見ると、ログインアカウントが違っていることがわかる。
このことは、ユーザーに混乱を与えるかもしれないので修正したかったが、設定を変えると接続ができなくなるなど、ちょっと困ったことになるので諦めた。
Androidアプリはオレオレ証明書に対応していない
テスト用にAndroidデバイスを使おうとしたけれど、自己署名証明書だと危険と見なされてアクセスができない。オレオレCAの証明書を端末にインストールしてもだめだった。
Jitsi Community / How can I trust self signed SSL in Android Jitsi?
どうしてもテストがしたかったので、Chromeでアクセスし、PC版サイトにチェックを入れてアクセスした。
Logicool QCam Pro 4000がとうとう故障?
Windows 10のカメラでは動いていたようだった。UbuntuのCheeseでも動いていたようだった。しかし、Jitsi Meetで動作させるとカメラの画像が取れなくなる。
Windows 10では会議が終わってもランプが点きっぱなしになり、2回目以降はカメラが「使用中」扱いで使えない、会議室に入れない、PC再起動時にハングアップするという症状が出た。
Ubuntuではカメラのランプが一瞬点灯し、すぐに消えてそれ以降ビデオの操作が反応しなくなる。ちょっと前まではUbuntuなら問題なく使えていたのに…おかしい。
最初はちゃんと動いていた気がするけれど、いつの間にか動かなくなった。Jitsiのアップデートで何かが変わったのかもしれないし、そろそろ寿命が来たのかもしれない。
ダウンロードが遅い
今(2020/4/25)のこの情勢なので、超人気システムになっていると思われる。うちの契約はFlet'sだけれどもv6プラス契約していて、それなりの速度が出ている。にもかかわらずダウンロードには時間がかかる。
構築のタイミングで、少し気になるかもしれない。
マニュアルがちょっと…
インストールするだけで簡単に使えるようにしっかりと練り込まれている。その点は大変ありがたいのだが、ちょっと変わったことをやろうとすると情報が足りない。
数十人規模の会議がそれなりの数になってくるとかなりCPUを食うので、Videobridgeの増強をしたが、もう、ググっては試し、ググっては試すのカットアンドトライ状態になった。古いバージョンとはやり方が違っていたりするので、もう大変。
※Videobridgeの増強は1/4を業務時間内に行ったため記事にしない。そのへんのけじめはしっかりつけておきたい。
認証をActive Directoryでやりたいなと思っていたので、休日の朝からこの課題に取り組んだが、これもカットアンドトライ。大変だったけど、どうにか実装できたので記事にした。
なお、この認証設定はVideobridgeの増強で行う設定とは重なる部分がない。このことだけは記しておく。
さいごに
この設定ができれば、ユーザーはパスワードが一緒なので使いやすいだろう。シングルサインオンまで設定できればもっと良いに決まっているけれど、これはもうちょっと先に頑張ることにする。
マニュアルがなさすぎて、何ができるのかがわからないのがちょっとつらいな。設定ファイルにもう少しコメントが入っているだけでも随分違うと思うけれど、なんせ無料だし、ユーザー側でだれかが勝手に手順を整理して、みんなで使っていくんだろうなぁ。
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他
貴重な記事をありがとうございます。
とても参考になりました。
あっさりLDAPで認証できるようになりました。
Ubuntuの世界が初めてだったので戸惑いながら、Apache2 に入れられました。
Blog と共存しているので、Name base で分離できました。
ちょっとしたヒントがためになります。
オープンポートは、10000/udp , 20000-20050/udp ,443, 80 だけポートフォワードで見せています。
中々思ったようにいかなくて、何回も消したり、入れたりで使える状態になりました。
証明書はオレオレにしても良かったのですが、Lets Encrypt でワイルドカードが作れたので
それに統一しました。
DNSにトークン書いたら上手く作れました。DNSトークンを使って1度ワイルドカードで作成できると
社内のサブドメインであっても使えるのが作れて便利ですね。
コメントありがとうございます。
ご参考になったようで何よりでした。
ポートの件は、古いチュートリアルでやった結果、当初10000:20000/udpを開いていました。
(その後、10000/udpに変更…ビデオ会議だけならこれで動きます)
今は書いていただいたポートなのですね、ちょっと調べてみます。
証明書については、そうですよね。
3ヶ月に一度の更新は面倒ですが、有料の証明書も最長1年になってますから、サーバー群の更新を上手くやる手順を確立したほうが為になりそうです。
証明書は、/usr/bin/certbot renew を毎日1回 cron しています。Expire までは更新されませんけど。
ワイルドカードにして、あとは rsync でしょうかね。見えない空間に置いて wget も有りかも知れません。
1台の raspi4 でやるとなかなか面倒です。Wordpress にアクセスしたとき Jitsi が応答しないように
URLベースで共存するようにしましたが、ポートフォワードしている関係か、SSLの正式名称でアクセスすると
ルーターの中側の足で引き返せずSSLのエラーになってしまう落とし穴がありました。
外側からのVPNは自分自身にアクセスできるように回避したのに中側に落とし穴がありました。
別セッションがあるので、そちらの経路からアクセスするか、外に一旦VPNで逃げるしかないようです。
hosts が書ければ、何の問題もありませんが、iPhone とかガチガチの環境だとそうも行かずです。
あら、今は、ワイルドカードの証明書をbotで取得できるんですか…
つい先日手動で取り直したばかりです。進化してるなー、Let's encrypt。
先日、DDNSの更新が上手くいかない問題が発生してまして、この件と含めて巣ごもりグッズならぬ、巣ごもりテーマがてんこ盛りになってきました~
DDNSは、softether serverを起動しておく常に更新されているので、CNAMEで使ってます。
もっともSSLには使え無いのでsoftetherの登録レコードを読んでAレコードを登録するのを書いてやれば良いのですが、au光は滅多に変わらないので、手動のまま棚上げになっております。