다음을 통해 공유


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.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

참고

Azure는 공용 IP 주소가 할당되지 않았거나 내부 기본 Azure Load Balancer의 백 엔드 풀에 있는 VM에 대한 기본 아웃바운드 액세스 IP를 제공합니다. 기본 아웃바운드 액세스 IP 메커니즘은 구성할 수 없는 아웃바운드 IP 주소를 제공합니다.

다음 이벤트 중 하나가 발생하면 기본 아웃바운드 액세스 IP가 사용하지 않도록 설정됩니다.

  • 공용 IP 주소가 VM에 할당됩니다.
  • VM은 아웃바운드 규칙 유무에 관계없이 표준 Load Balancer의 백 엔드 풀에 배치됩니다.
  • Azure NAT Gateway 리소스는 VM의 서브넷에 할당됩니다.

유연한 오케스트레이션 모드에서 가상 머신 확장 집합을 사용하여 만드는 VM에는 기본 아웃바운드 액세스 권한이 없습니다.

Azure의 아웃바운드 연결에 대한 자세한 내용은 Azure의 기본 아웃바운드 액세스아웃바운드 연결에 SNAT(원본 네트워크 주소 변환) 사용을 참조하세요.

방화벽 배포

New-AzPublicIpAddressNew-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-AzRouteTableAdd-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-AzFirewallApplicationRuleNew-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-AzFirewallNetworkRuleNew-AzFirewallNetworkRuleCollection을 사용하여 포트 53(DNS)에서 두 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 주소와 보조 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 하나만 찾아볼 수 있습니다.

리소스 정리

다음 자습서를 위해 방화벽 리소스를 보관할 수 있습니다. 더 이상 필요하지 않은 경우 Test-FW-RG 리소스 그룹을 삭제하여 모든 방화벽 관련 리소스를 삭제합니다.

Remove-AzResourceGroup -Name Test-FW-RG

다음 단계