🔥

プロキシサーバとしてAzure Firewallを使う

2024/04/03に公開

Azure Firewallをインターネットプロキシとして利用する

こんにちは、今日はAzure FirewallをAzure上でインターネットプロキシとして利用する際の構成と注意点について説明します。

「VM等のリソースがインターネットに接続する際のプロキシサーバを作りたい!!」
そんな声があった場合はAzureFirewall(以下AzureFW)が選択肢の1つになります。
AzureFWはインターネットに出ていく際のNATはもちろん、VM等の送信元がAzureFW経由で接続できるURLを限定するルールを設定し宛先をフィルタリングすることができます。

構成図

インターネットプロキシとしてAzureFW利用する構成は下記です。
この構成を理解するのが意外に難しいんですよね…

  • サブネットに関連付けられたリソースの整理
    • NSG:VMへの受信、VMからの送信トラフィックを制御するFW機能を持ったリソース
      • この構成ではVMからインターネットへの送信を許可する役割
    • ルートテーブル:ネットワークトラフィックをどの方向に送るかを決定するマップのようなもの
      • この構成ではVMからのインターネット向けの通信をAzureFWを経由するように導く役割

VMがAzureFirewallを経由してインターネットにアクセスするまでの経路

上記の構成図をふまえてVMがインターネット上に公開されたURLにアクセスする経路は下記です

  1. VMが存在するサブネットに関連付けられたNSGのルールで宛先へのアクセスが許可済か評価される
  2. 1で許可済の場合、VMが存在するサブネットに関連付けられたルートテーブル内ルートに沿ってAzureFWへ通信を曲げる
  3. AzureFW内のルールで宛先へのアクセスが許可済か評価される
  4. 3で許可済の場合は宛先(インターネット上で公開されたURL)にアクセスできる

下記の図のように通信がNSG、ルートテーブル、AzureFWに道を聞きながら進んでいくようなイメージです

プロキシ構成の作成手順

実際にこの構成を作成するための手順を紹介します。VMとサブネットに関連付けられているNSGは構築済みの前提です。

STEP1 AzureFWを作成

  1. 仮想ネットワーク内に「AzureFirewallSubnet 」を作成する
    • AzureFWをデプロイするサブネットを作成します
    • サブネット名は「AzureFirewallSubnet 」固定なので注意
  2. パブリックIPを作成する
    • AzureFWを経由してインターネット通信する際のNATに利用するパブリックIPアドレスを作成します
    • 手順は下記公式ドキュメント参照

https://learn.microsoft.com/ja-jp/azure/virtual-network/ip-services/create-public-ip-portal?tabs=option-1-create-public-ip-standard

  1. AzureFWを作成
    • デプロイサブネットに1で作成したサブネット、パブリックIPに3で作成したパブリックIPを
    • その他リージョンやリソースグループを選択してデプロイ
    • 詳細手順は下記公式ドキュメント参照

https://learn.microsoft.com/ja-jp/azure/firewall/tutorial-firewall-deploy-portal-policy#deploy-the-firewall-and-policy

  1. ファイアウォールルールを設定
    • VMからインターネット上のURLにアクセスを許可するルールを設定します
    • 下記のドキュメントには例として「www.google.com」へのアクセスを許可するルールの設定方法が紹介されています
    • 上図の構成の場合はこのようなルールを入れるイメージです
設定項目
名前 App-Coll01
優先度 200
規則コレクション アクション 許可
ルールの名前 Allow-Google
送信元の種類 IP アドレス
送信元 10.0.1.0/24
プロトコル:ポート http, https
送信先の種類 FQDN
送信先 www.google.com

https://learn.microsoft.com/ja-jp/azure/firewall/tutorial-firewall-deploy-portal-policy#configure-an-application-rule

STEP2 ルートテーブルの作成

Azure Portalにログインし、ネットワークのセクションから「ルートテーブル」を選択します。そして、「新規ルートテーブルの作成」をクリックします。

  • GUI手順

https://learn.microsoft.com/ja-jp/azure/firewall/tutorial-firewall-deploy-portal-policy#create-a-default-route
基本的にはルートテーブル名、リソースグループ名、リージョンを指定するのみなのでサクっと作成できます

  • AzureCLI手順
    • 名前やリソースグループは、適宜変更してくださいね!
az network route-table create --name MyRouteTable --resource-group MyResourceGroup --location japaneast

STEP3 ルートテーブルをサブネットへの関連付け・ルート設定

  1. サブネットにSTEP2で作成したルートテーブルを関連付ける
  • GUI手順
    • サブネットの編集画面から作成したルートテーブルを選択して保存

https://learn.microsoft.com/ja-jp/azure/firewall/tutorial-firewall-deploy-portal-policy#create-a-default-route

  • Azure CLI手順
az network vnet subnet update --name Subnet1 --vnet-name MyVNet --resource-group MyResourceGroup --route-table MyRouteTable
  1. ルートテーブルに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