![見出し画像](https://assets.st-note.com/production/uploads/images/85365569/rectangle_large_type_2_05962dc38551816c741d4a36d60cef52.png?width=1200)
Azure Firewall を使って通信を制限してみよう!
VNet の通信を制御するマネージドネットワークファイアウォールサービスである 『 Azure Firewall 』 ご存じでしょうか?
NSG とは異なるファイアウォールなのです。
マネージド仮想アプライアンスとして提供されるので構築や運用が楽ですし、多様なルールでフィルタリングを実現できます。
Azure Firewall は、Azure で実行されているクラウド ワークロードに最高レベルの脅威保護を提供する、クラウドネイティブでインテリジェントなネットワーク ファイアウォールのセキュリティ サービスです。
セキュリティに対する階層型アプローチとして多層防御を行うことは大変重要ですが、その中の一つの層であるネットワークの部分で大いに関わってくるサービスです。
ということで今回は、ルートテーブルをカスタマイズしてユーザー定義ルート ( UDR ) を作成し、特定のサブネットからインターネットへの通信を Azure Firewall で検査(制御)してみたいと思います。
準備した環境
作成する環境のイメージとしては以下の図になります。
![](https://assets.st-note.com/img/1661301376853-pLsBh7Vlrn.png?width=1200)
Azure Firewall に関連する Bicep での記述
VNet
以下のように三つのサブネットを持つ VNet を作成します。
Jump-SN は踏み台サーバー用サブネットですので、別に用意しなくても良いのですが今回はあえて作成することにしました。もしくはここは、Bastion という選択肢もあります。
Azure Firewall ( 仮想アプライアンス ) がデプロイされるサブネットは、『 AzureFirewallSubnet 』 という名前で専用のものを作成する必要があります。
あと、後述するルートテーブルをワークロードサブネット ( Workload-SN ) に紐づけます。 ( ⭐ )
![](https://assets.st-note.com/img/1661302901914-krJd03VTeH.png?width=1200)
param virtualNetworks_Test_FW_VN_name string = 'Test-FW-VN'
param location string
var azureFWSNaddressPrefix = '10.0.1'
var WorkloadSNaddressPrefix = '10.0.2'
var JumpSNaddressPrefix = '10.0.3'
resource virtualNetworks_Test_FW_VN_name_resource 'Microsoft.Network/virtualNetworks@2018-12-01' = {
name: virtualNetworks_Test_FW_VN_name
location: location
properties: {
provisioningState: 'Succeeded'
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: [
{
name: 'AzureFirewallSubnet'
properties: {
provisioningState: 'Succeeded'
addressPrefix: '${azureFWSNaddressPrefix}.0/24'
delegations: []
}
}
{
name: 'Workload-SN'
properties: {
provisioningState: 'Succeeded'
addressPrefix: '${WorkloadSNaddressPrefix}.0/24'
routeTable: {
id: routeTable.id // ⭐
}
serviceEndpoints: []
delegations: []
}
}
{
name: 'Jump-SN'
properties: {
provisioningState: 'Succeeded'
addressPrefix: '${JumpSNaddressPrefix}.0/24'
serviceEndpoints: []
delegations: []
}
}
]
virtualNetworkPeerings: []
enableDdosProtection: false
enableVmProtection: false
}
}
仮想アプライアンス関連リソース
1️⃣ Azure Firewall ( 仮想アプライアンス ) 用のパブリックIP
2️⃣ Azure Firewall ( 仮想アプライアンス )
というリソースを二つ作成します。
1️⃣ は当然 2️⃣ に紐づけます。
✅ Firewall tier は今回 Standard として、ネットワークルール ( ♠ ) とアプリケーションルール ( ♣ ) を構成します。
♠ では、ポート 53 ( DNS ) の 2つの IPアドレスへの送信アクセスを許可するネットワーク規則を作成します。
なお、Google のパブリックDNSサービスの IPアドレス ( ✨ ) を参照させることにしました。
![](https://assets.st-note.com/img/1661302955583-FXBS1a5XIZ.png?width=1200)
⇩
![](https://assets.st-note.com/img/1661302981548-0RhImSndp7.png?width=1200)
♣ では note のサイト ( 💡 note.com ) への送信アクセスを許可するアプリケーション ルールを作成します。他のサイトへは許可されません。
![](https://assets.st-note.com/img/1661303015656-1fOv5yOQKM.png?width=1200)
⇩
![](https://assets.st-note.com/img/1661303029389-fptpcTd1tO.png?width=1200)
そしてこれらのルールのソースは、ワークロードサブネット ( Workload-SN ) のもの ( 10.0.2.0/24 ) を指定します。
resource fireWallPIP 'Microsoft.Network/publicIPAddresses@2022-01-01' = { // 1️⃣
name: 'Test-FW-PIP'
location: location
sku: {
name: 'Standard'
tier: 'Regional'
}
properties: {
publicIPAddressVersion: 'IPv4'
publicIPAllocationMethod: 'Static'
idleTimeoutInMinutes: 4
}
}
resource fireWall 'Microsoft.Network/azureFirewalls@2022-01-01' = { // 2️⃣
name: 'Test-FW01'
location: location
properties: {
sku: {
name: 'AZFW_VNet'
tier: 'Standard' // ✅
}
threatIntelMode: 'Alert'
additionalProperties: {}
ipConfigurations: [
{
name: 'Test-FW-PIP'
properties: {
publicIPAddress: {
id: fireWallPIP.id
}
subnet: {
id: virtualNetworks_Test_FW_VN_name_resource.properties.subnets[0].id
}
}
}
]
networkRuleCollections: [ // ♠
{
name: 'Net-Coll01'
properties: {
priority: 200
action: {
type: 'Allow'
}
rules: [
{
name: 'AllowDNS'
protocols: [
'UDP'
]
sourceAddresses: [
virtualNetworks_Test_FW_VN_name_resource.properties.subnets[1].properties.addressPrefix
]
destinationAddresses: [ // ✨
'8.8.8.8'
'8.8.4.4'
]
destinationPorts: [
'53'
]
}
]
}
}
]
applicationRuleCollections: [ // ♣
{
name: 'App-Coll01'
properties: {
priority: 200
action: {
type: 'Allow'
}
rules: [
{
name: 'AllowGH'
protocols: [
{
protocolType: 'Http'
port: 80
}
{
protocolType: 'Https'
port: 443
}
]
fqdnTags: []
targetFqdns: [
'note.com' // 💡
]
sourceAddresses: [
virtualNetworks_Test_FW_VN_name_resource.properties.subnets[1].properties.addressPrefix
]
sourceIpGroups: []
}
]
}
}
]
natRuleCollections: []
}
}
ルートテーブル ( UDR )
本来はルートテーブルは Azure ( Microsoft ) によって管理されるためユーザー側は管理しなくて良いですが、今回のような場合にはカスタマイズが必要です。つまりユーザー定義ルート ( UDR ) を作成します。
仮想アプライアンスをデフォルトゲートウェイとするので 👈 のようにしました。
また、前述したとおりワークロードサブネット ( Workload-SN ) に関連付けされています。
resource routeTable 'Microsoft.Network/routeTables@2022-01-01' = {
name: 'FireWall-route'
location: location
properties: {
disableBgpRoutePropagation: false
routes: [
{
name: 'FW-DG' // ユーザー定義ルート
properties: {
addressPrefix: '0.0.0.0/0'
nextHopType: 'VirtualAppliance' // 👈
nextHopIpAddress: '${azureFWSNaddressPrefix}.4' // 👈
hasBgpOverride: false
}
}
]
}
}
![](https://assets.st-note.com/img/1661303084102-4jHZMcLf7P.png?width=1200)
今回定義したルーティングが追加されている事をさらに確認してみます。
既定のインターネットに抜ける通信が無効になり、全てファイアウォールを経由するようになっています。
![](https://assets.st-note.com/img/1661303104934-f4Eu74WygE.png?width=1200)
試してみる
アプリケーションルール ( ♣ ) のとおり note.com ( 💡 ) を表示できるか試してみます。
![](https://assets.st-note.com/img/1661303122274-mrYEhtVQH9.png?width=1200)
はい、ちゃんと表示できました。
では、許可登録のない FQDN ( 今回は例として Azure portal ) を参照しようとすると、もちろん拒否されて表示できませんでした。
![](https://assets.st-note.com/img/1661303131496-1pa7cp6rkr.png?width=1200)
🟠 さいごに 🔚
はい、ということでインターネットへの通信をルールでフィルタリングして制御することができました。
今回の内容はインターネットへの通信でしたが、もちろん別のサブネットへの通信を一旦ファイアウォールで検査するといった使い方もできます。
今後も Azure に関する技術情報やその他の資格試験に関する記事を書いていこうと思いますので、よろしければフォローをお願いします🔆
また、この記事が少しでもタメになった、面白かったという方がいらっしゃいましたら、ぜひ 「 スキ 」 ボタンのクリックをお願いします😋
最後までお読みいただきありがとうございました 😊
▶ 続けて読むのにおススメな記事
▶ おススメ Azure 学習書籍
いいなと思ったら応援しよう!
![MEVIUS(メビウス) @日系IT企業 | マーケターときどきなんちゃってエンジニア](https://assets.st-note.com/production/uploads/images/29753082/profile_42c7ad7753e5ab09162d01e33a1360c3.jpg?width=600&crop=1:1,smart)