banner
JackYoung

JackYoung

生活、摄影、写作、代码。
github
bilibili
email

使用零信任来内网穿透

イントロダクション#

自宅の NAS は常にパススルーを行い、外出先でビデオなどを視聴できるようにしたいと思っていました。安価なサーバーに出会ったので、試しに購入してみました。しかし、購入したサーバーのメーカーはセキュリティ対策があまり良くなかったため、自分の NAS がしばらくの間クラックされたことにとても心配しました。Cloudflare を使って遊んでいると、ゼロトラストサービスを提供していることに気づき、自分のパススルーのニーズを実現するために CF のサービスを使用することにしました。

ゼロトラストについて#

ゼロトラストネットワークアクセス(Zero Trust Network Access)は、対応するネットワークアクセスモデルであるボーダーネットワークアクセスと対比されます。この信頼モデルでは、信頼できるデバイスやネットワーク、信頼できないデバイスやネットワークを定義し、信頼できるものと信頼できないものの間に壁を築きます。この壁は「ファイアウォール」と呼ばれます。

この信頼モデルには利点があります。一度定義すれば、終身適用できるため、管理が容易です。しかし、同時に問題点も存在します。

まず、もし新たな脅威が現れた場合、ウイルスや攻撃など、これらの脅威はファイアウォールの保護範囲を超える可能性があります。そのため、このファイアウォールは事実上無効になります。次に、攻撃者はソーシャルエンジニアリングなどの方法を使ってファイアウォールを回避し、内部から攻撃を行うことができます。最後に、ボーダートラストモデルでは、信頼されたデバイスからの攻撃を検出することができません。これらの弱点により、ボーダーモデルは現在のネットワークセキュリティの要件に対応するために変更する必要があります。

ゼロトラストネットワークアクセスモデルは、ボーダーモデルの問題を解決するための改良策です。まず、デフォルトでは、ネットワーク内のどのデバイスや領域も信頼してはいけません。これにより、ボーダートラストモデルの同じ信頼ドメインにある内部デバイス同士の攻撃を防ぐことができます。次に、信頼は認証と承認に基づくアクセス制御の信頼体系を通じて行われる必要があります。最後に、信頼は動的であるべきであり、つまり、この承認はアクセスをリアルタイムで評価および変更する必要があります。最初に承認を受け取った後、デバイスを変更すると、その承認は無効になることはありません。

Cloudflare が提供するゼロトラストアクセスは、上記の理論に基づいて形成されたサービスです。特徴:無料!

ゼロトラストの使用方法#

トンネルの作成#

Cloudflare にログインすると、メイン画面の左側に「Zero Trust」という項目が表示されます。
image

初めて使用する場合は、サービスの購入を求められますが、自分で使用する場合は無料版を購入するだけで十分です。
クリックして「Access」->「Tunnels」を選択します。
image

「Create a tunnel」をクリックし、名前を入力して「Save tunnel」をクリックします。新しいページでは、自分のシステムを選択するように指示されます。

image

使いやすさから、後続の操作は Docker を使用して行うことをお勧めします。Docker アイコンをクリックすると、下部に Docker の使用コマンドが表示されます。使用する前に、-d --net=host --name=<yourContainerName>を追加することをお勧めします。すべてのコマンドは次のようになります。

docker run \
-d \
--net=host \
--name=<yourContainerName> \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate \
run --token <your token here>

Docker は必要なイメージを自動的に取得して実行します。正常に実行されると、ページの下部に接続が成功したことが表示されます。Nextをクリックします。
次の画面では、パブリックアクセスの情報を入力します。

image

Domainで使用するドメインを選択し、他の場所で使用されていないSubdomainを入力します。下の「Service」で、内部ネットワークのサービス情報を選択します。例えば、私の内部ネットワークにはウェブサービスがあり、先ほど接続した Docker サーバーを使用しています。このウェブサービスをマッピングしたい場合は、「HTTP」サービスを選択し、「URL」にはlocalhost:80を入力します。ポートは個々のローカル環境に応じて調整してください。入力が完了したら、「Save tunnel」をクリックします。
これで、Cloudflare が提供するサービスを使用して、内部ネットワークのパススルーを完了することができます。設定したドメインにアクセスすると、自分のサービスにアクセスできるようになります。

2 段階認証#

私がパススルーに使用するサーバーの購入を諦めた理由は、ここにあります。サーバーのセキュリティを確認することができませんでしたが、幸いにも Cloudflare は認証サービスも提供しています。
「Zero Trust」ページに戻り、「Access」->「Application」->「Add an application」->「Self-hosted」を選択します。

image

次のページで、自分のアプリケーション名と希望する認証の有効期間(Seesion Duration)を入力し、先ほど作成したサブドメインを入力します。Nextをクリックし、Policyの編集を行います。
Policyに名前を入力し、Seesion Durationを選択し、下にスクロールして、私の図に示すようにメールの 2 段階認証を設定します。

image

ここで注意する必要があるのは、Requireのメールアドレスは、Cloudflare で登録したメールアドレスと一致する必要があります。つまり、私の図で囲まれた場所と同じです(他のメールアドレスを使用したい場合は、メイン画面のManage Account->Membersで他のメールアドレスを追加する必要があります)。ここで私は自分のメールアドレスを入力した後、確認メールがどうしても受け取れなくなりました。
上記の操作が完了したら、その後の設定はデフォルトのままにしておくことができます。Nextをクリックして進めば大丈夫です。
設定が完了したら、自分のドメインにアクセスすると、OTP を取得するためにメールアドレスを入力する必要があることがわかります。

image

Policyで使用したメールアドレスを入力して OTP を取得すると、自分のアプリケーションにアクセスできるようになります。

まとめ#

Cloudflare が提供するゼロトラスト機能は、帯域幅はそれほど大きくありませんが、1080p のビデオを視聴するのに十分です。また、2 段階認証の要件に対してもセキュリティ上のニーズを満たしています。私の資産をある程度保護してくれます。私と同様のニーズを持っている場合、Cloudflare のこのアプリケーションを試してみる価値があります。(比較すると、私の会社の SDP サービスは本当にいくつかの問題があります...)

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。