アウトバウンド ネットワーク アクセスを制御することは、ネットワーク セキュリティ プラン全体の重要な要素です。 たとえば、Web サイトへのアクセスを制限することができます。 また、アクセスできるアウトバウンドの IP アドレスとポートを制限したい場合があるかもしれません。
Azure ファイアウォールとファイアウォール ポリシーを使用して、Azure サブネットからの送信ネットワーク アクセスを制御できます。 Azure Firewall を使用すると、次の構成を行うことができます。
- アプリケーション ルール: サブネットからアクセスできる完全修飾ドメイン名 (FQDN) を定義します。
- ネットワーク ルール: 送信元アドレス、プロトコル、宛先ポート、送信先アドレスを定義します。
ネットワーク トラフィックは、サブネットの既定ゲートウェイとしてのファイアウォールにルーティングしたときに、構成されているファイアウォール ルールに制約されます。
この記事では、簡単にデプロイできるように、3 つのサブネットを持つ簡略化された単一の仮想ネットワークを作成します。 運用環境のデプロイでは、ファイアウォールが独自の仮想ネットワーク内にある ハブ アンド スポーク モデルを使用します。 ワークロード サーバーは、1 つまたは複数のサブネットを含む同じリージョンのピアリングされた仮想ネットワーク内にあります。
- AzureFirewallSubnet - このサブネットにファイアウォールが存在します。
- Workload-SN - このサブネットにはワークロード サーバーがあります。 このサブネットのネットワーク トラフィックは、ファイアウォールを通過します。
- AzureBastionSubnet - Azure Bastion に使用されるサブネット。これは、ワークロード サーバーへの接続に使用されます。
Azure Bastion の詳細については、「Azure Bastion とは」を参照してください。
重要
時間単位の料金は、送信データの使用量に関係なく、Bastion がデプロイされた時点から発生します。 詳しくは、「価格」および「SKU」を参照してください。 チュートリアルまたはテストの一環で Bastion をデプロイする場合は、使用終了後にこのリソースを削除することをお勧めします。
この記事では、次のことについて説明します。
- テスト ネットワーク環境を設定する
- ファイアウォールをデプロイする
- 既定のルートを作成する
- ファイアウォール ポリシーを作成する
- www.google.com へのアクセスを許可するようにアプリケーション ルールを構成する
- 外部 DNS サーバーへのアクセスを許可するようにネットワーク ルールを構成する
- ファイアウォールをテストする
必要に応じて、 Azure portal を使用してこの手順を完了できます。
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
前提条件
この手順では、PowerShell をローカルで実行する必要があります。 Azure PowerShell モジュールをインストールしておく必要があります。 バージョンを確認するには、Get-Module -ListAvailable Az を実行します。 アップグレードする必要がある場合は、Azure PowerShell モジュールのインストールに関するページを参照してください。 PowerShell のバージョンを確認した後、Connect-AzAccount を実行して Azure との接続を作成します。
ネットワークのセットアップ
最初に、ファイアウォールをデプロイするために必要なリソースを含めるリソース グループを作成します。 次に、仮想ネットワーク、サブネット、およびテスト サーバーを作成します。
リソース グループを作成する
New-AzResourceGroup を使用して、デプロイ用のリソース グループを作成します。
New-AzResourceGroup -Name Test-FW-RG -Location "East US"
仮想ネットワークと Azure Bastion ホストを作成する
この仮想ネットワークには 3 つのサブネットが含まれています。 New-AzVirtualNetworkSubnetConfig を使用して定義します。
注意
AzureFirewallSubnet サブネットのサイズは /26 です。 サブネットのサイズの詳細については、「Azure Firewall に関する FAQ」を参照してください。
$Bastionsub = New-AzVirtualNetworkSubnetConfig `
-Name AzureBastionSubnet `
-AddressPrefix 10.0.0.0/27
$FWsub = New-AzVirtualNetworkSubnetConfig `
-Name AzureFirewallSubnet `
-AddressPrefix 10.0.1.0/26
$Worksub = New-AzVirtualNetworkSubnetConfig `
-Name Workload-SN `
-AddressPrefix 10.0.2.0/24
New-AzVirtualNetwork を使用して仮想ネットワークを作成します。
$testVnet = New-AzVirtualNetwork `
-Name Test-FW-VN `
-ResourceGroupName Test-FW-RG `
-Location "East US" `
-AddressPrefix 10.0.0.0/16 `
-Subnet $Bastionsub, $FWsub, $Worksub
Azure Bastion ホストのパブリック IP アドレスを作成します。
New-AzPublicIpAddress を使用して、Bastion ホストの静的パブリック IP アドレスを作成します。
$publicip = New-AzPublicIpAddress `
-ResourceGroupName Test-FW-RG `
-Location "East US" `
-Name Bastion-pip `
-AllocationMethod Static `
-Sku Standard
Azure Bastion ホストを作成する
New-AzBastion を使用して Bastion ホストを作成します。
New-AzBastion `
-ResourceGroupName Test-FW-RG `
-Name Bastion-01 `
-PublicIpAddress $publicip `
-VirtualNetwork $testVnet
仮想マシンの作成
New-AzVM を使用してワークロード仮想マシンを作成します。 メッセージが表示されたら、ユーザー名とパスワードを入力します。
# Create the NIC
$wsn = Get-AzVirtualNetworkSubnetConfig `
-Name Workload-SN `
-VirtualNetwork $testVnet
$NIC01 = New-AzNetworkInterface `
-Name Srv-Work `
-ResourceGroupName Test-FW-RG `
-Location "East US" `
-Subnet $wsn
# Define the virtual machine
$VirtualMachine = New-AzVMConfig `
-VMName Srv-Work `
-VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem `
-VM $VirtualMachine `
-Windows `
-ComputerName Srv-Work `
-ProvisionVMAgent `
-EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface `
-VM $VirtualMachine `
-Id $NIC01.Id
$VirtualMachine = Set-AzVMSourceImage `
-VM $VirtualMachine `
-PublisherName 'MicrosoftWindowsServer' `
-Offer 'WindowsServer' `
-Skus '2019-Datacenter' `
-Version latest
# Create the virtual machine
New-AzVM `
-ResourceGroupName Test-FW-RG `
-Location "East US" `
-VM $VirtualMachine `
-Verbose
ファイアウォール ポリシーを作成する
New-AzFirewallPolicy を使用してファイアウォール ポリシーを作成します。
$fwpol = New-AzFirewallPolicy `
-Name fw-pol `
-ResourceGroupName Test-FW-RG `
-Location "East US"
ファイアウォール ポリシーのアプリケーション ルールを構成する
New-AzFirewallPolicyApplicationRule と New-AzFirewallPolicyFilterRuleCollection を使用して、www.google.comへの送信アクセスを許可するアプリケーション ルールを作成します。
$RCGroup = New-AzFirewallPolicyRuleCollectionGroup `
-Name AppRCGroup `
-Priority 100 `
-FirewallPolicyObject $fwpol
$apprule1 = New-AzFirewallPolicyApplicationRule `
-Name Allow-google `
-SourceAddress "10.0.2.0/24" `
-Protocol "http:80","https:443" `
-TargetFqdn www.google.com
$appcoll1 = New-AzFirewallPolicyFilterRuleCollection `
-Name App-coll01 `
-Priority 100 `
-Rule $apprule1 `
-ActionType "Allow"
Set-AzFirewallPolicyRuleCollectionGroup `
-Name $RCGroup.Name `
-Priority 100 `
-RuleCollection $appcoll1 `
-FirewallPolicyObject $fwpol
Azure Firewall には、既定で許可されるインフラストラクチャ FQDN 用の組み込みのルール コレクションが含まれています。 これらの FQDN はプラットフォームに固有であり、他の目的には使用できません。 詳細については、インフラストラクチャ FQDN に関する記事を参照してください。
ファイアウォール ポリシーのネットワーク ルールを構成する
New-AzFirewallPolicyNetworkRule と New-AzFirewallPolicyFilterRuleCollection を使用して、ポート 53 (DNS) で 2 つの IP アドレスへの送信アクセスを許可するネットワーク 規則を作成します。
$RCGroup = New-AzFirewallPolicyRuleCollectionGroup `
-Name NetRCGroup `
-Priority 200 `
-FirewallPolicyObject $fwpol
$netrule1 = New-AzFirewallPolicyNetworkRule `
-Name Allow-DNS `
-Protocol UDP `
-SourceAddress 10.0.2.0/24 `
-DestinationAddress 209.244.0.3,209.244.0.4 `
-DestinationPort 53
$netcoll1 = New-AzFirewallPolicyFilterRuleCollection `
-Name Net-coll01 `
-Priority 200 `
-Rule $netrule1 `
-ActionType "Allow"
Set-AzFirewallPolicyRuleCollectionGroup `
-Name $RCGroup.Name `
-Priority 200 `
-RuleCollection $netcoll1 `
-FirewallPolicyObject $fwpol
ファイアウォールをデプロイする
New-AzPublicIpAddress と New-AzFirewall を使用して、仮想ネットワークにファイアウォールをデプロイします。
# Get a Public IP for the firewall
$FWpip = New-AzPublicIpAddress `
-Name "fw-pip" `
-ResourceGroupName Test-FW-RG `
-Location "East US" `
-AllocationMethod Static `
-Sku Standard
# Create the firewall
$Azfw = New-AzFirewall `
-Name Test-FW01 `
-ResourceGroupName Test-FW-RG `
-Location "East US" `
-VirtualNetwork $testVnet `
-PublicIpAddress $FWpip `
-FirewallPolicyId $fwpol.Id
# Save the firewall private IP address for future use
$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP
プライベート IP アドレスをメモします。 後で既定のルートを作成する際に、これを使用します。
既定のルートを作成する
New-AzRouteTable と Add-AzRouteConfig を使用して、ファイアウォールを指す既定のルートを含むルート テーブルを作成し、それをワークロード サブネットに関連付けます。
$routeTableDG = New-AzRouteTable `
-Name Firewall-rt-table `
-ResourceGroupName Test-FW-RG `
-Location "East US" `
-DisableBgpRoutePropagation
# Create a route
Add-AzRouteConfig `
-Name "DG-Route" `
-RouteTable $routeTableDG `
-AddressPrefix 0.0.0.0/0 `
-NextHopType "VirtualAppliance" `
-NextHopIpAddress $AzfwPrivateIP `
| Set-AzRouteTable
# Associate the route table to the subnet
Set-AzVirtualNetworkSubnetConfig `
-VirtualNetwork $testVnet `
-Name Workload-SN `
-AddressPrefix 10.0.2.0/24 `
-RouteTable $routeTableDG | Set-AzVirtualNetwork
Srv-Work ネットワーク インターフェイスのプライマリおよびセカンダリ DNS アドレスを変更する
この手順のテスト目的で、サーバーのプライマリおよびセカンダリ DNS アドレスを構成します。 この構成は、一般的な Azure Firewall 要件ではありません。
$NIC01.DnsSettings.DnsServers.Add("209.244.0.3")
$NIC01.DnsSettings.DnsServers.Add("209.244.0.4")
$NIC01 | Set-AzNetworkInterface
ファイアウォールをテストする
今度は、ファイアウォールをテストして、想定したように機能することを確認します。
Bastion を使用して Srv-Work 仮想マシンに接続し、サインインします。
SRV-Work で PowerShell ウィンドウを開き、次のコマンドを実行します。
nslookup www.google.com nslookup www.microsoft.comどちらのコマンドも回答を返し、DNS クエリがファイアウォールを通過することを示します。
次のコマンドを実行します。
Invoke-WebRequest -Uri https://www.google.com Invoke-WebRequest -Uri https://www.microsoft.comwww.google.com要求は成功し、www.microsoft.com要求は失敗します。 この結果は、ファイアウォール規則が想定どおりに動作していることを示しています。
これで、ファイアウォール ポリシー規則が機能していることを確認しました。
- 構成された外部 DNS サーバーを使用して、DNS 名を解決できます。
- 1 つの許可された FQDN は参照できますが、それ以外は参照できません。
リソースをクリーンアップする
さらにテストするためにファイアウォール リソースを保持できます。 不要になった場合は、 Test-FW-RG リソース グループを削除して、ファイアウォール関連のすべてのリソースを削除します。
Remove-AzResourceGroup -Name Test-FW-RG