연습 - NVA를 통한 트래픽 라우팅

완료됨

이제 NVA(네트워크 가상 어플라이언스)와 VM(가상 머신)을 만들었으므로 NVA를 통해 트래픽을 라우팅합니다.

Visualization of virtual machines and IP addresses.

퍼블릭 및 프라이빗 가상 머신 만들기

다음 단계는 퍼블릭 및 프라이빗 서브넷에 VM을 배포하는 것입니다.

  1. Cloud Shell 편집기를 열고 cloud-init.txt라는 파일을 만듭니다.

    code cloud-init.txt
    
  2. 다음 구성 정보를 파일에 추가합니다. 이 구성을 사용하여 inetutils-traceroute 패키지는 새 VM을 만들 때 설치됩니다. 이 패키지에는 이 연습의 뒷부분에서 사용할 traceroute 유틸리티가 포함되어 있습니다.

    #cloud-config
    package_upgrade: true
    packages:
       - inetutils-traceroute
    
  3. 키를 눌러서 파일을 저장하고 Ctrl+Q 키를 눌러서 편집기를 종료합니다.

  4. Cloud Shell에서 다음 명령을 실행하여 퍼블릭 VM을 만듭니다. <password>azureuser 계정에 적합한 암호로 바꿉니다.

    az vm create \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name public \
        --vnet-name vnet \
        --subnet publicsubnet \
        --image Ubuntu2204 \
        --admin-username azureuser \
        --no-wait \
        --custom-data cloud-init.txt \
        --admin-password <password>
    
  5. 다음 명령을 실행하여 프라이빗 VM을 만듭니다. <password>를 적절한 암호로 바꿉니다.

    az vm create \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name private \
        --vnet-name vnet \
        --subnet privatesubnet \
        --image Ubuntu2204 \
        --admin-username azureuser \
        --no-wait \
        --custom-data cloud-init.txt \
        --admin-password <password>
    
  6. 다음 Linux watch 명령을 실행하여 VM이 실행되고 있는지 확인합니다. watch 명령은 정기적으로 az vm list 명령을 실행하여 VM의 진행을 모니터링할 수 있습니다.

    watch -d -n 5 "az vm list \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --show-details \
        --query '[*].{Name:name, ProvisioningState:provisioningState, PowerState:powerState}' \
        --output table"
    

    ProvisioningState가 “성공”이고 PowerState가 “VM 실행 중”이면 배포에 성공했음을 나타냅니다. 세 개의 VM이 모두 실행 중이면 다음 단계를 진행해도 됩니다. Ctrl-C 키를 눌러 명령을 중지하고 연습을 계속 진행합니다.

  7. 다음 명령을 실행하여 퍼블릭 VM의 공용 IP 주소를 PUBLICIP라는 변수에 저장합니다.

    PUBLICIP="$(az vm list-ip-addresses \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name public \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $PUBLICIP
    
  8. 다음 명령을 실행하여 프라이빗 VM의 공용 IP 주소를 PRIVATEIP라는 변수에 저장합니다.

    PRIVATEIP="$(az vm list-ip-addresses \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name private \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $PRIVATEIP
    

네트워크 가상 어플라이언스를 통한 트래픽 라우팅 테스트

최종 단계에서는 Linux traceroute 유틸리티를 사용하여 트래픽이 라우팅되는 방식을 보여줍니다. ssh 명령을 사용하여 각 VM에서 traceroute를 실행합니다. 첫 번째 테스트는 퍼블릭 VM에서 프라이빗 VM으로 전송된 ICMP 패킷의 경로를 보여 줍니다. 두 번째 테스트는 프라이빗 VM에서 퍼블릭 VM으로 전송된 ICMP 패킷의 경로를 보여 줍니다.

  1. 다음 명령을 실행하여 퍼블릭에서 프라이빗으로의 경로를 추적합니다. 메시지가 표시되면 앞에서 지정한 azureuser 계정의 암호를 입력합니다.

    ssh -t -o StrictHostKeyChecking=no azureuser@$PUBLICIP 'traceroute private --type=icmp; exit'
    

    bash: traceroute: command not found라는 오류 메시지를 받으면 잠시 기다린 후 명령을 다시 시도합니다. VM 배포 후 traceroute가 자동으로 설치되는 데 1~2분이 걸릴 수 있습니다. 명령이 성공한 후 출력은 다음 예제와 유사하게 표시됩니다.

    traceroute to private.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.1.4), 64 hops max
    1   10.0.2.4  0.710ms  0.410ms  0.536ms
    2   10.0.1.4  0.966ms  0.981ms  1.268ms
    Connection to 52.165.151.216 closed.
    

    첫 번째 홉은 10.0.2.4입니다. 이 주소는 nva의 프라이빗 IP 주소입니다. 두 번째 홉은 프라이빗의 주소, 10.0.1.4입니다. 첫 번째 연습에서는 이 경로를 경로 테이블에 추가하고, 해당 테이블을 publicsubnet 서브넷에 연결했습니다. 따라서 이제 퍼블릭에서 프라이빗으로의 모든 트래픽은 NVA를 통해 라우팅됩니다.

    Diagram of route from public to private.

  2. 다음 명령을 실행하여 프라이빗에서 퍼블릭으로의 경로를 추적합니다. 메시지가 표시되면 azureuser 계정의 암호를 입력합니다.

    ssh -t -o StrictHostKeyChecking=no azureuser@$PRIVATEIP 'traceroute public --type=icmp; exit'
    

    다음 명령 출력에서와 같이 트래픽이 NVA를 통하지 않고 퍼블릭(10.0.0.4)으로 직접 이동하는 것을 확인할 수 있습니다.

    traceroute to public.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.0.4), 64 hops max
    1   10.0.0.4  1.095ms  1.610ms  0.812ms
    Connection to 52.173.21.188 closed.
    

    프라이빗 VM은 기본 경로를 사용하고 있으며 트래픽이 서브넷 간에 직접 라우팅됩니다.

    Diagram of route from private to public.

이제 퍼블릭 인터넷의 트래픽이 프라이빗 서브넷에 도달하기 전에 dmzsubnet 서브넷을 통과하도록 서브넷 간의 라우팅을 구성했습니다. dmzsubnet 서브넷에서 NVA 역할을 수행하는 VM을 추가했습니다. 잠재적인 악성 요청을 탐지하고 의도한 대상에 도달하기 전에 차단하도록 이 NVA를 구성할 수 있습니다.