序章

Matrix は、分散型通信のオープンスタンダードです。 これは、リアルタイムで同期する標準化されたAPIを話す、オンラインメッセージングに使用されるサーバーとサービスのコレクションです。

Matrixは、 homeservers を使用して、アカウント情報とチャット履歴を保存します。 これらは、電子メールクライアントがIMAP/SMTPを介して電子メールサーバーに接続する方法と同じように機能します。 電子メールのように、他の誰かがホストしているMatrixホームサーバーを使用することも、自分でホストして自分の情報と通信を管理することもできます。

このガイドに従うことで、Matrixのリファレンスホームサーバー実装であるSynapseをインストールします。 終了すると、 Matrixクライアントを介してホームサーバーに接続し、他のMatrixフェデレーションホームサーバーを介して他のユーザーと通信できるようになります。

前提条件

このガイドを開始する前に、次のものが必要です。

  • この初期サーバーセットアップガイドに従ってセットアップされた1つのUbuntu16.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。

  • サーバーにインストールされたNginx(HTTPSトラフィックを許可)。 これを行うには、Ubuntu16.04チュートリアルでこのNginxを実行します。

  • このホスト名チュートリアルに従って、適切なDNSレコードで設定された登録済みドメイン名。 必要なDNSレコードは、ドメインの使用方法によって異なります。

    • ドメインをSynapse専用に使用している場合、または同じサーバーを使用してWebサイトとSynapseをホストする場合は、ホスト名@のAレコードのみが必要です。

    • Synapseを別のサーバーにインストールする場合は、ホスト名がmatrix.example.comのように使用するサブドメインに設定されたAレコードと、ホスト名が_matrix._tcpのSRVレコードが必要になります。ポート8448で同じサブドメインを指し、デフォルトの優先度と重みはそれぞれ10と100です。 これにより、MatrixクライアントとホームサーバーにSynapseインストールの場所が通知されます。

ステップ1—MatrixSynapseをインストールする

開始するには、root以外のユーザーとしてサーバーにログインします。

インストールを開始する前に、ローカルパッケージインデックスが最新であることを確認してください。

  1. sudo apt-get update

次に、公式のMatrixリポジトリをAPTに追加します。

  1. sudo add-apt-repository https://matrix.org/packages/debian/

サーバーの安全を確保するには、リポジトリキーを追加する必要があります。 これにより、インストールと更新が開発者によって署名されていることを確認し、許可されていないパッケージがサーバーにインストールされないようにします。

  1. wget -qO - https://matrix.org/packages/debian/repo-key.asc | sudo apt-key add -

次の出力が表示されます。

Output
OK

リポジトリを追加したら、ローカルパッケージインデックスを更新して、新しいリポジトリが含まれるようにします。

  1. sudo apt-get update

リポジトリを追加すると、Synapseのインストールは単一のAPTコマンドを実行するのと同じくらい簡単です。

  1. sudo apt-get install matrix-synapse

インストール中に、サーバー名を入力するように求められます。サーバー名はドメイン名である必要があります。 また、ホームサーバーに関する匿名化された統計をMatrixに送り返すかどうかを選択するように求められます。 次に、Synapseがインストールされます。

完了したら、systemctlを使用して、サーバーが起動するたびにSynapseを自動的に起動します。

  1. sudo systemctl enable matrix-synapse

このコマンドは、サーバー全体が起動したときにのみSynapseを起動します。 サーバーはすでに実行されているため、systemctlを手動で使用してSynapseを今すぐ起動します。

  1. sudo systemctl start matrix-synapse

これでSynapseがサーバーにインストールされて実行されますが、使用を開始する前にユーザーを作成する必要があります。

ステップ2—Synapseのユーザーを作成する

Synapseの使用を開始する前に、ユーザーアカウントを追加する必要があります。 新しいユーザーを追加する前に、共有シークレットを設定する必要があります。 共有シークレットは、登録が無効になっている場合でも、登録を知っている人なら誰でも使用できる文字列です。

次のコマンドを使用して、32文字の文字列を生成します。

  1. cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1

作成した文字列をコピーし、nanoまたはお好みのテキストエディタでSynapse構成ファイルを開きます。

  1. sudo nano /etc/matrix-synapse/homeserver.yaml

登録セクションで、registration_shared_secretキーを探します。 値をコピーしたランダムな文字列に更新し、引用符(" ")の間に挿入します。 行のコメントを解除してキーをアクティブ化することを忘れないでください(つまり、 行頭の#を削除します)。

公開登録も有効にする場合は、ここでenable_registrationの値をTrueに更新できます。

/etc/matrix-synapse/homeserver.yaml
. . .

## Registration ##

# Enable registration for new users.
enable_registration: False

# If set, allows registration by anyone who also has the shared
# secret, even if registration is otherwise disabled.
registration_shared_secret: "randomly_generated_string"

. . .

ファイルを保存して閉じます。

構成を変更した後、変更を有効にするためにSynapseを再起動する必要があります。

  1. sudo systemctl restart matrix-synapse

再起動したら、コマンドラインを使用して新しいユーザーを作成します。 -cフラグは構成ファイルを指定し、ポート8448でリッスンしているローカルSynapseインスタンスを使用します。

  1. register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml https://localhost:8448

ユーザー名とパスワードを選択するように求められます。 また、ユーザーを管理者にするかどうかも尋ねられます。 それはあなた次第ですが、このチュートリアルには管理者は必要ありません。

ユーザーが作成されたら、WebサーバーがSynapseリクエストを処理できることを確認しましょう。

ステップ3—NginxとSSLを構成する

Matrixクライアントは、https://example.com/_matrix/にSynapseに接続するように要求します。 これらのリクエストをリッスンし、ポート8008でローカルにリッスンしているSynapseに渡すようにNginxを構成する必要があります。 また、Let’sEncryptに裏打ちされたSSLを使用してでセットアップを保護します。

これを行うには、Webサイト用のカスタムNginx構成ファイルを作成します。 この新しい構成ファイルを作成します。

  1. sudo nano /etc/nginx/sites-available/example.com

以下のlocation /_matrixブロックは、NginxがMatrixクライアントからのリクエストを処理する方法を指定します。 リクエスト処理に加えて、/.well-knownブロックは、同じ名前のディレクトリをLet’sEncryptで使用できるようにします。

以下をコピーしてファイルに貼り付けます。

/etc/nginx/sites-available/example.com
server {
    listen 80;
    listen [::]:80;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com;

    location /_matrix {
        proxy_pass http://localhost:8008;
    }

    location ~ /.well-known {
        allow all;
    }
}

このNginxサーバーブロックチュートリアルには、これらのようなファイルがどのように機能するかについての詳細があります。 サーバーを構成したら、ファイルを保存して閉じることができます。

この構成を有効にするには、/etc/nginx/sites-enabledディレクトリにこのファイルのシンボリックリンクを作成します。

  1. sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

コマンドを実行して、構成ファイルの構文エラーをテストします。

  1. sudo nginx -t

エラー出力がある場合は、それに基づいて構文を修正します。 エラーが報告されていない場合は、systemctlリロードNginxを使用して、変更を有効にします。

  1. sudo systemctl reload nginx

Let’s Encrypt証明書を使用したNginxの保護を完了するには、このLet’s Encrypt for Nginx onUbuntu16.04チュートリアルに従ってください。 デフォルトの構成ファイルの代わりに/etc/nginx/sites-available/example.comを使用することを忘れないでください。 そのチュートリアルのステップ2で説明した~/.well-knownブロックはすでに追加されています。

Let’s Encryptを設定したら、Synapseが他のホームサーバーと通信するために必要なトラフィックを許可するようにファイアウォールを構成することに進むことができます。

ステップ4—ファイアウォールを通過するシナプスを許可する

クライアントトラフィックは、HTTPSポート443(Nginxガイドからファイアウォールですでに開いています)を介してSynapseに接続します。 ただし、他のサーバーからのトラフィックは、Nginxプロキシを経由せずに、ポート8448でSynapseに直接接続するため、このトラフィックもファイアウォールを通過できるようにする必要があります。

  1. sudo ufw allow 8448

UFWのステータスを確認してください。

  1. sudo ufw status

次のようになります。

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere 8448 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6) 8448 (v6) ALLOW Anywhere (v6)

これは、必要なすべてのトラフィックがファイアウォールを通過できることを意味します。 実行する必要がある最後のステップは、SSL証明書を更新することによってSynapseのセキュリティを向上させることです。

Synapseが構成され、他のホームサーバーと通信できるようになったので、ステップ3の最後にLet’sEncryptから要求したものと同じSSL証明書を使用してセキュリティを強化できます。 デフォルトでは、Synapseはその仕事をする自己署名証明書を使用しますが、Let’s Encrypt証明書をすでに要求しているので、それらを使用してセキュリティを向上させるのは簡単です。

証明書をSynapseディレクトリにコピーします。

  1. sudo cp /etc/letsencrypt/live/example.com/fullchain.pem /etc/matrix-synapse/fullchain.pem
  2. sudo cp /etc/letsencrypt/live/example.com/privkey.pem /etc/matrix-synapse/privkey.pem

これらの証明書が更新されたときに更新されるようにするには、これらのコマンドをcronタブに追加する必要があります。 編集のために開きます。

  1. sudo crontab -e

そして、次の行を追加します。

crontab entry
35 2 * * 1 sudo cp /etc/letsencrypt/live/example.com/fullchain.pem /etc/matrix-synapse/fullchain.pem 35 2 * * 1 sudo cp /etc/letsencrypt/live/example.com/privkey.pem /etc/matrix-synapse/privkey.pem 36 2 * * 1 sudo systemctl restart matrix-synapse

次に、ファイルを保存して閉じます。 次に、nanoまたはお気に入りのテキストエディタでSynapse構成ファイルを開きます。

  1. sudo nano /etc/matrix-synapse/homeserver.yaml

手順3でLetsEncryptに要求したものと同じ証明書を使用して、構成ファイルのパスを置き換えます。

/etc/matrix-synapse/homeserver.yaml
. . .

tls_certificate_path: "/etc/matrix-synapse/fullchain.pem"

# PEM encoded private key for TLS
tls_private_key_path: "/etc/matrix-synapse/privkey.pem"

# PEM dh parameters for ephemeral keys
tls_dh_params_path: "/etc/ssl/certs/dhparam.pem"

. . .

Synapseを再起動して、構成の変更を有効にします。

  1. sudo systemctl restart matrix-synapse

すべてがセットアップされたので、Matrixクライアントを使用してホームサーバーに接続し、他のクライアントとの通信を開始できます。 たとえば、MatrixのWebサイトクライアントを使用できます。

適切なフィールドに次のように入力します。

  • マトリックスIDの形式は@user:server_nameです(例: @sammy:example.com)。 他のフェデレーションサーバーはこれを使用して、ホームサーバーがホストされている場所を見つけます。
  • パスワードは、このユーザーを作成するときに設定した安全なパスワードです。
  • ホームサーバーは、手順1で選択したサーバー名です。

手順2で公開登録を有効にした場合は、アカウントの作成リンクをクリックして、新しいアカウントを作成したり、ホームサーバーで他のユーザーが新しいアカウントを作成できるようにしたりすることもできます。

そこから、部屋にログインしてチャットを開始できます。 Matrixの公式サポートルームは#matrix:matrix.orgです。

結論

このガイドでは、Let’sEncryptのSSL証明書に裏打ちされたNginxを使用してMatrixSynapseを安全にインストールしました。 ホームサーバーへの接続に使用できる多くのMatrixクライアントがあり、独自のMatrixクライアントまたは他の方法でプロジェクトに参加することもできます