Share via


오픈 소스 도구를 사용하여 Azure Network Watcher NSG 흐름 로그 시각화

주의

이 문서에서는 EOL(수명 종료) 상태에 가까워진 Linux 배포판인 CentOS를 참조하세요. 이에 따라 사용 및 계획을 고려하세요. 자세한 내용은 CentOS 수명 종료 지침을 참조 하세요.

네트워크 보안 그룹 흐름 로그는 네트워크 보안 그룹의 송/수신 IP 트래픽을 이해하는 데 사용할 수 있는 정보를 제공합니다. 이러한 흐름 로그는 트래픽이 허용되거나 거부된 경우 각 규칙을 기준으로 아웃바운드 및 인바운드 흐름, 흐름이 적용되는 NIC, 흐름에 대한 5개의 튜플 정보(원본/대상 IP, 원본/대상 포트, 프로토콜)를 보여줍니다.

이러한 흐름 로그는 수동으로 구문 분석하고 인사이트를 얻기 어려울 수 있습니다. 그러나 이 데이터를 시각화하는 데 도움이 되는 오픈 소스 도구가 몇 가지 있습니다. 이 문서에서는 Elastic Stack을 사용하여 이러한 로그를 시각화하는 솔루션을 제공합니다. 이를 통해 Kibana 대시보드에서 흐름 로그를 빠르게 인덱싱하고 시각화할 수 있습니다.

시나리오

이 문서에서는 Elastic Stack을 사용하여 네트워크 보안 그룹 흐름 로그를 시각화할 수 있는 솔루션을 설정했습니다. Logstash 입력 플러그 인은 흐름 로그를 포함하도록 구성된 스토리지 Blob에서 직접 흐름 로그를 가져옵니다. 그런 다음, 탄력적인 스택을 사용하여 흐름 로그가 인덱싱되고, 흐름 로그로 Kibana 대시보드를 만들어 정보를 시각화합니다.

다이어그램은 Elastic Stack을 사용하여 네트워크 보안 그룹 흐름 로그를 시각화할 수 있는 시나리오를 보여줍니다.

단계

네트워크 보안 그룹 흐름 로그 사용

이 시나리오에서는 계정에 있는 하나 이상의 네트워크 보안 그룹에서 네트워크 보안 그룹 흐름 로깅을 사용하도록 설정해야 합니다. 네트워크 보안 흐름 로그 사용하도록 설정에 대한 지침은 네트워크 보안 그룹에 대한 흐름 로깅 소개 문서를 참조하세요.

탄력적 스택 설정

NSG 흐름 로그를 탄력적 스택과 연결하여 로그에서 정보를 검색하고, 그래프화하며 분석하고 정보를 끌어낼 수 있는 Kibana 대시보드를 만들 수 있습니다.

Elasticsearch 설치

다음 지침은 Ubuntu Azure VM에 Elasticsearch를 설치하는 데 사용됩니다. RHEL/CentOS 배포판에 Elastic Search를 설치하는 방법에 대한 지침은 RPM으로 Elasticsearch 설치를 참조하세요.

  1. 이번 5.0 이상의 탄력적 스택에는 Java 8이 필요합니다. java -version 명령을 실행하여 버전을 확인합니다. Java가 설치되어 있지 않으면 Azure 지원 JDK에 대한 설명서를 참조하세요.

  2. 시스템에 맞는 이진 패키지를 다운로드합니다.

    curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.deb
    sudo dpkg -i elasticsearch-5.2.0.deb
    sudo /etc/init.d/elasticsearch start
    

    다른 설치 방법은 Elasticsearch 설치에서 확인할 수 있습니다.

  3. 명령으로 Elasticsearch가 실행 중인지 확인합니다.

    curl http://127.0.0.1:9200
    

    다음과 유사한 응답이 표시됩니다.

    {
    "name" : "Angela Del Toro",
    "cluster_name" : "elasticsearch",
    "version" : {
        "number" : "5.2.0",
        "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe",
        "build_timestamp" : "2016-01-27T13:32:39Z",
        "build_snapshot" : false,
        "lucene_version" : "6.1.0"
    },
    "tagline" : "You Know, for Search"
    }
    

Elastic Search 설치에 대한 자세한 지침은 설치 지침을 참조하세요.

Logstash 설치

다음 지침은 Ubuntu에 Logstash를 설치하는 데 사용됩니다. RHEL/CentOS에 이 패키지를 설치하는 방법에 대한 지침은 패키지 리포지토리에서 설치 - yum 문서를 참조하세요.

  1. Logstash를 설치하려면 다음 명령을 실행합니다.

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. 다음으로, 흐름 로그를 액세스하고 구문 분석하도록 Logstash를 구성해야 합니다. 다음을 사용하여 logstash.conf 파일을 만듭니다.

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. 파일에 다음 내용을 추가합니다.

    input {
       azureblob
         {
             storage_account_name => "mystorageaccount"
             storage_access_key => "VGhpcyBpcyBhIGZha2Uga2V5Lg=="
             container => "insights-logs-networksecuritygroupflowevent"
             codec => "json"
             # Refer https://learn.microsoft.com/azure/network-watcher/network-watcher-read-nsg-flow-logs
             # Typical numbers could be 21/9 or 12/2 depends on the nsg log file types
             file_head_bytes => 12
             file_tail_bytes => 2
             # Enable / tweak these settings when event is too big for codec to handle.
             # break_json_down_policy => "with_head_tail"
             # break_json_batch_count => 2
         }
       }
    
       filter {
         split { field => "[records]" }
         split { field => "[records][properties][flows]"}
         split { field => "[records][properties][flows][flows]"}
         split { field => "[records][properties][flows][flows][flowTuples]"}
    
      mutate{
       split => { "[records][resourceId]" => "/"}
       add_field => {"Subscription" => "%{[records][resourceId][2]}"
                     "ResourceGroup" => "%{[records][resourceId][4]}"
                     "NetworkSecurityGroup" => "%{[records][resourceId][8]}"}
       convert => {"Subscription" => "string"}
       convert => {"ResourceGroup" => "string"}
       convert => {"NetworkSecurityGroup" => "string"}
       split => { "[records][properties][flows][flows][flowTuples]" => ","}
       add_field => {
                   "unixtimestamp" => "%{[records][properties][flows][flows][flowTuples][0]}"
                   "srcIp" => "%{[records][properties][flows][flows][flowTuples][1]}"
                   "destIp" => "%{[records][properties][flows][flows][flowTuples][2]}"
                   "srcPort" => "%{[records][properties][flows][flows][flowTuples][3]}"
                   "destPort" => "%{[records][properties][flows][flows][flowTuples][4]}"
                   "protocol" => "%{[records][properties][flows][flows][flowTuples][5]}"
                   "trafficflow" => "%{[records][properties][flows][flows][flowTuples][6]}"
                   "traffic" => "%{[records][properties][flows][flows][flowTuples][7]}"
                   "flowstate" => "%{[records][properties][flows][flows][flowTuples][8]}"
                    "packetsSourceToDest" => "%{[records][properties][flows][flows][flowTuples][9]}"
                    "bytesSentSourceToDest" => "%{[records][properties][flows][flows][flowTuples][10]}"
                    "packetsDestToSource" => "%{[records][properties][flows][flows][flowTuples][11]}"
                    "bytesSentDestToSource" => "%{[records][properties][flows][flows][flowTuples][12]}"
                    }
       convert => {"unixtimestamp" => "integer"}
       convert => {"srcPort" => "integer"}
       convert => {"destPort" => "integer"}
      }
    
      date{
        match => ["unixtimestamp" , "UNIX"]
      }
     }
    output {
      stdout { codec => rubydebug }
      elasticsearch {
        hosts => "localhost"
        index => "nsg-flow-logs"
      }
    }
    

Logstash 설치에 대한 자세한 지침은 공식 설명서를 참조하세요.

Azure Blob Storage를 위한 Logstash 입력 플러그 인 설치

이 Logstash 플러그 인을 사용하면 지정된 스토리지 계정에서 흐름 로그에 직접 액세스할 수 있습니다. 이 플러그 인을 설치하려면 기본 Logstash 설치 디렉터리에서 다음 명령을 실행합니다.

sudo /usr/share/logstash/bin/logstash-plugin install logstash-input-azureblob

Logstash를 시작하려면 다음 명령을 실행합니다.

sudo /etc/init.d/logstash start

이 플러그 인에 대한 자세한 내용은 설명서를 참조하세요.

Kibana 설치

RHEL/CentOS 시스템에 Kibana를 설치하는 방법에 대한 지침은 RPM으로 Kibana 설치를 참조하세요. 리포지토리 패키지를 사용하여 Ubuntu/Debian 시스템에 Kibana를 설치하는 방법에 대한 지침은 APT 리포지토리에서 Kibana 설치를 참조하세요.

그리고 다음 지침은 Ubuntu에서 테스트되었으며 Ubuntu에만 국한되지 않으므로 다양한 Linux 배포판에서 사용할 수 있습니다.

  1. 다음 명령을 실행하여 Kibana를 설치합니다.

    curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.2.0-linux-x86_64.tar.gz
    tar xzvf kibana-5.2.0-linux-x86_64.tar.gz
    
  2. Kibana를 실행하려면 다음 명령을 사용합니다.

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Kibana 웹 인터페이스를 보려면 http://localhost:5601로 이동합니다.

  4. 이 시나리오에서 흐름 로그에 사용된 인덱스 패턴은 "nsg-flow-logs"입니다. logstash.conf 파일의 "output" 섹션에서 인덱스 패턴을 변경할 수 있습니다.

  5. Kibana 대시보드를 원격으로 보려면 포트 5601에 대해 액세스를 허용하는 인바운드 NSG 규칙을 만듭니다.

Kibana 대시보드 만들기

샘플 대시보드가 다음 그림에 표시되어 경고에서 추세 및 세부 정보를 보여줍니다.

그림 1

대시보드 파일, 시각화 파일저장된 검색 파일을 다운로드합니다.

Kibana의 관리 탭 아래에서 저장된 개체로 이동하고 세 개 파일을 모두 가져옵니다. 그런 다음 대시보드 탭에서 샘플 대시보드를 열고 로드할 수 있습니다.

사용자가 관심 있는 메트릭에 맞는 시각화 및 대시보드를 만들 수 있습니다. Kibana의 공식적인 설명서에서 Kibana 시각화 만들기에 대해 자세히 알아보세요.

NSG 흐름 로그 시각화

샘플 대시보드는 흐름 로그에 대한 다양한 시각화를 제공합니다.

  1. Flows by Decision/Direction Over Time - 기간별 흐름 수를 보여주는 시계열 그래프입니다. 이러한 시각화 요소의 시간 단위와 범위를 편집할 수 있습니다. Flows by Decision은 허용 또는 거부 결정의 비율을 보여주고, Flows by Direction은 인바운드 및 아웃바운드 트래픽의 비율을 보여줍니다. 이러한 시각적 개체를 사용하면 시간에 따른 트래픽 추세를 검토할 수 있고 스파이크 또는 비정상 패턴을 찾을 수 있습니다.

    스크린샷은 시간에 따른 의사 결정 및 방향별 흐름이 있는 샘플 대시보드를 보여줍니다.

  2. Flows by Destination/Source Port - 각 해당 포트에 대한 흐름의 분석 결과를 보여 주는 원형 차트입니다. 이 보기를 사용하면 가장 자주 사용되는 포트를 볼 수 있습니다. 원형 차트 내에서 특정 포트를 클릭하면 대시보드의 나머지 부분이 해당 포트의 흐름으로 필터링됩니다.

    대상 및 원본 포트별 흐름을 표시하는 샘플 대시보드를 보여 주는 스크린샷

  3. Number of Flows 및 Earliest Log Time – 기록된 흐름 수 및 가장 빨리 캡처된 로그의 날짜를 보여주는 메트릭입니다.

    스크린샷은 흐름 수와 가장 빠른 로그 시간이 있는 샘플 대시보드를 보여줍니다.

  4. Flows by NSG and Rule – 각 NSG 내 흐름 분포와 각 NSG 내 규칙 분포를 보여주는 막대 그래프입니다. 가장 많은 트래픽을 생성한 NSG 및 규칙을 확인할 수 있습니다.

    NSG 및 규칙별 흐름을 표시하는 샘플 대시보드를 보여 주는 스크린샷

  5. Top 10 Source/Destination IPs - 상위 10개의 원본 및 대상 IP를 보여주는 막대형 차트입니다. 이러한 차트를 조정하여 표시되는 상위 IP를 늘리거나 줄일 수 있습니다. 여기에서 가장 일반적으로 발생하는 IP와 각 IP에 대한 트래픽 결정(허용 또는 거부)을 확인할 수 있습니다.

    상위 10개 원본 및 대상 IP 주소별 흐름을 표시하는 샘플 대시보드를 보여 주는 스크린샷

  6. Flow Tuples – 이 테이블은 각 Flow Tuples에 포함된 정보와 해당 NGS 및 규칙을 보여 줍니다.

    스크린샷은 테이블의 흐름 튜플을 보여줍니다.

대시보드 맨 위에 있는 쿼리 표시줄을 사용하여 구독 ID, 리소스 그룹, 규칙 또는 원하는 다른 변수 같은 흐름의 모든 매개 변수를 기준으로 대시보드를 필터링할 수 있습니다. Kibana의 쿼리 및 필터에 대한 자세한 내용은 공식 설명서를 참조하세요.

결론

탄력적인 스택과 네트워크 보안 그룹 흐름 로그를 결합하여 네트워크 트래픽을 가시화하는 강력하고 사용자 지정 가능한 방법을 개발했습니다. 이러한 대시보드를 사용하면 네트워크 트래픽에 대한 통찰력을 신속하게 얻고 공유하며, 모든 잠재적인 이상 요소를 필터링하고 조사할 수 있습니다. Kibana를 사용하면 이러한 대시보드를 조정하고 모든 보안, 감사 및 규정 준수 요구 사항에 맞는 특정 시각화 요소를 만들 수 있습니다.

다음 단계

PowerBI에서 NSG 흐름 로그 시각화에서 Power BI로 NSG 흐름 로그를 시각화하는 방법에 대해 알아보세요.