Cloudflare tunnelで社内のWEBサーバーにアクセスする

「SAVACAN」担当のMKです。

今回は、Cloudflare Zero Trustの機能を使って、社内LAN環境に設置してあるWEBサーバーを、無料で外部公開する方法をご紹介いたします。

Cloudflare Zero Trustに関連しては、過去に「CloudflareのCDNとVPNを設定してみる」という記事でWARPを使用したVPN設定についても取り上げていますので、ぜひ併せてご覧ください。

まず初めに、CloudflareのZero Trustを活用したトンネル機能の基本的な概要についてご紹介いたします。なお、本記事はCloudflareアカウントを取得済である事を前提としております、ご留意ください。

目次

Cloudflare tunnelとは何か

公式サイト の解説によればCloudflare Tunnelは、「パブリックにルーティング可能な IP アドレスを使用せずに、リソースを Cloudflare に接続する安全な方法を提供します」とのこと。

簡単に言うと、Cloudflare Tunnelを利用すれば、外部公開用のIPアドレスを持っていなくてもインターネット接続環境さえあれば、社内や自宅のWEBサーバーを公開したり、外部から接続することが可能になります。

具体的には、対象のサーバーでCloudflareが提供するトンネル接続用のアプリケーション「cloudflared」を実行し、Cloudflareとの安全なトンネル接続を確立します。Cloudflare側でサーバー公開用のDNS設定とサーバーへのアクセスを中継することで、外部からの接続を可能とします。

なお、トンネルを利用するためには、対象ドメインのネームサーバーにCloudflareのネームサーバーを設定する必要がある点にご留意ください。

今回の設定内容の構成

今回は、LAN環境内に構築した社内サーバーを外部公開したいと思います。
社内サーバ―では、ApacheとNginxをそれぞれ8080ポートと8081ポートにて起動してあるものとします。

Cloudflareのトンネルを通じて作成したドメインにアクセスすると、そのトラフィックはトンネルを経由して社内サーバーへとルーティングされます。サーバーはリクエストを処理し、トンネルを通してユーザーへレスポンスを返します。

次の項目では最低限の設定内容を紹介させて頂きます。

公開に必要な設定は下記の2点となります

1)トンネル接続の確立
2)トンネル経由後のルーティング設定

トンネルを設定することで、関連するDNSレコードもCloudflare上に自動生成されるため、手間をかけることなく設定が完了します。

トンネルとルーティングの設定

Cloudflareにログイン後、Zero Trustへ進みます。
「ネットワーク」の[Tunnels]を選択し[トンネルを追加する]をクリックします。

「トンネルの種類を選択してください」にて[選択するCloudflared]をクリックします。

トンネルを作成する画面で任意の名前を入力し[トンネルを保存]をクリックします。

「環境を設定する」では、公開する社内サーバーの環境に合わせて選択します。

cloudflaredのインストールとトンネル接続用のコマンドが表示されますので社内サーバーのコンソールにて実行します。

完了するとコネクションが確立したことが表示されます。ステータスに「接続済」と表示されていれば成功です。
画面右下の[次へ]をクリックします。

「パブリック ホスト名を追加します」の画面でサブドメイン、ドメイン、タイプ、URLをそれぞれ設定します。

サブドメイン:公開URLに利用するサブドメイン
ドメイン:Cloudflareに登録しているドメインから選択
タイプ:社内サーバー側の待ち受けプロトコル
URL:社内サーバー側にて公開対象とするURL

保存するとCloudflareのDNSレコードにCNAMEにてサブドメイン(spacei_apache)が追加され、トンネル経由でのルーティングが可能となります。

設定済のトンネルに複数経路を追加する

トンネル接続済の社内サーバーにて、複数のトンネル設定を追加する方法を紹介します。
複数のサブドメインを運用していたり、公開アプリケーションを複数運用している場合に有効です。

今回は別ポートで待ち受けているNginxの公開設定を追加します。
作成済のトンネル設定にて[パブリックホスト名]タブから[パブリックホスト名を追加する]をクリックします。

パブリック ホスト名を追加しますの画面で以下の内容を入力します。

サブドメイン:spacei_nginx(任意)
ドメイン:プルダウンからDNSに登録したドメインを選択
タイプ:http
URL:localhost:8081(社内環境のWEBサーバーでNginxを起動しているポート)

保存すると先ほどと同様にDNSレコードが追加され、設定したサブドメイン(spacei_nginx)でアクセスする事が可能となります。

IPアドレス制限

公開した社内サーバーへIPアドレスによるアクセス制限を設けたい場合は、Cloudflare側で実施する事をお勧めします。トンネル経由でのアクセスは、ロードバランサ―経由と同様に「x-forwarded-for」で取得する必要があり、少々面倒です。どうせトンネルからの経路しかないのであれば、すべてCloudflareに任せてしまいましょう。

・パターン1  ドメインのWAF設定
標準のセキュリティWAFにて制限します。ルールの評価順序は以下となるようです。

(1)ツールのIPアクセスルール

(2)カスタムアクセスルール

IPアクセスルールではIPアドレス、国別IP(GeoIP)等での制御が可能ですが、ドメイン単位など制御対象が大きくなります。カスタムルールではアクセスルールの制御方法に加え、URIやユーザーエージェントなどL7相当の領域での制御が可能となりますが、freeプランでは5個までとなります。
ルールの評価順が決まっており、ルールに合致した場合は以降のルールは適用されないので注意してください。

・パターン2  Zero Trustポリシー
トンネル経由での公開対象に対して、確実にルールを設けたい場合はZero Trust側でポリシーを設定すると良いです。
IP制限に加えて、様々なユーザ認証を挟むこともできますが、今回は割愛します。

(1)ポリシー設定
[Access]→[ポリシー]で許可するIPアドレスを設定します。

(2)ポリシーを追加
ポリシー名に任意の名称を入力し、アクション(Allow、Blockなど)とセッション時間を設定します。

(3)ルールを追加
制限したいルールを追加して[保存]をクリックします。
この例では日本のIPアドレスのみ接を続許可します。

保存して一覧画面でポリシーが追加されたことを確認します。

(4)アプリケーション設定
[Access]→[アプリケーション]から[アプリケーションを追加する]をクリックします。

今回は社内サーバーが宛先ですので[セルフホスト]をクリックし以下の設定をします。

基本情報
パブリック ホスト名
サブドメイン:spacei_apache
ドメイン:yourdomain.com

パブリックホスト名を入力した場合は、プライベート ホスト名とプライベート IPの設定は不要です。

・Access ポリシー
既存のポリシーを選択から[既存のポリシーを選択]をクリックし(1)で作成したポリシーを選択します。

・ログイン方法
[利用可能なすべてのIDプロバイダーを受け入れる]にチェックするとメールでのワンタイムパスワード発行、チェックを外し[インスタント認証]にチェックを入れるとワンタイムパスワードの発行なしでアクセスできます。

ここまで設定したら画面右下ボタンの[次へ]→[次へ]と進み保存します。

(5)tunnelにアプリケーションを紐づけ
tunnelの編集から[パブリックホスト名]タブをクリックして編集します。
画面下に[その他のアプリケーション設定]がありますので、Access:プルダウンから(2)で登録したアプリケーション名を設定し保存します。

以上で、各トンネル設定に対してのアクセス制限がIP制限が実装出来ました。
ユーザー認証もとても便利な機能なので、別の機会に解説できればと思います。

Cloudflare Tunnelの無料利用と便利な活用シーン

Cloudflare Tunnelは、驚くほど高性能でありながら、無料で利用することができます。
同時にCDNを利用する形となるため、性能の高くないサーバーでもそれなりに運用できます。
以下のようなシーンで特に便利です。

  • 公開用IPアドレスを持っていないがWEBサイトを公開したい場合
  • 開発環境のWEBサイトを限定的に公開したい場合
  • 外部から非公開環境のサーバーを操作したい場合

例えば、お客様へ開発中の環境をデモ公開したり、リモート先のメンバーへアクセス経路を用意したり、さまざまなシーンで便利に活用できますので、ぜひお試しください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次