見出し画像

CloudFlareを利用してゼロトラストアクセスを30分で実現!

※ヘッダー画像はAdobe Fireflyで生成したものです。

Outline

  • CloudFlareとは(Tunnel,Accessの紹介)

  • CloudFlare TunnelとAccessを利用するわけ

  • ゼロトラストを採用する理由(当団体のケース)

  • CloudFlaredをサーバに実装

  • CloudFlare の活用例を紹介

Author

学生団体Keisei 副代表 @negishi_tako
たこ系エンジニアやってます。

1. CloudFlareとは

Cloudflareは、世界最大級のネットワークの一つです。今日、ビジネス、非営利団体、ブロガー、およびインターネットプレゼンスを持つ人は、Cloudflareのもたらす恩恵でより速く安全なWebサイトとアプリを利用できます。

www.cloudflare.com/ja-jp/learning/what-is-cloudflare/

CloudFlareの基本的なサービスは以下の通りです。

  • CDNを利用したキャッシュ配信

  • DDos攻撃対策

  • ボット対策

  • SSL

  • DNS

これらサービスはドメインのネームサーバをCloudFlareに設定することで恩恵を受けることができます。(無料のものも多い。)

2. CloudFlare TunnelとAccessを利用するわけ

i. グローバルIPアドレスが不要

Cloudflare Tunnelは、インフラストラクチャの種類を問わず、アプリケーショントラフィックをすばやく安全にし暗号化できるトンネリングソフトウェアです。これにより、WebサーバーのIPアドレスを秘匿し、直接攻撃をブロックしつつ、優れたアプリケーションの配信を続けることができます。

www.cloudflare.com/ja-jp/products/tunnel/
CloudFlareが紹介しているTunnelのしくみ・メリット

重要な点はTunnelを使用することで、サーバが直接インターネットに公開されないことです。よってグローバルIPが不要です。

さらに、インターネットからサーバにアクセスする際には、名前解決がCloudFlareのDNSで行われ(CNAMEで自動登録)ます。これによってCloudFlareの恩恵を受けることができます。

  • CDNを利用したキャッシュ配信

  • DDos攻撃対策

  • ボット対策

  • SSL

  • DNS

ii. ゼロトラストの導入が容易

上に類似するサービスにはngrokなどがありますが、ゼロトラストを簡単に導入できるのはCloudFlareのメリットです。

CloudFlare TunnelとAccessはZero Trustサービスでまとめられており、簡単にゼロトラストが導入可能です。導入後はメールアドレスを利用した認証に加え、GoogleやOktaも利用した認証が可能です。

CloudFlareが紹介しているAccessのしくみ・メリット

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を起動します。

ドメインを選択した状態からAccessを選択した画面

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を押します。

Tunnelを選択した状態でPublic Hostnameを選択します。

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

アプリを公開するURL、公開するホストのポートなどを指定します。

viii. Access設定

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

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

セッションの有効期間も指定できます。

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

これでexample@ngstk.jpまたは@keisei11.comで終わるEmailでログインが可能になります。

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

Same Site AttributeはLaxにすることで遷移先でもログイン状態を保つことができます。

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

Accessで設定したアプリ名も表示されます。

デバッグ録

ラズパイ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でゼロトラストでサーバ公開/

↑個人ブログでも同じような内容を扱ってるので良ければご覧ください。


いいなと思ったら応援しよう!