9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Firewall による Web Proxy

Last updated at Posted at 2023-04-19

Azure Firewall の Proxy の機能がパブリックプレビューで利用できるようになっています。これは Squid のようなフォワードプロキシの機能を提供するもので、UDR によるルーティングの構成なしで Azure Firewall 経由の通信を実現できるようになります。実際に動作を確認し、留意点等をまとめましたので、ご利用の際はご一読いただければ幸いです。

利用シナリオ

  • UDR を設定せずに Azure Firewall 経由の通信を実現したい。UDR の場合、サブネット単位での設定となるが、プロキシの場合はクライアント単位での制御が可能。
  • Private Link を使わずにオンプレから ER/VPN 経由で Azure PaaS に接続したい (Web トラフィックのみ)

構成図

image.png

前提

  • 構成図内の各リソースを作成済みであること。
  • Azure Firewall Policy を利用していること。
  • Azure Firewall と Firewall Policy は Standard または Premium SKU で作成済みであること。[IDPS 等検証のため Primum で実施] ※ Basic SKU での利用はサポートされていません。

Proxy 設定の追加 (Firewall Policy)

Azure Policy の画面にて明示的なプロキシを有効にします。HTTP, HTTPS のポートは同じポートがつかえないため、別々のポート番号を指定する必要があります。
image.png

Proxy 設定の追加 (クライアント)

クライアントの Windows Server で [コントロールパネル] -> [インターネットオプション] -> [接続] -> [LAN の設定] -> [LAN にプロキシサーバーを使用する] - [詳細設定] の画面にて Azure Firewall の Private IP アドレスと HTTP,HTTPS ポートを設定します。

image.png

動作確認

アプリケーションルールの動作確認 (FQDN)

アプリケーションルールに FQDN を追加します。
image.png

ブラウザで Web サイトにアクセスしてみます。
HTTP, HTTPS の両方のアクセスが Azure Firewall のプロキシ経由となっていることを確認できます。

image.png

image.png

アプリケーションルールの動作確認 (URL)

アプリケーションルールで特定の URL のみを許可します。
image.png

該当する URL は許可されます。
image.png

該当しない URL は拒否されます。
image.png

アプリケーションルールの動作確認 (Category)

Web カテゴリにてスポーツを許可します。
image.png

スポーツと判定されるサイトにアクセスします。
image.png

Proxy 経由でアクセスできました。
image.png

アプリケーションルールの動作確認 (FQDN Tag)

Teams へのアクセスで必要となりそうな、Office365 Skype と Common の FQDN Tag を許可します。
image.png

Web ブラウザで Proxy 経由で Teams にアクセスできました。

image.png

FQDN tag のテスト目的で行いましたが、Proxy 経由での Teams 利用は推奨されていませんのでご留意ください。

アプリケーションルールの動作確認 (IDPS)

TLS 検査有効化 (証明書の自動生成を利用) し、IDPS も拒否モードに変更します。

image.png

アプリケーションルールで TLS 検査を有効化します。
image.png

ModHeader というブラウザの拡張機能を使って、User-Agent を "HaxerMen" に上書きします。公開情報にあるとおり、この User-Agent は拒否されるはずです。
https://learn.microsoft.com/ja-jp/azure/firewall/premium-deploy#to-test-idps-for-http-traffic

image.png

動作確認してみると想定通り、拒否されてタイムアウトとなりました。
image.png

ネットワークルールの動作確認

ネットワークルールでの制御ができるかを確認するため、以下の様なすべての TCP の通信を許可するルールのみを Firewall Policy に作成してみました。アプリケーションルールは削除してあります。

image.png

ネットワークルールでは動作せず、以下の様に Web ページに到達できませんでした。
image.png

パケットを見てみると、TCP の通信として Azure Firewall と TCP 3way handshake は成功してますが、その後、Azure Firewall にてリクエストが拒否されています。
image.png

PAC ファイルの動作確認

以下のように URL が http なら 8080, https なら 8443 というシンプルな PAC ファイル (testproxy.pac) を作成します。

function FindProxyForURL(url) {
    if (shExpMatch(url, "http://*")) {
        return "PROXY 10.10.0.4:8080";
    }
    else if (shExpMatch(url, "https://*")) {
        return "PROXY 10.10.0.4:8443";
    }
    return "DIRECT";
}

PAC ファイルの書き方はこちらが参考になりました。

PAC ファイルを BLOB ストレージにアップロードします。
image.png

Azure Storage のファイアーウォール設定についてですが、すべてのネットワークから有効 にする必要があるようです。

image.png

Firewall Policy にて プロキシの自動構成を有効化し、PAC ファイルの SAS キーを指定し、ポート番号を指定して、適用します。
image.png

クライアントの Proxy 設定画面にて 自動構成スクリプトを使用するhttp://AzureFirewallのプライベートIP:PACファイルポート/[PACファイル名] を指定します。

image.png

ブラウザでアクセスすると Azure Firewall のプロキシ経由で Web サイトにアクセスできました。(FQDN はアプリケーションルールで許可済み)
image.png

診断ログ

診断ログ [AzureDiagnostics] を有効化し、AzureDiagnostics テーブルを確認してみます。

Category : AZFWApplicationRule のログに IsExplicitProxyRequest_b という列で Proxy 利用の有無がわかるようになっているようです。現状、IsTlsInspected_b が true だと Proxy を使ってても false と記録されてしまうようです。今後の改善に期待したいと思います。
image.png

X-Forwarded-For について

以下の様に接続先の Web サイトにてリクエストのの HTTP ヘッダーの情報を確認してみましたが、Azure Firewall にてクライアントの IP アドレス [192.168.0.4] が X-Forwarded-For として付与されておりました。

        GET / HTTP/1.1
        X-FORWARDED-PROTO: http
        X-FORWARDED-PORT: 80
        X-Forwarded-For: 192.168.0.4, 20.27.45.116:1024
        X-Original-URL: /
        Connection: keep-alive
        GET / HTTP/1.1
        X-FORWARDED-PROTO: https
        X-FORWARDED-PORT: 443
        X-Forwarded-For: 192.168.0.4, 20.27.45.116:1024
        X-Original-URL: /
        Connection: keep-alive

留意点

NSG

Proxy の動作として Azure Firewall のプライベート IP との通信のみで外部サイトに接続可能となりますので、意図的に NSG にて Internet へのアウトバウンドを拒否しているような環境でも、Azure Firewall の Private IP が許可されていれば、Internet 上の Web サイトへ接続できてしまう可能性があります。(接続できるかどうかは Azure Firewall のルール次第となります)

以下の様に NSG のアウトバウンド規則で Azure Firewall の Private IP のみを許可している構成においても、外部の Web サイトにアクセス可能であることを確認できました。
image.png

ストレージアカウントのファイアーウォールの設定について

すべてのネットワークから有効 以外の設定として東アジアにストレージアカウントをおいて Azure Firewall のパブリック IP を許可を試してみましたが、Firewall Policy の設定は以下の様なエラーとなりました。
image.png

一度、ファイアーウォールの設定を すべてのネットワークから有効 に変更し、Firewall Policy の Proxy の設定が完了した後に、再度、他のファイアーウォール設定 (選択した仮想ネットワークと IP アドレスから有効/無効) にした場合もアプリケーションルール等の更新で同様のエラーが発生しましたので、恒久的にストレージアカウントのファイアーウォールはすべて公開する必要があるようです。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?