従来のVPNが抱える課題
私たちは数十年にわたり従来のVPNに頼ってきましたが、それらは急速にセキュリティ上のリスクとなりつつあります。根本的な欠陥は「フラットなネットワーク」アーキテクチャにあります。ユーザーが一度認証されると、サブネット全体への広範なアクセス権を得てしまうことが多いのです。もし従業員1人のノートPCが侵害されれば、攻撃者は内部サーバー間を容易に横方向へ移動(ラテラルムーブメント)できてしまいます。セキュリティ以外でも、IKEv2証明書の管理や「VPNが遅い」といったチケットへの対応は、ITリソースを常に消耗させます。
100人以上のエンジニアチームにこれを導入した私の経験から言えば、ゼロトラストモデルへの移行は大幅なアップグレードとなります。Cloudflare AccessとWARPを使用することで、ファイアウォールのインバウンドポートを完全に閉じることができます. もはやユーザーが「ネットワーク内にいる」という理由だけで信頼することはありません。代わりに、すべてのリクエストがID、デバイスの健全性、および地理的コンテキストに基づいて検証されます。
ゼロトラストのアーキテクチャ
このセットアップは、同期して動作する3つのコアコンポーネントに依存しています。
- Cloudflare Tunnel (cloudflared): サーバー上で動作する小さなデーモンで、Cloudflareへの暗号化されたアウトバウンドのみの接続を作成します。ルーターのポートフォワーディングをいじる必要はありません。
- Cloudflare Access: オペレーションの頭脳です。「@company.comのメールアドレスを持つユーザーのみがステージング環境にアクセスできる」といったポリシーをここで記述します。
- Cloudflare WARP: エンドユーザー向けの軽量なクライアントアプリです。DNSを処理し、10.0.0.0/8や192.168.1.0/24といった内部IP範囲のトラフィックをルーティングします。
インストール:トンネルのセットアップ
まず、内部サーバーをCloudflareネットワークにブリッジする必要があります。これには cloudflared CLIを使用します。CloudflareのダッシュボードにはGUIによる設定も用意されていますが、自動化やトラブルシューティングにはCLIの方がはるかに高速です。
1. Linuxへのcloudflaredのインストール
DebianまたはUbuntuマシンでは、以下のコマンドを実行して最新のパッケージを取得します。
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
2. 認証とトンネルの作成
ログインコマンドを実行します。ブラウザでCloudflareアカウントを認証するための固有のURLが表示されます。
cloudflared tunnel login
認証されたら、トンネルを作成します。ここでは「production-gateway」と名付けましょう。
cloudflared tunnel create production-gateway
これにより、JSON形式の認証情報ファイルが生成されます。このファイルはマスターキーのように扱ってください。紛失すると接続ができなくなります。
設定:ルーティングとポリシー
トンネルが確立されたら、どのトラフィックをそこへ流すかを定義する必要があります。通常、ウェブアプリ用の「Public Hostnames(公開ホスト名)」か、SSH、RDP、データベース接続などのための「Private Networks(プライベートネットワーク)」の2つの選択肢があります。
プライベートネットワーク・ルーティングの設定
ユーザーが自宅から 192.168.1.50 のような内部IPにアクセスできるようにするには、そのCIDRブロックをトンネル経由でルーティングします。
設定ファイルの作成
config.yml ファイルを作成します。このファイルは cloudflared デーモンの交通整理役として機能し、外部ホスト名を内部サービスにマッピングします。
tunnel: <TUNNEL_ID>
credentials-file: /root/.cloudflared/<TUNNEL_ID>.json
ingress:
- hostname: gitlab.yourcompany.com
service: http://localhost:8080
- hostname: db-ssh.yourcompany.com
service: ssh://localhost:22
- service: http_status:404
再起動後も動作するように、トンネルをシステムサービスとしてインストールします。
sudo cloudflared service install
sudo systemctl start cloudflared
クライアント向けCloudflare WARPのセットアップ
Cloudflare Accessはウェブアプリを完璧に処理しますが、それ以外のすべてにはWARPクライアントが必要です。WARPは、従来のVPNクライアントに代わる現代的で高性能なツールと考えてください。内部ではWireGuardを使用しており、速度と安定性に優れています。
1. Zero Trustダッシュボードの設定
Settings > WARP Client へ移動します。ここで「Device Enrollment(デバイス登録)」ルールを設定する必要があります。Okta、Google Workspace、Microsoft Entra IDなどの企業用SSOに登録を制限することをお勧めします。
2. スプリットトンネルの設定
デフォルトでは、WARPはローカルトラフィックを無視することがあります。内部IP範囲がスプリットトンネルの設定に含まれていることを確認してください。Settings > WARP Client > Device Settings に移動し、192.168.1.0/24 ブロックをインクルージョンリスト(含めるリスト)に追加します。
3. ユーザーへの展開
スタッフはCloudflare from 直接WARPをダウンロードできます。インストール後、「Login with Cloudflare Zero Trust」をクリックしてチーム名を入力するだけです。SSO経由で認証されると、オフィスにいるかのように内部IPにpingを飛ばせるようになります。
検証とモニタリング
まず、ダッシュボードで Tunnel Health ステータスを確認してください。異なるCloudflareデータセンターへの複数の接続があり、「Active」と表示されているはずです。この冗長性により、1つのCloudflareエッジノードがダウンしても接続は維持されます。
接続のテスト
カフェや自宅のネットワークから内部リソースへのアクセスを試してください。公開ホスト名を設定している場合、Cloudflareはログインページを表示します。サインイン後、アプリが即座にロードされるはずです。
プライベートネットワークのテストには、内部IPを使用したシンプルなSSHコマンドを試してください。
ssh [email protected]
ログの確認
Logs > Access セクションは監査人にとって宝の山です。従来のVPNでは通常、ユーザーが接続したことしか分かりません。Cloudflareでは、どのサービスにいつアクセスしたかを正確に把握できます。このきめ細かな可視化により、セキュリティ監査の苦労が大幅に軽減されます。
現場からのベストプラクティス
- MFAの強制: 単純なパスワードに頼らないでください。IDプロバイダー(IdP)を連携させ、ハードウェアキーやプッシュ通知を強制しましょう。
- デバイスポスチャのチェック: ファイアウォールが有効であることや、特定のmacOS/Windowsバージョンを実行していることを接続条件とするポリシーを設定します。
- ローカルDNSフォールバック:
jira.localのような内部名を使用している場合は、WARP設定で「Local Domain Fallback」を構成します。これにより、特定の名前解決を内部DNSサーバーで行うようCloudflareに指示できます。
ゼロトラストへの移行は大きな変化ですが、攻撃対象領域(アタックサーフェス)を劇的に縮小させます。ファイアウォールログの幽霊を追いかけるのをやめ、ユーザーの正体に基づいたアクセス管理を始めましょう。

