On this page
article
Cloudflare Zero Trust 実装
実施したいこと
- 1.インターネットアクセスのセキュリティ強化および可視化(SWG)
- 2.ローカルサーバへのVPNアクセス(SDP)
背景
ニュースで「Cloudflare One」が無償化?(うろ覚えだが)と見たため。
Cloudflare Zero Trust とは
Cloudflare Zero Trustの公式docs上で、以下記載がある。
Cloudflare Zero Trust は、エンタープライズ アプリケーション、ユーザー、デバイス、ネットワークを保護する Secure Access Service Edge (SASE) プラットフォームの名称である Cloudflare One の一部です。
SWGやSDP(説明は別途)の機能も持ち合わせており、ライセンスの範囲内であれば個人での利用も可。
以下、SWGの実装と、SDPの実装で分けて記載する。
実装:SWG(Secure Web Gateway)
-
1.アカウント作成
- https://dash.cloudflare.com/sign-up ←ここから作成。
- ログイン後、「Zero Trust」で画面遷移。
-
2.Idpの設定(認証)
- 以下参考に、設定を行う。
- https://developers.cloudflare.com/cloudflare-one/identity/idp-integration/
- 「Settings」 > 「Authentication」で認証関連の設定へ移動。
-
図. Cloudflare One 「Settings」>「Authentication」画面 - 「Login Method」に、 https://developers.cloudflare.com/cloudflare-one/identity/idp-integration/google/を参考に、
- Google Idpの設定を行う。
-
3.デバイス権限の設定(認可)
- 以下参考に、設定を行う。
- https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/device-enrollment/
- 「Settings」 > 「WARP Client」へ移動。
-
図. WARP Client 設定 - 「Device Enrollment」」の「Manage」へ移動。
- ここで、Google Idpを利用したログインに指定する。
-
しかし、設定した以外のGoogleアカウントもアプリを使えそう(?) 厳密に指定するのであれば、上記ルール指定時に「Email」属性も使うといいかも。
-
図. Device Enrollment 設定
-
4.利用するクライアントでルート証明書をインストール
- 以下参考に、証明書を取得する。
- https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/user-side-certificates/
- クライアント⇔インターネット間のSSL通信を、Cloudflareがプロキシして検査する関係上、通信経路が、
- クライアント⇔Cloudflare⇔インターネットというようになる。
- そうすると、クライアントから見ると、帰ってくる証明書はCloudflareのものになる。
- あらかじめ信頼済みとして登録してないと、証明書エラーが発生する。
- 任意の証明書の利用も可能だが、ここではCloudflare発行の証明書を利用する。
- 「Settings」 > 「Resource」 > 「Certificates」から、
IN-USE
となっている証明書の3点リーダーをクリックして、ダウンロード。
その後、インストール。 -
図. 証明書一覧
-
5.アプリのインストール
- WARPというアプリのインストールが必要。
- 以下からインストール。
- https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/download-warp/
- デプロイ手順は、「Manual Deployment」を参考に。
- https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/manual-deployment/
- ここまでで、WARPクライアントでインターネット通信がプロキシされるはず。
-
6.ポリシーの設定
- SWGのポリシーは以下の種類がある。
-
・DNSポリシー
- DNSクエリの精査。
- DNSクエリの精査。
-
・ネットワークポリシー
- TCP/UDPパケットの検査。
- TCP/UDPパケットの検査。
-
・HTTPポリシー
- HTTPリクエストの検査。
- HTTPリクエストの検査。
-
・Egressポリシー
- インターネットアクセスの際の送信元IPに、任意の固定IPを設定できる。
- インターネットアクセスの際の送信元IPに、任意の固定IPを設定できる。
-
・リゾルバーポリシー
- DNSクエリを任意のDNSサーバで解決するように設定できる。
- DNSクエリを任意のDNSサーバで解決するように設定できる。
- 「Gateway」>「Firewall Policy」から、以下参考に実装。
- https://developers.cloudflare.com/cloudflare-one/policies/gateway/
- SWGのポリシーは以下の種類がある。
-
実装後、実際にWARPクライアントをONにしたうえでサイトへアクセスしてみると、
「Logs」>「Gateway」からログを確認できる。 -
モードが2種類あり、「Gateway with DoH」はDNSクエリのみCloudflareで検査し、
「Gateway with WARP」は、実際にHTTPS等をCloudflare側で復号して検査する。
WARPクライアントに指定しているプロファイルによっては、これらのモードが選択できない場合もあるため、うまくプロキシできない場合には要チェック。
実装:SDP(Software Defined Perimeter)
全体の大まかな流れとしては、LAN内に専用のサーバーを作成し、WARPクライアントとサーバーのアウトバウンド通信のそれぞれをつないでSDPを実装しているような感じ。後述の手順は、以下参考に作成。
https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
-
1.トンネルの作成
- 「Access」>「Tunnel」から、
Cloudflared
を選択。 -
図. トンネル作成画面 - トンネル名を付けて、
Cloudflared
をインストールするマシンのOSにしたがってスクリプトを取得する。 - 私が実装したのは、Miracle Linuxで構成されているサーバーのため、
Red Hat
のスクリプトを取得する。
- 出てきたスクリプトをサーバー上で実行すると、Cloudflare側の画面下部に以下が表示され、「接続済み」となる。
-
図. 接続完了画面 - サーバー側ではサービスが作成され、
systemctl
で確認できる。 -
図. cloudflared状態確認
- 「Access」>「Tunnel」から、
-
2.プライベートネットワークの設定
- 接続したいプライベートネットワークを設定する。一旦サーバーのセグメントを指定。
- パブリックホスト名は設定不要。
-
図. プライベートネットワーク作成画面 - トンネルが作成され、「ステータス」が
HEALTHY
になっていればOK。 -
図. トンネル一覧画面 -
他にも追加したいIPセグメントがあれば、追加する。
-
3.プロファイルの設定
- 接続したいIPセグメントに対して、Cloudflareトンネルを通るように設定が必要。
- デフォルトの設定では、プライベートIP宛ての通信は、Cloudflareではなくローカルに流れてしまう。
- 「Settings」>「WARP Client」にある各プロファイルの設定画面に入り、以下セクションの設定を変更する。
-
図. プロファイル設定画面 - 私の環境では、以下プライベートIPをすべて削除した。
-
図. 除外設定:プライベートIP一覧 -
変更後、画面戻った後にはプロファイルの保存を忘れずに。
-
4.ポリシー設定
- SWGの時と同じ要領で、ポリシーを設定する。
- HTTPSの通信等、SSLが必要な通信に関しては、個人の環境では自己署名証明書のケースが多いと思われる。
- その場合、証明書エラーではじかれるので、HTTPポリシーで証明書チェックをバイパスする設定が必要。
-
図. HTTPポリシー:アクション設定例
- SWGの時と同じ要領で、ポリシーを設定する。
-
5.動作確認
- 私の環境内でのUTM(FortiGate)でログを確認すると、該当通信の送信元IPアドレスが、
Cloudflared
を実行しているサーバーとなっていることがわかる。
- 私の環境内でのUTM(FortiGate)でログを確認すると、該当通信の送信元IPアドレスが、
参考・引用
- https://developers.cloudflare.com/cloudflare-one/setup/
- https://developers.cloudflare.com/cloudflare-one/identity/idp-integration/
- https://developers.cloudflare.com/cloudflare-one/identity/idp-integration/google/
- https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/device-enrollment/
- https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/user-side-certificates/
- https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/download-warp/
- https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/manual-deployment/
- https://developers.cloudflare.com/cloudflare-one/policies/gateway/
- https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/