LoginSignup
5
7

More than 1 year has passed since last update.

【Cloudflare Zero Trust】ブラウザでUbuntuを安全にVNC操作できるようにする

Posted at

やまねこです。

Linuxを触っているエンジニアなら一度は触ったことがあるであろうVNCですが,ローカルからVNCクライアントソフトで操作するのが一般的です。
しかし,外出先からVNCしたい,欲を言えばVPNを張らずにブラウザから...みたいなこと微かに思ったことはないでしょうか。

それ, Cloudflare Zero Trustで実現できます。
しかも,ネットワーク機器の操作(ポート開放等)はいりません!!
セキュリティ的にも安全ですね!

必要なもの

  • Cloudflareアカウント
  • ネームサーバーがCloudflare提供のネームサーバーに設定されているドメイン
  • Ubuntu (今回は22.04LTS)

設定方法

基本的にはCloudflare公式ドキュメントに従って設定していきます。
https://developers.cloudflare.com/cloudflare-one/tutorials/vnc-client-in-browser/

VNCの構築

  1. いつもの。
    sudo apt-get update
    
  2. GUI周りの諸々をインストールします。Ubuntuデスクトップの場合すでにインストール済みだと思いますが,Ubuntu Serverの場合は追加が必要です。
    sudo apt-get install gnome-core gnome-panel ubuntu-gnome-desktop tightvncserver lxde
    
  3. VNCインスタンスを起動します。
    sudo tightvncserver
    
    6文字以上8文字以下でVNC用パスワードを設定します。
    You will require a password to access your desktops.
    
    Password:
    Verify:
    Would you like to enter a view-only password (y/n)? n
    xauth:  file /root/.Xauthority does not exist
    
    New 'X' desktop is hogehoge:1
    
    Creating default startup script /root/.vnc/xstartup
    Starting applications specified in /root/.vnc/xstartup
    Log file is /root/.vnc/hogehoge:1.log
    
  4. VNCの設定ディレクトリを開きます。
    cd .vnc
    
  5. xsertupファイルを開きます。
    vim xstartup
    
  6. 以下のように編集します。
    #!/bin/sh
    xrdb $HOME/.Xresources
    xsetroot -solid grey
    x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    #x-window-manager &
    
    # Fix to make GNOME work
    export XKL_XMODMAP_DISABLE=1
    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    /etc/X11/Xsession
    /usr/bin/startlxde
    
    #gnome-session &
    gnome-panel &
    nautilus &
    gnome-settings-daemon &
    metacity &
    gnome-terminal &
    startxfce4 &
    
    xstartupの権限も変更します。
    chmod +x ~/.vnc/xstartup
    
  7. VNC Serverを立てます
    vncserver
    

Cloudflareトンネルの構築

  1. cloudflaredをインストールします。

    wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
    sudo apt install -y ./cloudflared-linux-amd64.deb
    
  2. Cloudflare tunnelにログインします。

    cloudflared tunnel login
    

    表示されたURLからCloudflareにログインします。
    ブラウザに表示された自分のドメインを選択し,「承認」をクリックします。
    image.png

  3. トンネルを構築します。ここでは「tunnel-ubuntu」というトンネル名にします。

    cloudflared tunnel create tunnel-ubuntu
    

    トンネルが作成されると,トンネルのIDが表示されます。IDは後で使用するのでどこかにメモしてください。(Cloudflare Zero Trust管理ページからも確認できます)

    Created tunnel tunnel-ubuntu with id abcd1234-5678-abcd-123456789012
    
  4. 設定ファイルを作成します。

    vim config.yml
    

    以下のように編集します。

    • hostname: ブラウザでVNCを開くときに使用したいFQDNを設定します。
    • path: ホームディレクトリの絶対パス
    tunnel: <メモしたID>
    credentials-file: path/.cloudflared/<メモしたID>.json
    ingress:
    - hostname: vnc.hogehoge.com
      service: tcp://localhost:5901
    - service: http_status:404
    
  5. CloudflareのDNS管理ページからレコードを追加します。
    image.png

    • タイプ:CNAME
    • 名前: 4.のhostnameで設定したFQDN
    • ターゲット: 3.で表示されたID + .cfargotunnel.com
  6. からトンネルを実行します。

    cloudflared tunnel --config path/config.yml run tunnel-ubuntu
    
    • path: 4.で作成した設定ファイルの絶対パス
      トンネルが確立するとINF Connection ~のようなログが表示されます。

    ついでに自動起動の設定もしましょう。

    sudo cloudflared --config path/config.yml service install
    sudo systemctl enable cloudflared
    

    sudo systemctl enable cloudflaredでactiveになっていればOKです。

アプリケーションの設定

  1. Cloudflare Zero Trustの管理ページ > Access > Applicationから「Add an application」をクリックします。
    image.png

  2. Self-hostedの方を選択します。
    image.png

  3. 必要事項を入力します。

    • Application name: Cloudflare Zero Trustで表示するアプリケーション名
    • Subdomain: 4. で設定したFQDN
    • Domain: Cloudflareに設定されているドメイン
      image.png
      その他項目はデフォルトとします。
  4. ポリシー名を付けます
    image.png

  5. Zero TrustでVNCサーバーにアクセスするための認証方法を設定します。今回は,「admin@hogehoge.com」のみアクセス可能にします。
    image.png
    その他項目はデフォルトとします。

  6. 「Additional settings」で「VNC」を選択します。
    image.png

ブラウザからVNCアクセス

  1. ブラウザから4.で設定したFQDNにアクセスします。
    アクセスすると認証画面が表示されます。
    image.png
    ワンタイムパスワードとVNCのパスワードを入力するとブラウザにVNCが表示されます。
    image.png

後は,vncserverが自動起動する設定をすれば完了です。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7