🛵

「Cloudflare Zero Trust」 で組織のゼロトラストネットワークを構成する

2022/05/21に公開
6

この記事以外にもいくつかCloudflareのゼロトラストについての記事を書いています。今回はその第一弾として、Cloudflareのゼロトラストネットワークの概要について書きます。

2023年11月27日 追記

  • PayPayやInstagramなど、一部サービスのスマートフォンアプリが使えない問題の解決策を追記しました。

背景

2020年ごろから「ゼロトラスト」という言葉をよく聞くようになりました。
その後、聞きはするけど、あまり具体的に調べてみたことはありませんでしたが、Cloudflareの管理画面に久しぶりにログインしたら「Zero Trust」というメニューがありました。CloudflareといえばCDNの会社として有名ですが、そんなこともやっていたのかと気になり、ちょっと調べてみましたので、ここに忘備録として残しておきます。

結論を先に書いておくと Cloudflare Zero Trust は以下のような機能を提供します。

  • TCP/UDPトラフィックに対するアンチウイルス機能(ランサムウエア、スパイウエア等のスキャン、ブロック)
  • DNS、HTTP、TCPでのフィルタリング(スパムやアダルトサイトなど問題のあるサイトのブロック)
  • 社内向けサーバーへ、社内、自宅、外出先からセキュアにアクセスするネットワークの提供
  • 社内向けサーバーへアクセスする際の認証機能の提供
  • 会社、自宅のPCやスマートフォンから、簡単にゼロトラストネットワークに繋ぐアプリを提供
  • ユーザー単位でのゼロトラストネットワーク内の各種サービスへの接続許可・拒否の設定が可能
  • アクセスログ、フィルタリングログの保存、分析

等々が使えて、ユーザー数50人まで無料(ログの保存期間など別途制限あり)ってのはすごいなと思いました。
ちなみに私はゼロトラストネットワークについては素人ですので、間違い等ありましたら指摘をお願いします。

ゼロトラストまでは必要ないよ、という企業でも、Fortigateのような統合脅威管理(UTM)を導入していない場合などは、とりあえずCloudflareのゼロトラストにある Gateway を使うだけでも安価にセキュリティの向上が見込めるんじゃないでしょうか。

ゼロトラスト前のVPNネットワーク

多分、今でもこの構成が多いんじゃないかと思いますが、一般的なLANとVPNを用いたネットワークだと以下のような構成になると思います。
この場合、社内サーバーにはVPNを通してアクセスし、インターネットには各拠点から直接出て行きます。

各拠点分散型ネットワークの例

上の方法だと各拠点に統合脅威管理(UTM)が必要で、どうしてもコストが高くなる、という場合は以下のようにする方法もあります。

一点集中型ネットワークの例

ただ、昨今のコロナウイルス感染症の影響で在宅勤務が増えた結果、多くの社員がVPNで本社などの拠点を経由して、社内向けサーバーやインターネットと通信することになりました。
しかしみんなが会社にVPNで繋ぐと思いの外通信が遅いことがありました。
また、社内サーバーに繋がない場合でも統合脅威管理(UTM)を通さないとセキュリティ面で不安があるために、やはりVPNで会社経由で各種インターネットサービスを使用する場合が多いんじゃないでしょうか。

Cloudflareのゼロトラストネットワークサービス

それに対するCloudflareのサービスは以下のような構成です。

一つ一つ見て行きます。

  1. Team
    • Cloudflareのゼロトラストサービスでは、組織単位をTeamとして登録します。
    • ただし、Teamは物理的にどのような形でネットワークに繋いでいてもよく、社内、自宅、あるいは外出先等からCloudflareが提供するアプリによって接続することができます。
  2. Gateway
    • GatewayはCloudflareネットワーク上においてセキュリティ機能を提供し、組織をランサムウエアやフィッシング等から守る機能を提供します。
    • 特定サイト(例: yahoo.com)、あるいは指定したカテゴリーのサイト(例:アダルトサイト)等へのアクセスを、DNS、HTTP(S)、TCPパケットのレベルで遮断します。
  3. Warp
    • これらの機能を提供するゼロトラストネットワークに簡単に接続できるアプリを提供します。
    • スイッチのON/OFFでゼロトラストネットワークへの接続を有効化/無効化できます。
    • Warpは 1.1.1.1 Warpとして、Windows, Mac, Linux, iOS, Android向けに提供されているCloudflareのアプリです。
    • Warpに Team名を登録し認証することで、表示が「ZeroTrust」に変わり、自組織のゼロトラストネットワークへ接続できるようになります。
  4. Access
    • Accessは社内やクラウド上に存在する、社内向けのサーバーへの通信経路、認証機能を提供します。
    • ゼロトラストネットワークでは、たとえ社内にあるサーバーでも信用しませんので、それら全てに対する認証機能もCloudflare Zero Trust によって提供されます。
    • また、社内向けの各種サービスへの、ユーザーごと、組織ごとの接続の許可・拒否といったコントロール機能も提供します。
    • SaaSサービスへの接続可否もユーザーごとにコントロールできます。

Cloudflareの最大の特徴は、これらの機能をクラウドサービスとして提供している点にあると思います。(したがって高価なUTMなどのハードウェアを別途購入する必要はありません)

VPNを構成するのはWireGuard

  • WarpアプリからCloudflareのエッジまでの通信はVPNにより暗号化されています。

  • このVPNにWireGuardというUDPベースのVPNが使用されています。

  • WireGuardについては、私も過去に調べて書いたことがありました。

  • CloudflareのWireGuard実装は、Rustで実装された独自のBoringTunという実装を使用しているようです。

  • WireGuardはハードウェアによる最適化が無くても高速に動作するので、個々のデバイスがVPNでゼロトラストネットワークに接続するような使い方には最適だったということがあるのかもしれません。

  • なお、Cloudflare Zero Trust経由でインターネット上のサービスに接続すると、接続元IPアドレスはCloudflareのGatewayのIPアドレスになります。

アンチウイルス

Cloudflareのアンチウイルス機能については日本語の記事が出ています。1年ぐらい前のものですね。

また、アンチウイルスがどのように動作するかについては以下に記載があります。

ちなみに注意点として、ウイルススキャンといっても「デバイスに保存されたファイルのスキャン」という意味ではありません。
Cloudflare Zero Trust の Gateway が提供するのは、通信トラフィックに含まれるデータのウィルススキャン機能です。
したがって、Cloudflare Zero Trust を入れたらPCのアンチウイルスソフトは要らないか、というと必ずしもそうはならないので注意が必要です。

ウイルススキャンを実行する条件

スキャンを実施するのは以下の条件のいずれかに合致した時。

  • HTTP HeaderContent-DispositionAttachment の時。
  • HTTPリクエストのbodyが以下のファイルタイプを含むとCloudflareによって判断された場合。
      * 実行可能ファイル (例: .exe, .bat, .dll, .wasm)
      * ドキュメント (例: .doc, .docx, .pdf, .ppt, .xls)
      * 圧縮ファイル (例: .7z, .gz, .zip, .rar)
      * Content-Dispositionヘッダーのファイル名に、上記のファイルタイプカテゴリの1つであることを示すファイル拡張子が含まれている時。

上記の条件のいずれにも適合しない場合、オリジンのContent-Typeヘッダーを使用して、ファイルをスキャンするかどうかを決定するとのこと。
そして画像、ビデオ、またはオーディオファイルタイプのカテゴリにあると判断したファイルはスキャンされないようです。

ファイルがスキャンをトリガーせず、スキャンから除外される基準にも一致しない場合、デフォルトでファイルのマルウェアスキャンが実行されます。

スキャンを実行しない条件

以下の条件に適合する場合はスキャンを実行しない。というかできない。

  • ファイルサイズが15MB以上。
  • パスワードをかけて暗号化されたファイル。
  • 3階層以上の階層を持つアーカイブ。
  • 300以上のファイルを含むアーカイブ。
  • PGPによって暗号化されたファイル。

なお、アンチウイルス機能が有効にされている場合、デフォルトで全てのアップロード・ダウンロードされるファイルに対してスキャンを試みるが、設定によって特定のURLに対するスキャンを無効化できる。

また、アップロードのみ、ダウンロードのみ、または両方をスキャンするように設定できる。

ウイルススキャンをするということは、ユーザーとサービスの間でプロキシとして機能し、HTTPSを復号してスキャンしていることになります。この点に不安を覚える場合は、Settings → Network → Firewall → TLS decryption を無効にした方が良いでしょう。

外部サイトへのアクセス制御

  • Gatewayで特定サイトへのアクセスを許可/拒否 設定することができます。
  • ドメイン指定や、URLによる指定の他、カテゴリ指定して許可/拒否 設定できます。
  • カテゴリには、スパム、スパイウェア、アダルトなどがあり、設定しておくとCloudflare側の情報と付き合わせて自動で判断されます。

拒否指定されているサイトにアクセスすると、以下のように事前に設定したメッセージとともに拒否画面が表示されます。

個人的には、たとえ社内サービス的なものがなくても、これらのアンチウイルス機能やサイトブロック機能だけでも使う価値があると思いました。てか冒頭にも書きましたが、これらを50人まで無料で使えるってすごくないですかね。
もう、Fortigateとかの統合脅威管理(UTM)入れてない会社だけでなく、個人でもとりあえずコレ使ったらどうかと思う。

Gateway Egress Policies (エンタープライズ契約者のみ)

  • トラフィックがGatewayからインターネットに出て行くとき、デフォルトでは Cloudflare Zero Trust共通のアドレスをソースアドレスとして出て行く。
  • ただ、Gateway Egress Policiesを使うことで送信元IPアドレスを指定のアドレスに限定することができる。
  • 送信元IPアドレスを限定することで、送信元アドレスを限定しているサービスにも接続できるようになる。
  • 設定方法としては、ルーター等と似ていて、条件と送信元IPアドレスを紐づけて行く。
  • 条件はたとえば「送信先(送信元)が日本国内のIPアドレスなら x.x.x.x を送信元IPアドレスとして使う」とか、「送信先(送信元)が特定のアドレス範囲なら x.x.x.x を送信元IPアドレスとして使う」というように設定する。
  • 複数条件を設定して、上から順に評価されていく。
  • ただし有料(エンタープライズ)ユーザーのみ使用可能。

Warpアプリ

  • Windows, MacOS, Linux, iOS, Android向けに、ゼロトラストネットワークに接続するためのアプリが提供されています。
  • 何れもインターフェイスは共通かつシンプルで、以下のようにスイッチをONにしておけば常時ゼロトラストネットワークに接続していることになります。
  • Warpアプリは無料で提供されます。

ダッシュボードでの設定変更は組織の全クライアントに即座に反映される

  • Cloudflareのダッシュボードで、WARPクライアントの設定変更(例:スプリットトンネルの設定追加)、を実施すると、その設定変更は即座にクライアントに反映されます。
  • 数十人、数百人が使うことを考えると、社員が個別にクライアントの設定変更をしなくても管理者がダッシュボードで設定変更すれば各クライアントに変更が反映されるのは運用上非常に楽だと思います。

ログ解析

ロギングを有効にすると、アクセス等のログが記録されるようになります。

例えばこんな感じで記録されます。

また、全体のアクセスカテゴリなどの分類も表示されます。

なお、Freeプランでは、ログの保存は24時間までです。

料金プラン

燦然と輝くFreeプラン。とりあえず無料で使い始めて、人数が増えたり機能不足を感じたらスタンダードプランに移行で良さそう。

実際に使ってみて

  • 1週間ぐらい前からこのゼロトラストネットワークサービスを個人で使ってみています。
  • 対象は、PC(Windows, Mac, Linux)、iPhoneです。
  • WireGuardによるVPNは高速に通信できるため、一般にVPNを経由してインターネット通信したときのようなストレスは全く感じていません。Zoomも特にストレス無く使えました。
  • ただ、たまに特定のiPhoneアプリが起動直後に落ちることがありました。その場合は一時的にWarpアプリでゼロトラストを無効にすれば立上がりました。
    • 2023/11/27 本件の根本的な解決方法をこの記事の最後に追記しました。
  • 何度も書いてますが、これだけの機能を無料で使えるのは驚きです。在宅勤務が増えた企業のネットワーク構築やセキュリティ強化にあたって最初の選択肢にしても良いのではないかと思います。
  • なんなら在宅勤務じゃなくてもセキュリティ強化の目的で使ったら良いと思いました。

2023年3月 追記

  • 記事の最後に以下の内容の解決方法を記載しています。

自治体ホームページがブロックされる問題

  • 上記記事を書いた後、会社の小規模な事務所(2名勤務)がUTMを導入していなかったので、CloudFlare Zero Trust の検証を兼ねてアプリをパソコンに入れてもらった。
  • 概ね問題なかったが「特定の自治体のホームページを見ようとするとブロックされる」という苦情が入った。
  • ブロックされる自治体は新潟県の市町村や福島県の市町村など、意外に多い。
  • Firewallで Contents Catergory = Government & Politics (政府関係)を許可してみたが効果はなかった。
  • 調べたところ、 Firewallで DNS PoliciesDNS Tunneling を無効にするとブロックされなくなることがわかった。
  • DNS Tunneling をブロックする設定にすると、なぜ自治体ホームページがブロック対象になるのかはわからないが、現状は DNS Tunneling を外して運用中。

特定のスマートフォンアプリの通信がブロックされる

  • スマートフォンの CloudflareOneアプリで Zero Trust に参加すると、いくつかのアプリが起動直後にエラーで落ちたり、エラー画面が表示されたりする
  • 具体的には、PayPayや、ある店舗のポイントを管理するアプリで発生した
  • これについては今の所根本的な解決策が見出せず、PayPay等を使うときは都度、アプリでZero TrustをOFFにしている。でもめんどくさいのでどうしたものか...

対処法を後述。

一部の有名ニュースサイトが見れない

  • 上で書いたことと同じ原因かもしれないけど、たまにCloudflare Zero Trust経由でアクセスできないサイトがある。
  • 具体的には 読売オンライン
  • 読売オンラインのようにドメインがわかっている場合は、 Settings -> Network -> Split tunnels and local domain fallback -> Default -> Device settings -> Default -> Configure -> 'Split Tunnels' -> Managewww.yomiuri.co.jp を指定すれば見れるようになる。
  • 上記を指定すると、そのドメインやIPアドレス宛の通信はCloudflare Zero Trustを通過せずに直接インターネットに出て行くようになる。

特定のスマートフォンアプリが使えない問題への対処方法

~~上記で書いたように、Cloudflare ZeroTrustを使うようになってから、PayPayやFacebook, Instagram のようなよく使うスマートフォンアプリを立ち上げようとすると、すぐに落ちてしまう問題が発生するようになった。
アプリが落ちる原因はアプリがサーバーと通信しようとして、なんらかの原因でCloudflare ZeroTrustにブロックされている事に起因するぽい。

この問題についてコメントをいただいているので、以下にそれらのサービスを使えるようにする設定を追記します。

まずは、Cloudflare ZeroTrustのコンソール画面で、 GatewayFirewall Policies を開き、 HTTP タブを選択。以下のような画面になる。

右上の Add a plicy をクリックすると新たにポリシーを選択できるので、ここで Do not inspect (検査しない) ルールを追加する事で、上記のアプリが落ちなくなります。

事前に用意されているサービス名から選択する方法

Do not inspect として登録できるのは、事前に Cloudflare側で用意されているジャンルを選択する事で一括選択する方法もありますし、 PayPayなど日本特有のサービスはジャンルの一覧にないので手動で設定する事になります。

ここで、以下のように Selector に Application を選択すると、事前に用意されたサービス名を複数選択できますので、APIのURLを調査する必要がなくて少し楽ができます。
( Slack や Facebook など、世界的に使われているサービスは大概ここにあります)

選択し終えたら、 Select an actionDo Not Inspect を選択し、 Save policy をクリックして保存します。

ドメインを指定する方法

一方で、Selector に Domain を選択すると、アプリが通信するドメイン名を指定することが出来ます。
PayPay や Suica, Pasmo を検査から除外したい場合は以下のように or で繋ぎます。

選択し終えたら、 Select an actionDo Not Inspect を選択し、 Save policy をクリックして保存します。

以上の方法で、スマートフォンアプリが問題なく使えるようになりました。
コメントいただきありがとうございます!

Discussion

デジタルガジェットデジタルガジェット

初めまして!
アプリ等で起動しないものがあるとのことでしたが、私の場合は、ダッシュボードのログからエラーが出ているであろうアプリのログを確認してはそのドメインをSSLインスペクション除外に追加していく作業をちまちまやっております。。(この方法でpaypayについては使えるようになりましたw)

hiroe_orz17hiroe_orz17

なるほど、私も見つけられるものはそうしてるんですが、今は複数人で使ってることもあってpaypayのドメインが見つけられる断念してます...笑

hiroe_orz17hiroe_orz17

なんと、わざわざありがとうございます!さっそく設定していみます!

KeiKei

自分は最近Zero Trustを使い始めましたが、一部アプリの通信ができなくて困っていました。
Firewall policiesのHTTP → Add a policy → TrafficのAdd conditionからVirtual NetworkをDo not inspectにして、VPNを再接続すると通信できるようになりました。安定性も向上したように感じます。念のため、ポリシーを有効にした状態と無効にした状態で何度も繰り返して確認したので、間違いないと思います。

hiroe_orz17hiroe_orz17

確かにこのやり方が良さそうですね。いただいた内容を記事に追記しておきます。ありがとうございます!