Azure PowerShell을 사용하여 Azure Firewall 정책 배포 및 구성

아웃바운드 네트워크 액세스 제어는 전체 네트워크 보안 계획에서 중요한 부분입니다. 예를 들어 웹 사이트에 대한 액세스를 제한할 수 있습니다. 또는 액세스할 수 있는 아웃바운드 IP 주소와 포트를 제한할 수 있습니다.

Azure Firewall 및 방화벽 정책을 사용하여 Azure 서브넷에서 아웃바운드 네트워크 액세스를 제어할 수 있습니다. Azure Firewall을 사용하여 다음을 구성할 수 있습니다.

  • 서브넷에서 액세스할 수 있는 FQDN(정규화된 도메인 이름)을 정의하는 애플리케이션 규칙.
  • 원본 주소, 프로토콜, 대상 포트 및 대상 주소를 정의하는 네트워크 규칙.

네트워크 트래픽은 서브넷 기본 게이트웨이처럼 방화벽에 네트워크 트래픽을 라우팅할 경우 구성된 방화벽 규칙에 종속됩니다.

이 문서에서는 쉽게 배포할 수 있는 세 개의 서브넷이 있는 간소화된 단일 가상 네트워크를 만듭니다. 프로덕션 배포의 경우 방화벽이 자체 가상 네트워크에 있는 허브 및 스포크 모델을 사용합니다. 워크로드 서버는 하나 이상의 서브넷이 있는 동일한 지역의 피어링된 가상 네트워크에 위치합니다.

  • AzureFirewallSubnet - 방화벽은 이 서브넷에 있습니다.
  • 워크로드-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 호스트 만들기

이 가상 네트워크에는 세 개의 서브넷이 있습니다. New-AzVirtualNetworkSubnetConfig를 사용하여 정의합니다.

참고

AzureFirewallSubnet 서브넷의 크기는 /26입니다. 서브넷 크기에 대한 자세한 내용은 Azure Firewall FAQ를 참조하세요.

$Bastionsub = New-AzVirtualNetworkSubnetConfig `
    -Name AzureBastionSubnet `
    -AddressPrefix 10.0.3.0/26
$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)에서 두 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 주소와 보조 DNS 주소를 구성합니다. 이 구성은 일반적인 Azure Firewall 요구 사항이 아닙니다.

$NIC01.DnsSettings.DnsServers.Add("209.244.0.3")
$NIC01.DnsSettings.DnsServers.Add("209.244.0.4")
$NIC01 | Set-AzNetworkInterface

방화벽 테스트

이제 방화벽이 예상대로 작동하는지 테스트합니다.

  1. Bastion을 사용하여 Srv-Work 가상 머신에 연결하고 로그인합니다.

    Azure Bastion을 사용하여 Srv-Work 가상 머신에 대한 연결을 보여 주는 스크린샷

  2. Srv-Work에서 PowerShell 창을 열고 다음 명령을 실행합니다.

    nslookup www.google.com
    nslookup www.microsoft.com
    

    두 명령 모두 DNS 쿼리가 방화벽을 통과한다는 것을 보여 주는 답변을 반환합니다.

  3. 다음 명령을 실행합니다.

    Invoke-WebRequest -Uri https://www.google.com
    
    Invoke-WebRequest -Uri https://www.microsoft.com
    

    요청이 www.google.com 성공하고 요청이 www.microsoft.com 실패합니다. 이 결과는 방화벽 규칙이 예상대로 작동하고 있음을 보여 줍니다.

이제 방화벽 정책 규칙이 작동하는지 확인했습니다.

  • 구성된 외부 DNS 서버를 사용하여 DNS 이름을 확인할 수 있습니다.
  • 다른 모든 FQDN이 아닌 허용된 FQDN 하나만 찾아볼 수 있습니다.

리소스 정리

Firewall 리소스는 추가 테스트를 위해 보관해 두셔도 됩니다. 더 이상 필요하지 않은 경우 Test-FW-RG 리소스 그룹을 삭제하여 모든 방화벽 관련 리소스를 삭제합니다.

Remove-AzResourceGroup -Name Test-FW-RG

다음 단계