プロキシサーバとしてAzure Firewallを使う
Azure Firewallをインターネットプロキシとして利用する
こんにちは、今日はAzure FirewallをAzure上でインターネットプロキシとして利用する際の構成と注意点について説明します。
「VM等のリソースがインターネットに接続する際のプロキシサーバを作りたい!!」
そんな声があった場合はAzureFirewall(以下AzureFW)が選択肢の1つになります。
AzureFWはインターネットに出ていく際のNATはもちろん、VM等の送信元がAzureFW経由で接続できるURLを限定するルールを設定し宛先をフィルタリングすることができます。
構成図
インターネットプロキシとしてAzureFW利用する構成は下記です。
この構成を理解するのが意外に難しいんですよね…
- サブネットに関連付けられたリソースの整理
- NSG:VMへの受信、VMからの送信トラフィックを制御するFW機能を持ったリソース
- この構成ではVMからインターネットへの送信を許可する役割
- ルートテーブル:ネットワークトラフィックをどの方向に送るかを決定するマップのようなもの
- この構成ではVMからのインターネット向けの通信をAzureFWを経由するように導く役割
- NSG:VMへの受信、VMからの送信トラフィックを制御するFW機能を持ったリソース
VMがAzureFirewallを経由してインターネットにアクセスするまでの経路
上記の構成図をふまえてVMがインターネット上に公開されたURLにアクセスする経路は下記です
- VMが存在するサブネットに関連付けられたNSGのルールで宛先へのアクセスが許可済か評価される
- 1で許可済の場合、VMが存在するサブネットに関連付けられたルートテーブル内ルートに沿ってAzureFWへ通信を曲げる
- AzureFW内のルールで宛先へのアクセスが許可済か評価される
- 3で許可済の場合は宛先(インターネット上で公開されたURL)にアクセスできる
下記の図のように通信がNSG、ルートテーブル、AzureFWに道を聞きながら進んでいくようなイメージです
プロキシ構成の作成手順
実際にこの構成を作成するための手順を紹介します。VMとサブネットに関連付けられているNSGは構築済みの前提です。
STEP1 AzureFWを作成
- 仮想ネットワーク内に「AzureFirewallSubnet 」を作成する
- AzureFWをデプロイするサブネットを作成します
- サブネット名は「AzureFirewallSubnet 」固定なので注意
- パブリックIPを作成する
- AzureFWを経由してインターネット通信する際のNATに利用するパブリックIPアドレスを作成します
- 手順は下記公式ドキュメント参照
- AzureFWを作成
- デプロイサブネットに1で作成したサブネット、パブリックIPに3で作成したパブリックIPを
- その他リージョンやリソースグループを選択してデプロイ
- 詳細手順は下記公式ドキュメント参照
- ファイアウォールルールを設定
- VMからインターネット上のURLにアクセスを許可するルールを設定します
- 下記のドキュメントには例として「www.google.com」へのアクセスを許可するルールの設定方法が紹介されています
- 上図の構成の場合はこのようなルールを入れるイメージです
設定項目 | 値 |
---|---|
名前 | App-Coll01 |
優先度 | 200 |
規則コレクション アクション | 許可 |
ルールの名前 | Allow-Google |
送信元の種類 | IP アドレス |
送信元 | 10.0.1.0/24 |
プロトコル:ポート | http, https |
送信先の種類 | FQDN |
送信先 | www.google.com |
STEP2 ルートテーブルの作成
Azure Portalにログインし、ネットワークのセクションから「ルートテーブル」を選択します。そして、「新規ルートテーブルの作成」をクリックします。
- GUI手順
基本的にはルートテーブル名、リソースグループ名、リージョンを指定するのみなのでサクっと作成できます
- AzureCLI手順
- 名前やリソースグループは、適宜変更してくださいね!
az network route-table create --name MyRouteTable --resource-group MyResourceGroup --location japaneast
STEP3 ルートテーブルをサブネットへの関連付け・ルート設定
- サブネットにSTEP2で作成したルートテーブルを関連付ける
- GUI手順
- サブネットの編集画面から作成したルートテーブルを選択して保存
- Azure CLI手順
az network vnet subnet update --name Subnet1 --vnet-name MyVNet --resource-group MyResourceGroup --route-table MyRouteTable
- ルートテーブルにAzureFWを経由するためのルールを追加
ルートテーブルに実際のルートを追加します。
このルートでサブネット内のリソースの送信トラフィックをAzure Firewallに送るように指定します
- GUI手順
- ルートテーブルで[ルート] 、 [追加] の順に選択して後述の「ルートの設定内容」を入力して保存
- Azure CLI手順
az network route-table route create --name fw-dg --resource-group MyResourceGroup --route-table-name MyRouteTable --address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address <AzureFirewallPrivateIP>
- ルートの設定内容
設定項目 | 値 |
---|---|
ルート名 | fw-dg |
アドレス プレフィックス | 0.0.0.0/0 |
ネクストホップの種類 | 仮想アプライアンス |
ネクストホップアドレス | ファイアウォールのプライベートIPアドレス (上記構成図では10.0.2.1) |
アドレスプレフィックスとして指定している「0.0.0.0/0」はすべての宛先を指します。
ネクストホップの種類はどこに通信を向けたい先の種類を指定してます。どこかを経由したい場合は「仮想アプライアンス」を、インターネットに直接出たい場合は「Internet」を選択します。
ネクストホップの種類として「仮想アプライアンス」を選択した場合は経由先の仮想アプライアンスのIPアドレス(この構成の場合はAzureFWのIPアドレス)をネクストホップアドレス指定します。
つまり、上記の設定の場合、サブネットの内のリソースから送信される通信はすべて、AzureFWを経由するようにルートを指定しています。
※厳密にいうとすべてではないのですが、それはまたの機会に解説します。
STEP4 NSGの設定追加
VM→AzureFWにアクセスする際はVMのプライベート→AzureFWのプライベートIPへのアクセスになるのため
VMのサブネットに関連付けられたNSGで「VMのプライベートIP→AzureFWのプライベートIP」の送信を許可するOutboundルールだけ入れておけばいいや…と思いがちですがそれは誤りです!!
- 追加するルールイメージ
方向 | プロトコル | ソース | 宛先 | ポート | アクション |
---|---|---|---|---|---|
Outbound | Any | VirtualNetwork | Internet | Any | Allow |
まとめ
インターネットプロキシとしてAzureFを利用する際の基本の構成図から引っ掛かりポイントなどをまとめてみました。
「あれ!なんかAzureFWが経由できてないぞ」というトラブルが発生した時のよくあるのがNSGの開放漏れ、ルートテーブルのサブネット関連付け漏れ、ルートの設定漏れなどです。皆さんの参考になったら幸いです
雑談…ChatGPTに手伝ってもらってたりはするけど…こだわりすぎて記事公開に時間がかかる&深夜になるのどうにかしたいなー(笑)
Discussion