빠른 시작: Azure Portal을 사용하여 가상 머신 네트워크 트래픽 필터 문제 진단

이 빠른 시작에서는 가상 머신을 배포하고 Network Watcher IP 흐름 확인을 사용하여 다른 IP 주소와의 연결을 테스트합니다. IP 흐름 확인 결과를 사용하여 트래픽을 차단하고 통신 실패를 일으키는 보안 규칙을 확인하고 이를 해결하는 방법을 알아봅니다. 네트워크 인터페이스에 대한 효과적인 보안 규칙을 사용하여 보안 규칙이 트래픽을 허용하거나 거부하는 이유를 확인하는 방법도 알아봅니다.

Network Watcher 빠른 시작에서 만든 리소스를 보여 주는 다이어그램

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

필수 조건

  • 활성 구독이 있는 Azure 계정.

  • Azure Cloud Shell 또는 Azure CLI.

    이 문서의 단계에서는 Azure Cloud Shell에서 대화형으로 Azure CLI 명령을 실행합니다. Cloud Shell에서 명령을 실행하려면 코드 블록의 오른쪽 위 모서리에서 Cloud Shell을 엽니다. 복사를 선택하여 코드를 복사하고 Cloud Shell에 붙여넣어 실행합니다. Cloud Shell은 Azure Portal 내에서도 실행할 수 있습니다.

    Azure CLI를 로컬로 설치하여 명령을 실행할 수도 있습니다. 이 빠른 시작에는 Azure CLI 버전 2.0 이상이 필요합니다. Azure CLI를 로컬로 실행하는 경우 az login 명령을 사용하여 Azure에 로그인합니다.

가상 머신 만들기

이 섹션에서는 미국 동부 지역에 가상 네트워크와 서브넷을 만듭니다. 그런 다음, 기본 네트워크 보안 그룹을 사용하여 서브넷에 가상 머신을 만듭니다.

  1. az group create를 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.

    # Create a resource group.
    az group create --name 'myResourceGroup' --location 'eastus'
    
  2. az network vnet create를 사용하여 가상 네트워크를 만듭니다.

    # Create a virtual network and a subnet.
    az network vnet create --resource-group 'myResourceGroup' --name 'myVNet' --subnet-name 'mySubnet' --subnet-prefixes 10.0.0.0/24 
    
  3. az network nsg create를 사용하여 네트워크 보안 그룹을 만듭니다.

    # Create a default network security group.
    az network nsg create --name 'myVM-nsg' --resource-group 'myResourceGroup' --location 'eastus'
    
  4. az vm create를 사용하여 가상 머신을 만듭니다. 메시지가 표시되면 사용자 이름과 암호를 입력합니다.

    # Create a Linux virtual machine using the latest Ubuntu 20.04 LTS image.
    az vm create --resource-group 'myResourceGroup' --name 'myVM' --location 'eastus' --vnet-name 'myVNet' --subnet 'mySubnet' --public-ip-address '' --nsg 'myVM-nsg' --image 'Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest'
    

IP 흐름 확인을 사용하여 네트워크 통신 테스트

이 섹션에서는 Network Watcher IP 흐름 확인 기능을 사용하여 가상 머신과 네트워크 통신을 테스트합니다.

  1. az network watcher test-ip-flow 명령을 통해 IP 흐름 확인을 사용하여 myVM에서 13.107.21.200으로의 아웃바운드 통신을 테스트합니다(13.107.21.200www.bing.com에서 사용하는 공용 IP 주소 중 하나임).

    # Start the IP flow verify session to test outbound flow to www.bing.com.
    az network watcher test-ip-flow --direction 'outbound' --protocol 'TCP' --local '10.0.0.4:60000' --remote '13.107.21.200:80' --vm 'myVM' --nic 'myVmVMNic' --resource-group 'myResourceGroup' --out 'table'
    

    몇 초 후에 다음 예제와 비슷한 출력이 표시됩니다.

    Access  RuleName
    ------  --------
    Allow   defaultSecurityRules/AllowInternetOutBound
    

    테스트 결과는 기본 보안 규칙 AllowInternetOutBound로 인해 액세스가 13.107.21.200으로 허용됨을 나타냅니다. 기본적으로 Azure 가상 머신은 인터넷에 액세스할 수 있습니다.

  2. RemoteIPAddress10.0.1.10으로 변경하고 테스트를 반복합니다. 10.0.1.10myVNet 주소 공간에 있는 개인 IP 주소입니다.

    # Start the IP flow verify session to test outbound flow to 10.0.1.10.
    az network watcher test-ip-flow --direction 'outbound' --protocol 'TCP' --local '10.0.0.4:60000' --remote '10.0.1.10:80' --vm 'myVM' --nic 'myVmVMNic' --resource-group 'myResourceGroup' --out 'table'
    

    몇 초 후에 다음 예제와 비슷한 출력이 표시됩니다.

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/AllowVnetOutBound
    

    두 번째 테스트 결과는 기본 보안 규칙 AllowVnetOutBound로 인해 액세스가 10.0.1.10으로 허용됨을 나타냅니다. 기본적으로 Azure 가상 머신은 가상 네트워크의 주소 공간에 있는 모든 IP 주소에 액세스할 수 있습니다.

  3. RemoteIPAddress10.10.10.10으로 변경하고 테스트를 반복합니다. 10.10.10.10myVNet 주소 공간에 없는 개인 IP 주소입니다.

    # Start the IP flow verify session to test outbound flow to 10.10.10.10.
    az network watcher test-ip-flow --direction 'outbound' --protocol 'TCP' --local '10.0.0.4:60000' --remote '10.10.10.10:80' --vm 'myVM' --nic 'myVmVMNic' --resource-group 'myResourceGroup' --out 'table'
    

    몇 초 후에 다음 예제와 비슷한 출력이 표시됩니다.

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/DenyAllOutBound
    

    세 번째 테스트의 결과는 기본 보안 규칙 DenyAllOutBound로 인해 액세스가 10.10.10.10으로 거부되었음을 나타냅니다.

  4. 방향인바운드로, 로컬 포트를 80으로, 원격 포트를 60000으로 변경한 다음, 테스트를 반복합니다.

    # Start the IP flow verify session to test inbound flow from 10.10.10.10.
    az network watcher test-ip-flow --direction 'inbound' --protocol 'TCP' --local '10.0.0.4:80' --remote '10.10.10.10:6000' --vm 'myVM' --nic 'myVmVMNic' --resource-group 'myResourceGroup' --out 'table'
    

    몇 초 후에 다음 예제와 비슷한 출력이 표시됩니다.

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/DenyAllInBound
    

    네 번째 테스트 결과는 기본 보안 규칙 DenyAllInBound로 인해 액세스가 10.10.10.10에서 거부되었음을 나타냅니다. 기본적으로 가상 네트워크 외부에서 Azure 가상 머신에 대한 모든 액세스는 거부됩니다.

보안 규칙의 세부 정보 보기

이전 섹션의 규칙이 통신을 허용하거나 거부하는 이유를 확인하려면 az network nic list-effective-nsg 명령을 사용하여 myVM 가상 머신의 네트워크 인터페이스에 대한 효과적인 보안 규칙을 검토합니다.

# Get the effective security rules for the network interface of myVM.
az network nic list-effective-nsg --resource-group 'myResourceGroup' --name 'myVmVMNic'

반환된 출력은 www.bing.com에 대한 아웃바운드 액세스를 허용한 AllowInternetOutbound 규칙에 대한 다음 정보를 포함합니다.

{
  "access": "Allow",
  "destinationAddressPrefix": "Internet",
  "destinationAddressPrefixes": [
	"Internet"
  ],
  "destinationPortRange": "0-65535",
  "destinationPortRanges": [
	"0-65535"
  ],
  "direction": "Outbound",
  "expandedDestinationAddressPrefix": [
	"1.0.0.0/8",
	"2.0.0.0/7",
	"4.0.0.0/9",
	"4.144.0.0/12",
	"4.160.0.0/11",
	"4.192.0.0/10",
	"5.0.0.0/8",
	"6.0.0.0/7",
	"8.0.0.0/7",
	"11.0.0.0/8",
	"12.0.0.0/8",
	"13.0.0.0/10",
	"13.64.0.0/11",
	"13.104.0.0/13",
	"13.112.0.0/12",
	"13.128.0.0/9",
	"14.0.0.0/7",
	...
	...
	...
	"200.0.0.0/5",
	"208.0.0.0/4"
  ],
  "name": "defaultSecurityRules/AllowInternetOutBound",
  "priority": 65001,
  "protocol": "All",
  "sourceAddressPrefix": "0.0.0.0/0",
  "sourceAddressPrefixes": [
	"0.0.0.0/0",
	"0.0.0.0/0"
  ],
  "sourcePortRange": "0-65535",
  "sourcePortRanges": [
	"0-65535"
  ]
},

출력에서 주소 접두사 13.104.0.0/13AllowInternetOutBound 규칙의 주소 접두사 중 하나임을 확인할 수 있습니다. 이 접두사는 www.bing.com에 대한 아웃바운드 통신을 테스트하는 데 활용한 IP 주소 13.107.21.200을 포함합니다.

마찬가지로 다른 규칙을 확인하여 각 규칙 아래의 원본 및 대상 IP 주소 접두사를 볼 수 있습니다.

리소스 정리

더 이상 필요하지 않은 경우 az group delete를 사용하여 myResourceGroup 리소스 그룹 및 그룹에 포함된 모든 리소스를 제거합니다.

# Delete the resource group and all resources it contains.
az group delete --name 'myResourceGroup' --yes

다음 단계