Cloudflare Zero Trust を介したインターネット接続のサービスモードに、local proxy mode があります。他のモードではDNSやTCP, UDPのすべてのインターネットとのトラフィックをCloudflare Zero Trustを介しますが、local proxy modeではWARPクライアントが準備するHTTP Proxyを使うことでCloudflare Zero Trustを介したインターネットとの通信を行います。
設定方法
- Cloudflare Zero Trust の設定画面の "Team & Resouces" - "Devices" に進みます。
- Device profiles で、Device Profileの編集を開始します。既存のDefault Profileを編集したり、別のProfileを作成してください。
- Device tunnel Protocol では MASQUEを選択してください。(WireGuard では local proxy modeが動きません)
- Service mode にて「Local Proxy mode」を選択してください。またProxyが listen するポート番号はデフォルトで40000ですが、変更できます。
- Device tunnel Protocol では MASQUEを選択してください。(WireGuard では local proxy modeが動きません)
- PC側のHTTP, HTTPS Proxyの設定を行ってください。
- TLS Inspectionを実施する場合にはCloudflareの証明書の設定も行ってください。(参考記事)
設定が終わりましたら、 https://help.one.cloudflare.com/ をWebブラウザから開くなどして、Cloudflare Zero Trust 経由となっているかご確認ください。
メリットとデメリット
メリットとしては、これらのことが上げられます。
- TLS Inspectionに必要なCloudflare証明書を設定することが難しいアプリでは、HTTPプロキシの設定をしないことで、アプリごとのTLS Inspectionを行わないようにできます。特にPC内でDockerを動かしている場合には有用な方法かと思います。
- Google Workspace, Microsoft 365などのテナントロックを強制適用する場合、Proxy設定を強制するとテナントロックされない経路を塞ぐことができ、テナントロックを徹底できます。Proxy設定をMDMで配布して、ユーザからの設定変更を不能にすれば、WARPが切れている間はWebブラウザからインターネットとの通信ができなくなります。これにより、Webブラウザからのテナントロックが徹底できます。
デメリットでは、WARPで実現できていた通信が local proxy では実現できないものが指摘できます。 Cloudflare Zero Trust 経由の通信は local proxy を介したものだけになるため、Proxyを介さないアプリからのDNS参照やTCP, UDPの通信は、直接PCから接続するネットワークの default route に向かいます。よって、Cloudflare WARPのトンネルからCloudflare Zero Trustに送信しません。
これらの点が実現できなくなります。
- HTTPプロキシを介さない通信は、Cloudflare Zero TrustのFirewallルールが適用されず、Cloudflareでログに記録もされません。
- HTTPプロキシを介さない通信は、公衆無線LANなどの信頼性の低いインターネット回線でのWARPトンネルを介しての通信がされなくなります。
- Cloudflareトンネル(cloudflared) などで接続された先のネットワークに設置された、SSHやVNC, RDPなどのホストへ、手元PCのネイティブアプリからそのままでは接続することができません。例えばsshコマンドを使ったリモートのLinuxサーバへの接続が、そのままのコマンドではできなくなります。(対策として Client-side cloudflared をご検討ください)
- Pythonで書かれたツールなど、OSのプロキシ設定を参照するが、TLSのサーバ証明に利用する証明書をOSのキーストアから取得しない実装では、TLS Inspectionによって動作しない場合があります。
また、WARPのOn/Offに連動してOSのProxy設定を変更するような機能は実装されていません。そのため「WARPがOffのときにはインターネットに直接通信する」といった構成には対応できません。