コミュニティソリューション

CasaOSまたはZimaOSにApache Guacamoleを安全にインストールする

A 2023 CasaOS tutorial introduced Apache Guacamole through BigBearCasaOS as a browser gateway for VNC, RDP and SSH.

要点:最新のGuacamoleは、単一のWebコンテナではなく3つの要素で構成されるサービス

Apache Guacamoleを使うと、デスクトップクライアントなしで、ブラウザからRDP、VNC、SSHにアクセスできます。本番環境を想定したDockerデプロイでは通常、Guacamole Webアプリケーション、guacd、そしてPostgreSQLやMySQL/MariaDBなどのデータベースが必要です。古い2023年版のBigBearCasaOSパッケージは、アーキテクチャの参考ではなく、過去の簡易的な導入手段として扱うべきです。

公式のGuacamoleコンテナを使用する

Apacheプロジェクトは、サポート対象のguacamole/guacamoleおよびguacamole/guacdイメージを公開しています。Guacamole Dockerスタックでは、公式の構成が説明されています。さらに、Guacamoleのインストール方法では、実運用でデータベース認証が推奨される理由が詳しく説明されています。

推奨コンテナ構成

guacamole-web
    |
    +-- guacd
    |
    +-- postgres or mariadb

3つのサービスはすべて、プライベートなDockerネットワーク上に配置します。公開するのはGuacamoleのWebエンドポイントだけにしてください。別のコンポーネントが実際に必要とする場合を除き、データベースやguacdをLANに公開しないでください。

初回ログイン前にデータベースを初期化する

Guacamoleのデータベース認証拡張機能では、Webアプリケーションがユーザーや接続を保存できるように、あらかじめスキーマを読み込んでおく必要があります。使用するGuacamoleの正確なバージョンとデータベースの種類に対応したSQL初期化ファイルを使用してください。データベースのデータディレクトリは永続化します。

外部公開前にHTTPSを設定する

Guacamoleでは管理者パスワードやリモートデスクトップセッションが送信されるため、HTTPのまま公開するのは適切な境界とはいえません。HTTPSと強力な認証を備えたリバースプロキシを使用してください。ZimaOSのHTTPSプロキシでは、ZimaOSでのリバースプロキシ構成を確認できます。

インターネットからアクセス可能にする場合はMFAまたはSSOを使用する

Apache Guacamoleは、TOTP、OpenID Connect、SAMLなど、さまざまな認証システム用の拡張機能をサポートしています。リモートデスクトップへのアクセスは管理機能にあたるため、短いローカルパスワードだけに頼らず、適切に保護してください。

代わりにGuacamoleをVMで実行する場合

GuacamoleをNASのDockerエンジンから分離したい場合や、すでに複数のインフラサービスを運用している場合は、小規模なDebian/Ubuntu VMを使用すると、更新とファイアウォールの境界を明確にできます。ZimaOSのVM要件では、この分離構成に必要なホストリソースについて説明しています。

ZimaOSのアプリ要件は、Guacamoleをデータベース、メディアサーバー、監視サービスと同じNAS上で運用する場合に役立ちます。

データベースとGuacamoleの設定を別々に永続化する

Guacamoleでは、Webコンテナを状態を保持する部分として扱わないでください。ユーザーアカウント、保存した接続、認証データはデータベースに保存されます。一方、拡張機能やカスタム設定はマウントしたディレクトリに保存される場合があります。イメージを置き換える前に、これらの永続データをバックアップしてください。コンテナを新しく取得して入れ替える作業は日常的に行えるべきであり、リモート接続をすべて記憶から再構築するような状態は避けるべきです。

リバースプロキシでWebSocketを正しく処理する

Guacamoleは、インタラクティブなセッションのために、ブラウザとの長時間接続やWebSocketを使用します。ログインはできるのに、プロキシ経由でリモートデスクトップが切断されたり、固まったり、性能が低下したりする場合は、RDPやVNC自体を疑う前に、WebSocketの転送とプロキシのタイムアウトを確認してください。更新のたびにコールバックやブラウザセッションの動作が変わらないよう、Guacamoleのパスまたはホスト名は固定してください。

Guacamoleへのアクセスと接続先システムの認証情報を分ける

Guacamoleのログインはゲートウェイへの प्रवेशを制御しますが、Windows/Linuxの接続先には、それぞれ独自のRDP、VNC、SSH認証情報とポリシーがあります。どこでも同じ管理者パスワードを使い回さないでください。家庭内やチームで共有する場合は、Guacamoleにユーザー名付きのアカウントを作成し、それぞれに必要な接続だけを許可してください。

公開する前にゲートウェイをテストする

パブリックDNSを追加する前に、LANからSSHまたはRDP接続を1つテストし、クリップボードとセッションの動作を確認します。その後、すべてのGuacamoleコンテナを再起動し、保存した接続が引き続き使用できることを確認してください。さらに、データベースのバックアップと復元もテストします。コンテナを再作成しても動作するゲートウェイは、次のイメージ更新までしか動かない構成よりも、はるかに保守しやすいデプロイです。

よくある質問

Guacamoleにはデスクトップクライアントが必要ですか?

いいえ。ユーザーはWebブラウザから接続し、Guacamoleがブラウザの通信をRDP、VNC、SSHセッションに変換します。

Guacamoleにはデータベースが必要ですか?

本番環境を想定したユーザーと接続の管理には必要です。シンプルなXML認証方式は、主に基本的なテストに適しています。

guacdをインターネットに公開すべきですか?

いいえ。guacdはGuacamole Webアプリケーションの背後に配置し、非公開にしてください。

GuacamoleはVPNの代わりになりますか?

設定したリモートデスクトップへのブラウザアクセスは提供できますが、あらゆるサービスに対応する汎用的なプライベートネットワークトンネルではありません。

PostgreSQLの代わりにMariaDBを使用できますか?

はい。対応する拡張機能とスキーマを設定すれば、サポート対象のデータベース認証オプションとして、MySQL互換データベースとPostgreSQLを利用できます。