アウトバウンド ネットワーク アクセスを制御することは、ネットワーク セキュリティ プラン全体の重要な要素です。 たとえば、Web サイトへのアクセスを制限することができます。 また、アクセスできるアウトバウンドの IP アドレスとポートを制限したい場合があるかもしれません。
Azure Firewall を使用して、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
$SecurePassword = ConvertTo-SecureString "<choose a password>" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ("<choose a user name>", $SecurePassword);
$VirtualMachine = New-AzVMConfig `
-VMName Srv-Work `
-VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem `
-VM $VirtualMachine `
-Windows `
-ComputerName Srv-Work `
-ProvisionVMAgent `
-EnableAutoUpdate `
-Credential $Credential
$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
注意
パブリック IP が割り当てられていない VM、または内部の Basic Azure Load Balancer のバックエンド プール内にある VM に対しては、Azure によって既定のアウトバウンド アクセス IP が提供されます。 デフォルト送信アクセス IP メカニズムは、構成できないアウトバウンド IP アドレスを提供します。
次のいずれかのイベントが発生すると、既定のアウトバウンド アクセス IP は無効になります。
- パブリック IP アドレスが VM に割り当てられます。
- アウトバウンド規則の有無にかかわらず、VM は標準ロード バランサーのバックエンド プール内に配置されます。
- Azure NAT Gateway リソースが VM のサブネットに割り当てられている。
フレキシブル オーケストレーション モードの仮想マシン スケール セットによって作成された VM には、既定のアウトバウンド アクセスがありません。
Azure のアウトバウンド接続の詳細については、「Azure での既定の送信アクセス」および「送信接続での送信元ネットワーク アドレス変換 (SNAT)を使用する」を参照してください。
ファイアウォールをデプロイする
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
# 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
アプリケーション ルールを構成する
New-AzFirewallApplicationRule と New-AzFirewallApplicationRuleCollection を使用して、www.google.comへの送信アクセスを許可するアプリケーション ルールを作成します。
$AppRule1 = New-AzFirewallApplicationRule `
-Name Allow-Google `
-SourceAddress 10.0.2.0/24 `
-Protocol http, https `
-TargetFqdn www.google.com
$AppRuleCollection = New-AzFirewallApplicationRuleCollection `
-Name App-Coll01 `
-Priority 200 `
-ActionType Allow `
-Rule $AppRule1
$Azfw.ApplicationRuleCollections.Add($AppRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw
Azure Firewall には、既定で許可されるインフラストラクチャ FQDN 用の組み込みのルール コレクションが含まれています。 これらの FQDN はプラットフォームに固有であり、他の目的には使用できません。 詳細については、インフラストラクチャ FQDN に関する記事を参照してください。
ネットワーク ルールを構成する
New-AzFirewallNetworkRule と New-AzFirewallNetworkRuleCollection を使用して、ポート 53 (DNS) で 2 つの IP アドレスへの送信アクセスを許可するネットワーク規則を作成します。
$NetRule1 = New-AzFirewallNetworkRule `
-Name "Allow-DNS" `
-Protocol UDP `
-SourceAddress 10.0.2.0/24 `
-DestinationAddress 209.244.0.3,209.244.0.4 `
-DestinationPort 53
$NetRuleCollection = New-AzFirewallNetworkRuleCollection `
-Name RCNet01 `
-Priority 200 `
-Rule $NetRule1 `
-ActionType "Allow"
$Azfw.NetworkRuleCollections.Add($NetRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw
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