ゼロトラストのディープダイブ(3)-Apache Guacamoleの検証

[前回] [ゼロトラストのディープダイブ(2)-アーキテクチャと機能要件](https://qiita.com/mingchun_zhao/items/78b9f89af22ba132649a)

## はじめに

ゼロトラストのアーキテクチャと機能要件を理解しました。
理論だけでは面白くないので、手を動かしながらゼロトラスト対策の関連ツールを検証します。
今回選んだのは、リモートアクセスを制御するOSSツール[Apache Guacamole](https://guacamole.apache.org)。

## Apache Guacamoleはクライアントレスのリモートデスクトップゲートウェイ

クライアントのブラウザから、複数のリモートサーバー(Azure VM、Amazon EC2、オンプレミスサーバーなど)への接続を一括制御可能で、
RDP/SSH/VNC接続をサポート、認証証跡も残してくれるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/cdd9175e-732e-a005-858a-cb9798abb40f.png)

- 特徴
    - VNC(RFB)、RDP、SSHなどの標準プロトコルをサポート
    - クライアントレスで、プラグインやクライアントソフトウェア不要

## 構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/596c604e-1ae7-0cb5-26a5-a8d8d240d36a.png)

- クライアントは、HTML5対応ウェブブラウザ
             ↓
- Guacamole中継サーバー(リモートサーバーに配置可)
             ↓
- デスクトップ稼働中のリモートサーバー

## 検証シナリオと注意事項

ChromeからUbuntuサーバーへ、Apache Guacamoleを経由したSSH接続を行います。

- クライアント
    - Chromeバージョン: 101.0.4951.41(Official Build)(64ビット)
- Guacamole中継サーバー
    - `Ubuntu 20.04 LTS`
    - 便宜上、下記サーバーと同じものを使用
- サーバー
    - `Ubuntu 20.04 LTS`

※ 注意: あくまでも検証目的で、全てを同じPCにインストールしています。
このような設定はゼロトラスト対策としては使えませんのでご注意ください。

## 検証環境

```
CPU: Intel(R) Core(TM) 3.30GHz(4コア8スレッド)
メモリ: 16 GB
OS: Ubuntu 20.04 LTS
```

Ubuntuは、Windows 10で以下のように管理者権限で導入しました。

```
> wsl --install -d Ubuntu-20.04
```

## サーバーの操作手順: SSHサーバーをインストール

Ubuntu端末を開き、SSHサーバーをインストールします。
手順は、[Ubuntu 20.04 - SSHのインストールと接続方法](https://codechacha.com/ja/ubuntu-install-openssh/)をご参照。


## Guacamole中継サーバーの操作手順: Apache Guacamoleをインストール

- Ubuntu端末を開き、下記コマンド実行

```
wget https://git.io/fxZq5
mv fxZq5 guac-install.sh
chmod +x guac-install.sh
sudo ./guac-install.sh
```

- Apache Guacamoleは、多要素認証としてTOTPかDuoをサポートしていました(今回は割愛)
```
MFA: Would you like to install TOTP (choose 'N' if you want Duo)? (y/N): N
MFA: Would you like to install Duo (configuration values must be set after install in /etc/guacamole/guacamole.properties)? (y/N): N
```

- MySQLのインストールに必要な、rootユーザーとguacamole_userユーザーのパスワードを指定(強力なパスワードを指定してください)
```
MySQL is required for installation, if you're using a remote MySQL Server select 'n'
Would you like to install MySQL? (Y/n): Y

Enter localhost's MySQL root password:
Confirm localhost's MySQL root password:

A new MySQL user will be created (guacamole_user)
Enter localhost's MySQL guacamole user password:
Confirm localhost's MySQL guacamole user password:
```

- インストールが成功したら、以下が表示される
```
Installation Complete
- Visit: http://localhost:8080/guacamole/
- Default login (username/password): guacadmin/guacadmin
***Be sure to change the password***.
```

## Apache Guacamoleの管理画面で、SSH接続設定を行う

- ブラウザから、Apache Guacamoleの`http://<サーバーのIPアドレス>:8080/guancamole`にアクセス

デフォルトユーザーはguacadminでパスワードも同じ(変更してください)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/5e3fb45a-6ce0-c302-1ee0-5891f0691926.png)

- 右上のプルダウンメニューから`設定`を選択
`設定`画面の`接続`タブで`接続の追加`をクリック


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/8ead1747-0845-e167-a77f-875dcb23c9a1.png)


- `接続の編集`で、プロトコルSSHを選択
- 同時接続制限で、最大接続数を指定
- `パラメータ`
    - `ネットワーク`で以下指定
        - ホスト名に、接続先サーバーのホスト名またはIPアドレス
        - ポートに、SSHポート番号の22
    - `認証`で以下指定
        - 接続先サーバーのユーザ名を入力
        - パスワードを入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/bfebe7f8-df20-4fad-0235-7f06a34599db.png)

## クライアント側のブラウザからSSH接続確認

ブラウザから、`http://<サーバーのIPアドレス>:8080/guacamole`にログイン。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/f6b0289a-6088-8b50-f3e1-2065a6130de6.png)

SSH接続成功し、ブラウザにUbuntu端末が表示されました。やったー。

## おわりに

ゼロトラスト対策の一例として、Apache Guacamoleを検証しました。
次回は、ゼロトラストのソリューションをさらに深掘りします。
お楽しみに。

##### [次回] [ゼロトラストのディープダイブ(4)-SASE(Secure Access Service Edge)](https://qiita.com/mingchun_zhao/items/2f06d074a794ac69f5fe)