
CloudFlareを利用してゼロトラストアクセスを30分で実現!
※ヘッダー画像はAdobe Fireflyで生成したものです。
Outline
CloudFlareとは(Tunnel,Accessの紹介)
CloudFlare TunnelとAccessを利用するわけ
ゼロトラストを採用する理由(当団体のケース)
CloudFlaredをサーバに実装
CloudFlare の活用例を紹介
Author
学生団体Keisei 副代表 @negishi_tako
たこ系エンジニアやってます。

1. CloudFlareとは
Cloudflareは、世界最大級のネットワークの一つです。今日、ビジネス、非営利団体、ブロガー、およびインターネットプレゼンスを持つ人は、Cloudflareのもたらす恩恵でより速く安全なWebサイトとアプリを利用できます。
CloudFlareの基本的なサービスは以下の通りです。
CDNを利用したキャッシュ配信
DDos攻撃対策
ボット対策
SSL
DNS
これらサービスはドメインのネームサーバをCloudFlareに設定することで恩恵を受けることができます。(無料のものも多い。)
2. CloudFlare TunnelとAccessを利用するわけ
i. グローバルIPアドレスが不要
Cloudflare Tunnelは、インフラストラクチャの種類を問わず、アプリケーショントラフィックをすばやく安全にし暗号化できるトンネリングソフトウェアです。これにより、WebサーバーのIPアドレスを秘匿し、直接攻撃をブロックしつつ、優れたアプリケーションの配信を続けることができます。

重要な点はTunnelを使用することで、サーバが直接インターネットに公開されないことです。よってグローバルIPが不要です。
さらに、インターネットからサーバにアクセスする際には、名前解決がCloudFlareのDNSで行われ(CNAMEで自動登録)ます。これによってCloudFlareの恩恵を受けることができます。
CDNを利用したキャッシュ配信
DDos攻撃対策
ボット対策
SSL
DNS
ii. ゼロトラストの導入が容易
上に類似するサービスにはngrokなどがありますが、ゼロトラストを簡単に導入できるのはCloudFlareのメリットです。
CloudFlare TunnelとAccessはZero Trustサービスでまとめられており、簡単にゼロトラストが導入可能です。導入後はメールアドレスを利用した認証に加え、GoogleやOktaも利用した認証が可能です。

3. ゼロトラストを採用している理由
※半分広告、半分利用ケースの紹介
当団体では、ADS-Bを受信して自分たちだけの航空機マップをつくるプロジェクトを行っています。詳しくは別記事のnoteをご覧ください。
ラズパイで作成された受信機はすべて、EC2でホストしたWireGuard VPN(記事執筆予定)に接続することでデータの集約、Grafana,Prometheusでの監視(記事執筆予定)を実現しています。
そこで課題となるのが、(札幌にあるラズパイの航空機マップやGrafanaダッシュボードなど)のグローバルIPをもたないホストに、Keiseiメンバーが安全にアクセスできるようにすることです。
ここで、メンバー全員のモバイル端末をVPNに接続させるのはコストの増加や、鍵の漏洩リスク、権限の管理など煩雑なセキュリティ対策が求められます。
ここで利用したのがCloudFlare Tunnnel / Access です。これによって、メンバーがどこにいても、VPNに接続する必要なしに、航空機マップやGrafanaダッシュボードとの暗号化された安全な通信が実現できます。
4. CloudFlaredをサーバに実装
それではサーバにCloudFlaredを実装します!!
今回はEC2 Ubuntu(Debian系ですね) に導入します。
i. https://www.cloudflare.com/ja-jp/ よりサインアップ
ii. ドメインを登録
iii. ドメインのネームサーバを変更
iv. Zero Trustにサインアップ
v. Tunnel作成
vi. CloudFlaredインストール
vi. HOSTNAME設定
vii. Access設定
デバッグ録
i~iii. 他の記事を参照して下さい。
iv. Zero Trustにサインアップ
CLoudFlareダッシュボードを開き、ZeroTrustを起動します。

v. Tunnel作成
起動したら既存のアカウントで継続してNetworkからTunnelsを選択します。

Create Tunnelを作成ボタンから、CloudFlaredを選択し、適当なトンネル名を入力して、トンネルを作成します。

vi. CloudFlaredインストール
Debian / 64bitを選択します。基本的にはそのコマンドを公開したいホスト上で実行するだけで接続が完了します。
$ sudo apt update
$ sudo apt upgrade
$ curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
$ sudo dpkg -i cloudflared.deb
$ sudo cloudflared service install {hogehoge}
$ cloudflared tunnel login #表示されたリンクをコピーし、CloudFlareにログインしたデバイスでアクセスし、ドメインを選択して承認する。
$ sudo systemctl status cloudflared
$ sudo systemctl enable cloudflared
(armhf,32bitデバイス、ラズパイ2Bなどを利用している方はデバッグ録へ)
vii. HOSTNAME設定
Public Hostnameを選択し、Add a public hostnameを押します。

サブドメイン、またはパスを自由に設定し、表示するホストを設定します。localhost:PortまたはIPaddress:Portの形で指定します。
(一般のWebサイトを公開する際にはTypeはHTTPでよいです。)

viii. Access設定
AccessからAdd an applicationを押し、Self-hostedを選択します。

アプリケーションのサブドメイン、ドメイン、パスはTunnelで設定したものと同じにします。アプリケーションネームは適当に決めます。
それ以外の設定はスルーして大丈夫です。

Nextを押したら、ポリシーの設定が出てくるのでポリシーネームを適当に決め、ActionをAllowに設定。Cofigure rulesでログインするために必要な情報を定義します。

Nextを押すと、CORSの設定とCookieの設定が出てきます。この辺りはサイトの特性によるのですが、一般的なWebアプリやWebページであれば、Cookieの設定は以下の通りで良いかと思います。

実際にサイトにアクセスすると以下のような画面が表示されると思います。メールアドレスを入力することでPINが届きます。そのPINを入力することで、サイトにアクセスできるはずです。

デバッグ録
ラズパイ2Bにインストールした際に、CloudFlareでDebian-arm-32bitを指定し、インストールするとdpkg errorが出ました。これはおそらくパッケージがARMv7向けであることが原因だと考えられます。ラズパイ2Bはarmhfをサポートしていますから、armhf.debをGithubからとってきてあげる必要があります。
$ curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-armhf.deb
5. CloudFlareの活用例を紹介
当団体のADS-Bネットワークでの活用例はご紹介しましたがそれ以外の著者の個人的な活用方法もご紹介します。
自宅サーバでホストしているブログ
集合住宅でグローバルIPがないためCloudFlaredを利用しています。こちらはCloudFlareのWAF,SSLも利用することで安全性を高めています。
自宅サーバでホストしている監視ダッシュボード
自宅サーバについてもGrafanaでダッシュボードを作成していて、集合住宅のためグローバルIPがない、かつVPNサーバの設置はランニングコストがかかるため、CloudFlaredを使用しています。
断念したケース 自宅でのメールサーバのホスト
Keiseiのメールサーバ構築でのCloudFlaredの利用はポート開放、プロトコルなどを考慮して、受信はCloudFlareのMail Forward、送信にはsmtp.gmail.comを利用した方法をとりました。(別記事執筆予定)
以上、CloudFlareの回し者のようになってしまいましたがCloudFlare Tunnel/Accessの紹介でした。簡単に認証を設定したい場合やグローバルIPがない場合、固定IPを利用するために費用がかかる場合に検討してはいかがでしょうか!
参考
https://www.cloudflare.com/ja-jp/learning/
https://ngstk.jp/2024/09/08/cloudflareでゼロトラストでサーバ公開/
↑個人ブログでも同じような内容を扱ってるので良ければご覧ください。