🙆

はじめてのCloudflare Tunnel その1 Cloudflare Tunnelを試してみる

2023/04/25に公開

Cloudflare Tunnelはログイン対象サーバへのインバウンド通信設定なしで、対象サーバからアウトバウンド通信のみで、外部からの安全なサーバへのアクセスを実現させます。AWSでいうところの、Amazon Systems Manager Session Managaerと同様の動作をしますが、WEB系のポート(80/443等)と連携させることで、公開ウェブサーバへのアクセスをPublicIPをインターネット側に告知せず実現させることもできます。
Cloudflare Accessというゼロトラストネットワークアーキテクチャを実現するサービスと連携し、様々なポリシー設定やDLP設定などと連携させて使うことも可能です。

対象サーバ上でcloudflaredというデーモンを起動させることで、デーモンがCloudflare エッジネットワークへトンネルを確立します。

やってみる
この機能を使い場合、まずドメイン名がCloudflareで管理されている必要があります。
具体的な手順はここにあります。

マネージメントコンソール左ペインでZero Trustをクリックします。

AccessTunnelsをクリックします。

Create a tunnelを押します。

適当な名前を入れてSave tunnelを押します。

cloudflaredをインストールする環境を選びます。Amazon Linux系であれば"RedHat"を選びます。

cloudflaredインストールコマンドが出てきますので、これをコピペして実行します。
インストールが完了したらNextボタンを押すと、タブが2つ出てきます。

これはトンネルを張る、つまり保護する対象で設定が異なります。
Public Hostnames
インターネットに面するアプリケーション、WebサーバやSSHなどを保護する際の設定です。

Private Networks
ネットワーク単位のトンネル設定を行います。

アクセスするためにはCloudflare WARPという専用クライアントアプリが必要になります。これについては別と記事を上げたいと思います。

ここからの手順はPublic Hostnamesで進めます。

http://ec2-3-115-22-223.ap-northeast-1.compute.amazonaws.com/

を保護する場合以下の設定となります。

Subdomainを使う場合、あらかじめNSレコードをセットしておく必要がありますが、Enterpriseという上位のプランが必要となるため、ルートドメインで作業を進めます。
この例ではharunobukameda.labrat.onlineがパブリックに見えるホストのドメインとなります。
(私のドメインはテスト用でのものでサブドメインが入っています)

設定が完了したら画面右下のSave tunnelを押します。
harunobukameda.labrat.onlineにアクセスすると以下のようにサイトが表示されていることがわかります。

勝手にTLS処理が実装されておりCloudflareの証明書により保護されていることがわかります。

では、対象EC2のセキュリティグループのインバウンドを以下のように設定してみます。

引き続き問題なくブラウザからアクセスができています。

SSHの設定も同様です。単純に以下のようにプロトコルを変更すればOKです。

Well-Knownポートではなく特殊ポートを使っている場合例えば以下のように設定してください。

ec2-3-115-22-223.ap-northeast-1.compute.amazonaws.com:8022

次回はTunnelの監視についてお届けする予定です!

Discussion