아웃바운드 네트워크 액세스 제어는 전체 네트워크 보안 계획에서 중요한 부분입니다. 예를 들어 웹 사이트에 대한 액세스를 제한할 수 있습니다. 또는 액세스할 수 있는 아웃바운드 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
$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
방화벽 테스트
이제 방화벽이 예상대로 작동하는지 테스트합니다.
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.com요청이
www.google.com성공하고 요청이www.microsoft.com실패합니다. 이 결과는 방화벽 규칙이 예상대로 작동하고 있음을 보여 줍니다.
이제 방화벽 정책 규칙이 작동하는지 확인했습니다.
- 구성된 외부 DNS 서버를 사용하여 DNS 이름을 확인할 수 있습니다.
- 다른 모든 FQDN이 아닌 허용된 FQDN 하나만 찾아볼 수 있습니다.
리소스 정리
Firewall 리소스는 추가 테스트를 위해 보관해 두셔도 됩니다. 더 이상 필요하지 않은 경우 Test-FW-RG 리소스 그룹을 삭제하여 모든 방화벽 관련 리소스를 삭제합니다.
Remove-AzResourceGroup -Name Test-FW-RG