Share via


PowerShell을 사용하여 Azure Network Watcher로 가상 머신의 패킷 캡처를 관리합니다.

Network Watcher 패킷 캡처 도구를 사용하면 Azure VM(Virtual Machines)과의 네트워크 트래픽을 기록하는 캡처 세션을 만들 수 있습니다. 원하는 트래픽만 캡처할 수 있도록 캡처 세션에 대 한 필터가 제공됩니다. 패킷 캡처를 통해 사후 및 사전 대응적으로 네트워크 변칙을 진단할 수 있습니다. 이 애플리케이션은 이상 탐지를 넘어 네트워크 인사이트 수집, 네트워크 침입에 대한 인사이트 획득, 클라이언트-서버 통신 디버깅 및 기타 다양한 네트워킹 문제 해결을 포함하도록 확장됩니다. Network Watcher 패킷 캡처를 사용하면 원격으로 패킷 캡처를 시작할 수 있으므로 특정 가상 머신에서 수동으로 실행할 필요성이 줄어듭니다.

이 문서에서는 Azure PowerShell을 사용하여 가상 머신 패킷 캡처를 원격으로 구성, 시작, 중지, 다운로드 및 삭제하는 방법을 알아봅니다. Azure Portal 또는 Azure CLI를 사용하여 패킷 캡처를 관리하는 방법을 알아보려면 Azure Portal을 사용하여 가상 머신의 패킷 캡처 관리 또는 Azure CLI를 사용하여 가상 머신의 패킷 캡처 관리를 참조하세요.

필수 조건

  • 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.

  • Azure Cloud Shell 또는 Azure PowerShell.

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

    Azure PowerShell을 로컬로 설치하여 cmdlet을 실행할 수도 있습니다. 이 문서에는 Az PowerShell 모듈이 필요합니다. 자세한 내용은 Azure PowerShell 설치 방법을 참조하세요. 설치되어 있는 버전을 확인하려면 Get-InstalledModule -Name Az을 실행합니다. PowerShell을 로컬로 실행하는 경우 Connect-AzAccount cmdlet을 사용하여 Azure에 로그인합니다.

  • 다음과 같은 아웃바운드 TCP 연결이 있는 가상 머신:

    • 포트 443을 통해 스토리지 계정으로
    • 포트 80을 통해 169.254.169.254로
    • 포트 8037을 통해 168.63.129.16으로

참고 항목

  • 해당 지역에 대해 Network Watcher가 사용하도록 설정되지 않은 경우 Azure는 가상 머신 지역에 Network Watcher 인스턴스를 만듭니다. 자세한 내용은 Azure Network Watcher 사용 또는 사용 안 함을 참조하세요.
  • Network Watcher 패킷 캡처를 사용하려면 대상 가상 머신에 Network Watcher 에이전트 VM 확장을 설치해야 합니다. 자세한 내용은 Network Watcher 에이전트 설치를 참조하세요.
  • 필수 조건에 나열된 마지막 두 개의 IP 주소와 포트는 Network Watcher 에이전트를 사용하는 모든 Network Watcher 도구에 공통적으로 적용되며 경우에 따라 변경될 수 있습니다.

네트워크 보안 그룹이 네트워크 인터페이스에 연결되거나 네트워크 인터페이스가 포함된 서브넷에 연결되어 있으면 이전 포트를 통한 아웃바운드 연결을 허용하는 규칙이 있는지 확인합니다. 마찬가지로 네트워크에 사용자 정의 경로를 추가할 때 이전 포트를 통한 아웃바운드 연결을 확인합니다.

Network Watcher 에이전트 설치

패킷 캡처를 사용하려면 Network Watcher 에이전트 가상 머신 확장이 가상 머신에 설치되어 있어야 합니다.

Get-AzVMExtension cmdlet을 사용하여 확장이 가상 머신에 설치되어 있는지 확인합니다.

# List the installed extensions on the virtual machine.
Get-AzVMExtension -VMName 'myVM' -ResourceGroupName 'myResourceGroup' | format-table Name, Publisher, ExtensionType, EnableAutomaticUpgrade 

확장이 가상 머신에 설치된 경우 이전 명령의 출력에 나열되어 있는 것을 볼 수 있습니다.

Name                         Publisher                      ExtensionType            EnableAutomaticUpgrade
----                         ---------                      -------------            ----------------------
AzureNetworkWatcherExtension Microsoft.Azure.NetworkWatcher NetworkWatcherAgentLinux                   True

확장이 설치되어 있지 않으면 Set-AzVMExtension cmdlet을 사용하여 설치합니다.

# Install Network Watcher agent on a Linux virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentLinux' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 
# Install Network Watcher agent on a Windows virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentWindows' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 

확장이 성공적으로 설치되면 다음 출력이 표시됩니다.

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK 

패킷 캡처 시작

캡처 세션을 시작하려면 New-AzNetworkWatcherPacketCapture cmdlet을 사용합니다.

# Place the virtual machine configuration into a variable.
$vm = Get-AzVM -ResourceGroupName 'myResourceGroup' -Name 'myVM'

# Place the storage account configuration into a variable.
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'myResourceGroup' -Name 'mystorageaccount'

# Start the Network Watcher capture session.
New-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1' -TargetVirtualMachineId $vm.Id  -StorageAccountId $storageAccount.Id 

캡처 세션이 시작되면 다음 출력이 표시됩니다.

ProvisioningState Name   BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ----------------------- -------------------- ------------------
Succeeded         myVM_1 0                       1073741824           18000

다음 표에서는 New-AzNetworkWatcherPacketCapture cmdlet과 함께 사용할 수 있는 선택적 매개 변수를 설명합니다.

매개 변수 description
-Filter 원하는 트래픽만 캡처하려면 필터를 추가합니다. 예를 들어, 특정 IP 주소에서 특정 포트로의 TCP 트래픽만 캡처할 수 있습니다.
-TimeLimitInSeconds 캡처 세션의 최대 기간을 설정합니다. 기본값은 18000초(5시간)입니다.
-BytesToCapturePerPacket 각 패킷당 캡처할 최대 바이트 수를 설정합니다. 사용하지 않거나 0을 입력하면 모든 바이트가 캡처됩니다.
-TotalBytesPerSession 캡처되는 총 바이트 수를 설정합니다. 값에 도달하면 패킷 캡처가 중지됩니다. 사용하지 않을 경우 최대 1GB(1,073,741,824바이트)가 캡처됩니다.
-LocalFilePath 캡처를 대상 가상 머신에 저장하려면 유효한 로컬 파일 경로를 입력합니다(예: C:\Capture\myVM_1.cap). Linux 머신을 사용하는 경우 경로는 /var/captures로 시작해야 합니다.

패킷 캡처 중지

실행 중인 패킷 캡처 세션을 수동으로 중지하려면 Stop-AzNetworkWatcherPacketCapture cmdlet을 사용합니다.

# Manually stop a packet capture session.
Stop-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

참고 항목

cmdlet은 현재 실행 중인 캡처 세션에서 실행되었는지 또는 이미 중지된 세션에서 실행되었는지에 관계없이 응답을 반환하지 않습니다.

패킷 캡처 가져오기

Get-AzNetworkWatcherPacketCapture cmdlet을 사용하여 패킷 캡처 상태(실행 중 또는 완료)를 검색합니다.

# Get information, properties, and status of a packet capture.
Get-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

다음 출력은 Get-AzNetworkWatcherPacketCapture cmdlet의 출력 예입니다. 다음 예제는 캡처를 완료한 이후입니다. PacketCaptureStatus 값은 TimeExceeded의 StopReason과 함께 중지됨입니다. 이 값은 패킷 캡처가 성공했으며 해당 시간을 실행했음을 보여 줍니다.

ProvisioningState Name   Target                                                                                                                              BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ------                                                                                                                              ----------------------- -------------------- ------------------
Succeeded         myVM_1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM 0                       1073741824           18000

참고 항목

출력에 대한 자세한 내용을 보려면 명령 끝에 | Format-List를 추가합니다.

패킷 캡처 다운로드

패킷 캡처 세션을 마친 후 결과 캡처 파일은 Azure Storage, 대상 가상 머신의 로컬 파일 또는 둘 다에 저장됩니다. 패킷 캡처의 저장 대상은 만드는 동안 지정됩니다. 자세한 내용은 패킷 캡처 시작을 참조하세요.

스토리지 계정이 지정된 경우 캡처 파일은 다음 경로의 스토리지 계정에 저장됩니다.

https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap

Azure Storage에 저장된 패킷 캡처 파일을 다운로드하려면 Get-AzStorageBlobContent cmdlet을 사용합니다.

# Download the packet capture file from Azure storage container.
Get-AzStorageBlobContent -Container 'network-watcher-logs' -Blob 'subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2024/01/25/packetcapture_22_44_54_342.cap' -Destination 'C:\Capture\myVM_1.cap'

참고 항목

Azure Storage Explorer를 사용하여 스토리지 계정 컨테이너에서 캡처 파일을 다운로드할 수도 있습니다. Storage Explorer는 Azure Storage 데이터에 편리하게 액세스하고 작업하는 데 사용할 수 있는 독립 실행형 앱입니다. 자세한 내용은 Storage Explorer 시작을 참조하세요.

패킷 캡처 삭제

# Remove a packet capture resource.
Remove-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

Important

Network Watcher에서 패킷 캡처를 삭제해도 스토리지 계정이나 가상 머신에서 캡처 파일은 삭제되지 않습니다. 캡처 파일이 더 이상 필요하지 않은 경우 스토리지 비용이 발생하지 않도록 스토리지 계정에서 수동으로 삭제해야 합니다.