🏠

Cloudflare Zero Trustで安全にどこからでもアクセスできるサーバーを構築する

に公開

はじめに

最近、新しいPCを購入したのを機に、これまで使っていた古いPCのOSをLinuxに入れ替え、Webサーバー、計算サーバー、ストレージサーバーとして利用し始めました。
最初は自宅のローカルネットワークで動かすだけでしたが、出張先や外出時に外からでも操作したいと思うようになりました。

しかし、サーバーを外部に公開するとなると、ポート開放、固定IPアドレスの取得、証明書の発行…といった面倒な作業が多いです。(Minecraftサーバーを公開しようとして、ルーターの設定に苦戦した記憶があります。)

何か良い方法はないかと調査したところ、Cloudflare Zero Trustという便利なサービスがあることを知りました。

概要

本記事では、Cloudflare Zero Trustを活用して、安全にどこからでもアクセスできるSSHサーバーを構築した記録を備忘録として残します。

https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/

Cloudflare Zero Trustとは

このサービスは、Cloudflare社によって提供されている従来のVPNに代わる安全なリモートアクセスの仕組みを提供するセキュリティプラットフォームです。
ローカルネットワークは安全という前提を捨て、自身のPC以外のすべてのアクセスを検証・制御するという「ゼロトラストモデル(Zero Trust Model)」に基づいています。
参考: Cloudflare Zero Trust Overview
https://developers.cloudflare.com/cloudflare-one/

ゼロトラストとは?

ゼロトラストとは、「何も信用しない」を前提としたセキュリティの考え方です。ローカルネットワーク、グローバルネットワークの境界を問わず、すべてのユーザーやデバイスからのアクセスを常に検証し、必要最低限の権限のみを付与することで、サイバー攻撃や不正アクセスから情報を守ります。
従来の境界防御モデル(ローカルネットワーク、グローバルネットワークの境界にファイアウォールを配置し防ぐ方式)が、クラウドやテレワークの普及で曖昧になったネットワーク環境には対応しきれなくなったことを背景に提唱されました。

ゼロトラストの考え方

今回はCloudflare Zero Trustで提供されているサービスの内、Tunnel(ネットワークトンネリング)とAccess(認証)を活用して、以下の図のような構成を目指します。

サーバー側の作業

1. ドメインの取得と登録

ドメインを持っている場合はCloudflareにドメインを登録し、持っていない場合はCloudflareでドメインを購入します。
今回はドメインを持っていない前提で、ドメインを購入する手順を説明します。

1.1. ドメイン登録ページへの移動

Cloudflareホームページにて、[ドメインの登録] > [ドメインの登録] へ移動します。

1.2. ドメインの検索と購入

適切なドメイン名を検索し購入に進みます。この時のドメイン名が、URLに使用するアドレスと同じになります。

1.3. 購入の完了

登録者情報、お支払い情報を登録し購入します。
[ドメインの登録] > [ドメインの管理] にて購入したドメインがアクティブになっていれば完了です。

2. サーバーの設定

自宅のサーバーをCloudflareに登録します。

2.1. Tunnel作成ページへの移動

Zero Trustホームページで、[ネットワーク] > [Tunnels] に移動します。

2.2. Tunnelの作成

[+トンネルを作成する] > [Cloudflared] を選択します。

2.3. Tunnel名の設定

トンネルに適切な名前を付けます。今回は「sample」とします。

2.4. cloudflaredのインストール

サーバーのOSに合わせてcloudflaredを適切にインストールします。

OSを選択すると、適切なインストールコマンドが表示されるため、指示に従いインストールします。

インストールが完了すると、[ネットワーク] > [Tunnels] にて、作成したトンネルが表示されます。


ステータスが「HEALTHY」となっていれば成功です。

2.5. 公開ホスト名の設定

[ネットワーク] > [Tunnels] から作成したトンネルの右側のKebab menu(ケバブメニュー)より [設定] を選択します。
[公開されたアプリケーションルート] > [+公開ホスト名を追加する] より設定を行います。

項目 設定値
サブドメイン 任意
ドメイン 1.で取得したドメインを選択
タイプ SSH
URL localhost:22

3. Cloudflare Accessポリシーの作成

3.1. ポリシー作成ページへの移動

Zero Trustホームページで、[Access] > [ポリシー] に移動します。

3.2. ポリシーの作成

ポリシー名、ルールを作成します。
以下の画像は、ポリシー名: sample、アクセス条件を「日本からのアクセス」かつ、「メールアドレスが sample@example.com のユーザー」のみがアクセスできる、というルールになっています。

補足 Cloudflare Access policiesについて

ほかにも複数の認証方式が登録できるため、公式ドキュメントを参考に適切に作成してください。
https://developers.cloudflare.com/cloudflare-one/policies/access/
Google認証を追加しておくとGoogleアカウントでのログインで認証可能になるので便利です。
https://developers.cloudflare.com/cloudflare-one/identity/idp-integration/google/

4. アプリケーションの登録

4.1. アプリケーション登録ページへの移動

Zero Trustホームページで、[Access] > [アプリケーション] に移動します。

4.2. アプリケーションの設定

[+アプリケーションを追加する] > [セルフホスト] に移動しアプリケーション設定を進めます。

項目 設定値
アプリケーション名 任意
パブリックホスト名 2.5.節で設定した値
Accessポリシー 3.節で作成したポリシーを選択

設定後、次へを選択し保存する。

クライアント側の設定

1. cloudflaredのインストール

OSによってインストール方法が異なります。
今回はクライアントがWindows PCの場合を例にします。

winget install --id Cloudflare.cloudflared

他のOSについては、以下のページを参考にしてください。

https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/

2. SSH configファイルの設定

~/.ssh/config に以下を記述します。
Windowsの場合: C:\Users\<ユーザー名>\.ssh\config

Host <登録名>
    HostName <サブドメイン>.<ドメイン>
#   HostName test.<1で入手したドメイン>
    ProxyCommand cloudflared.exe access ssh --hostname %h
    User <サーバー側のユーザー名>

3. SSH接続

sshコマンドで接続します。

ssh <登録名>

初回にブラウザが立ち上がり、認証を求められます。
認証が完了すると以下の画面が表示されます。

[Approve] をクリックすると以下の画面が表示され、
alt text
SSH接続が確立されます。

まとめ

Cloudflare Zero Trustを活用して、安全にどこからでもアクセスできるSSHサーバーを構築する方法を説明しました。

これを使えばネットワーク経由で自宅のPCなどにも安全にアクセスできます。

20分ほどで簡単に設定できるので、リモートアクセスできる環境を作りたいけどやり方がわからない、設定が面倒そうだと思っている方は是非試してみてください。

また、ゲームのサーバーやWebアプリなども気軽に公開できるので、これからどんどん使っていこうと思います。

Discussion