前回までで、リバースプロキシを構成しました。
Azure 上ではNSG に守られていますが、オンプレ流にファイアウォールを立ててみます。
※便宜上リバースプロキシと言ってますが、Azure Firewall の機能にフォーカスして書きます。
構成
新しくVNet を追加してAzure Firewall を設置して、リバプロのVNet とは別のVNet に設置します。
Azure Firewall のデプロイ
Firewall に付随して必要なリソースはパブリックIP (と仮想ネットワーク、サブネット)です。
Basic SKU を使う場合は、追加で管理用のパブリックIP アドレスが必要となります。適当に作りました。今回は使ってません。
デプロイには5分程度かかりました。
Firewall のDNAT ルール追加
Firewall を介してワークロード(今回ならリバプロ)に接続するにはDNAT(宛先NAT)が必要です。
Firewall と同時にデプロイされているFirewall Policy で設定できます。
設定前に、Firewall に紐づいたパブリックIP アドレスをメモっておきます。Firewall の「設定」>「パブリックIP構成」で見れます。
こちらはDNAT の設定。Firewall Policy から、「DNAT規則」>「規則コレクションの追加」です。
リバースプロキシに自分の家PC からつなぐ想定で、設定した項目はこんな感じです。"Port" については22 でいいのかしら。Teraterm を使います。
ルールのデプロイにも数分かかりました。
項目 | 内容 |
---|---|
Rule name | revpro |
Source | 自分の家PC のパブリックIP |
Port | 22 |
Destination | Firewall のパブリックIP(メモしたもの) |
Translated Address | 10.1.0.4 (リバプロのプライベートIP) |
Translated Port | 22 |
Firewall を介してリバプロに接続
Teraterm で、Firewall のパブリックIP に向けてSSH をすると接続できました。
※Firewall とリバプロが別の仮想ネットワークにいるので、仮想ネットワークピアリングをしてください。
tshark でパケットキャプチャしてみます。
Capturing on 'eth0'
1 0.000000000 10.0.1.8 → 10.1.0.4 TCP 60 51942 → 22 [ACK] Seq=1 Ack=1 Win=251 Len=0
2 0.465985279 10.1.0.4 → 10.0.1.8 SSH 202 Server: Encrypted packet (len=148)
3 0.526023202 10.0.1.8 → 10.1.0.4 TCP 60 51942 → 22 [ACK] Seq=1 Ack=149 Win=255 Len=0
4 0.977897770 10.1.0.4 → 10.0.1.8 SSH 186 Server: Encrypted packet (len=132)
5 0.977939769 10.1.0.4 → 10.0.1.8 SSH 202 Server: Encrypted packet (len=148)
6 0.987029073 10.0.1.8 → 10.1.0.4 TCP 60 51942 → 22 [ACK] Seq=1 Ack=429 Win=254 Len=0
7 1.489965502 10.1.0.4 → 10.0.1.8 SSH 186 Server: Encrypted packet (len=132)
8 1.490025575 10.1.0.4 → 10.0.1.8 SSH 298 Server: Encrypted packet (len=244)
9 1.498536804 10.0.1.8 → 10.1.0.4 TCP 60 51942 → 22 [ACK] Seq=1 Ack=805 Win=253 Len=0
10 2.001904621 10.1.0.4 → 10.0.1.8 SSH 186 Server: Encrypted packet (len=132)
11 2.001940881 10.1.0.4 → 10.0.1.8 SSH 298 Server: Encrypted packet (len=244)
12 2.011285053 10.0.1.8 → 10.1.0.4 TCP 60 51942 → 22 [ACK] Seq=1 Ack=1181 Win=251 Len=0
13 2.513773676 10.1.0.4 → 10.0.1.8 SSH 186 Server: Encrypted packet (len=132)
14 2.513799554 10.1.0.4 → 10.0.1.8 SSH 298 Server: Encrypted packet (len=244)
15 2.522775011 10.0.1.8 → 10.1.0.4 TCP 60 51942 → 22 [ACK] Seq=1 Ack=1557 Win=255 Len=0
16 3.025756842 10.1.0.4 → 10.0.1.8 SSH 186 Server: Encrypted packet (len=132)
17 3.025786326 10.1.0.4 → 10.0.1.8 SSH 298 Server: Encrypted packet (len=244)
18 3.034777495 10.0.1.8 → 10.1.0.4 TCP 60 51942 → 22 [ACK] Seq=1 Ack=1933 Win=254 Len=0
19 3.537904495 10.1.0.4 → 10.0.1.8 SSH 186 Server: Encrypted packet (len=132)
どうやら、リバプロは10.0.1.8 とやり取りしているように見えています。
DNAT で宛先を自動的に変換するルールは明示的に書きましたが、送信元は勝手にAzureFirewallSubnet のアドレスに変換されるように見えます。
ネットワークルール・アプリケーションルールについて
インバウンド通信については、アプリケーションルールが適用されません。必要ならWAF を使うことになります。
今回のように仮想マシンにパブリックIP を付与していない場合、DNAT のルールが必須になるため、(DNATルールにより宛先アドレスなど全部設定できるため)ネットワークルールも明示的に設定する必要はないようです。