Поделиться через


Визуализируйте журналы потоков NSG с помощью Azure Network Watcher и инструментов с открытым исходным кодом.

Это важно

30 сентября 2027 г. журналы потоков группы безопасности сети (NSG) будут сняты с использования. В рамках этого вывода из эксплуатации вы больше не сможете создавать новые журналы потоков NSG начиная с 30 июня 2025 года. Мы рекомендуем перейти на использованиежурналов потоков виртуальной сети, которые устраняют ограничения журналов потоков NSG. После даты прекращения поддержки аналитика трафика, использующая журналы потоков NSG, больше не будет поддерживаться, а существующие ресурсы журналов потоков NSG в подписках будут удалены. Однако записи журналов потоков NSG не будут удалены и будут продолжать следовать соответствующим политикам хранения. Дополнительные сведения см. в официальном объявлении.

Журналы потоков группы безопасности сети предоставляют сведения, которые можно использовать для понимания входящего трафика и исходящего IP-трафика в группах безопасности сети. Эти журналы потоков показывают входящие и исходящие потоки по каждому правилу, сетевой интерфейс, к которому относится поток, информацию о 5-элементном кортеже потока (исходный/конечный IP-адрес, исходный/конечный порт, протокол), а также указывают, был ли трафик разрешён или запрещён.

Данные журналы потоков могут быть трудны для анализа вручную и получения информации. Однако существует несколько инструментов с открытым кодом, которые могут помочь визуализировать эти данные. В этой статье представлено решение для визуализации этих журналов с помощью Elastic Stack, которое позволяет быстро индексировать и визуализировать журналы потоков на панели мониторинга Kibana.

Сценарий

В этой статье мы настроим решение, позволяющее визуализировать журналы потоков группы безопасности сети с помощью Elastic Stack. Подключаемый модуль ввода Logstash получает журналы потоков непосредственно из объекта хранилища, настроенного на хранение журналов потоков. Затем с помощью Эластичного стека журналы потоков индексируются и используются для создания панели мониторинга Kibana для визуализации информации.

На схеме показан сценарий, позволяющий визуализировать журналы потоков группы безопасности сети с помощью Эластичного стека.

Этапы

Включение журналирования потоков для группы безопасности сети

Для этого сценария в учетной записи должна быть включена функция ведения журнала потоков безопасности сети по крайней мере в одной группе безопасности сети. Инструкции по включению журналов потока безопасности сети см. в следующей статье : введение в ведение журнала потоков для групп безопасности сети.

Настройка Elastic Stack

Подключив журналы потоков NSG к Elastic Stack, мы сможем создать панель мониторинга Kibana, которая позволяет использовать журналы для поиска информации, создания диаграмм, анализа и изучения.

Установка Elasticsearch

Следующие инструкции используются для установки Elasticsearch на виртуальных машинах Ubuntu Azure. Инструкции по установке эластичного поиска в Red Hat Enterprise Linux см. в статье Install Elasticsearch with RPM.

  1. Для Elastic Stack версии 5.0 и более поздних версий требуется Java 8. Выполните команду java -version, чтобы проверить установленную версию. Если у вас нет java, ознакомьтесь с документацией по поддерживаемым Azure пакетам JDKs.

  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"
    }
    

Для получения дополнительных инструкций по установке Elasticsearch см. Инструкции по установке.

Установка Logstash

Следующие инструкции используются для установки Logstash в Ubuntu. Для получения инструкций по установке этого пакета в Red Hat Enterprise Linux смотрите статью Установка из репозиториев пакетов — 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 см. в официальной документации.

Установка подключаемого модуля ввода Logstash для Azure Blob Storage

Этот плагин Logstash позволяет напрямую обращаться к журналам потоков из указанной учетной записи для хранения. Чтобы установить этот плагин, в каталоге установки Logstash по умолчанию выполните команду:

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

Чтобы запустить Logstash, выполните приведенную ниже команду.

sudo /etc/init.d/logstash start

Дополнительные сведения об этом подключаемом модуле см. в документации.

Установка Kibana

Инструкции по установке Kibana в Red Hat Enterprise Linux см. в разделе "Установка Kibana с помощью RPM". Инструкции по установке Kibana в системах Ubuntu/Debian с помощью пакета репозитория см. в разделе "Установка Kibana" из репозитория APT.

Затем следующие инструкции были протестированы в Ubuntu и могут использоваться в разных дистрибутивах Linux, так как они не относятся к Ubuntu.

  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. В разделе "output" файла logstash.conf можно изменить шаблон индекса.

  5. Чтобы получить возможность просматривать панель мониторинга Kibana удаленно, создайте правило NSG для доступа к порту 5601.

Создание панели мониторинга Kibana

На следующем рисунке показан пример панели мониторинга, используемой для просмотра сведений и трендов в оповещениях.

рисунок 1

Загрузка файла панели мониторинга, файла визуализации и сохраненного файла поиска.

На вкладке Management (Управление) в Kibana перейдите к элементу Saved Objects (Сохраненные объекты) и импортируйте все три файла. Затем откройте вкладку Dashboard (Панель мониторинга) и загрузите пример панели мониторинга.

Вы можете также создать собственные визуализации и панели мониторинга, адаптированные к интересующим вас метрикам. Дополнительные сведения о визуализациях Kibana можно получить в официальной документации по Kibana.

Визуализация журналов потоков NSG

Пример панели мониторинга содержит несколько визуализаций для журналов потоков.

  1. "Flows by Decision Over Time" (Потоки по решению с течением времени) и "Flows by Direction Over Time" (Потоки по направлению с течением времени) — диаграммы распределения во времени, показывающие число потоков за указанный период времени. Вы можете изменить единицу измерения времени и временно́й диапазон обеих этих визуализаций. Диаграмма "Flows by Decision" (Потоки по решению) показывает соотношение решений разрешить или запретить, а диаграмма "Flows by Direction" (Потоки по направлению) — соотношение входящего и исходящего трафика. С помощью этих визуальных элементов можно изучать тенденции трафика с течением времени и искать любые пики или необычные шаблоны.

    Снимок экрана: пример панели мониторинга с потоками по решениям и направлениям с течением времени.

  2. "Flows by Destination" (Потоки по назначению) и "Flows by Source Port" (Потоки по сходному порту) — круговые диаграммы, показывающие распределение потоков по соответствующим портам. В этом представлении можно увидеть наиболее часто используемые порты. Если щелкнуть определенный порт в круговой диаграмме, остальная часть панели мониторинга отфильтровывается до потоков этого порта.

    Снимок экрана: пример панели мониторинга с потоками по назначениям и портам источника.

  3. "Number of Flows" (Число потоков) и "Earliest Log Time" (Время записи самого раннего журнала) — метрики, показывающие количество записанных потоков и дату записи самого раннего журнала.

  4. Потоки по NSG и правилу — линейчатая диаграмма, показывающая распределение потоков в каждой группе безопасности сети и распределение правил в каждой группе безопасности сети. , вы можете увидеть, какие группы безопасности сети (NSG) и правила сгенерировали наибольший трафик.

    Снимок экрана: пример панели мониторинга с потоками по ГБС и правилам.

  5. "Top 10 Source IPs" (10 наиболее используемых исходных IP-адресов) и "Top 10 Destination IPs" (10 наиболее используемых конечных IP-адресов) — гистограммы, показывающие 10 наиболее используемых исходных и конечных IP-адресов. Эти гистограммы можно настроить для отображения большего ли меньшего числа наиболее используемых IP-адресов. Здесь вы можете увидеть наиболее распространенные IP-адреса и решение о трафике (разрешить или запретить) в отношении каждого IP-адреса.

  6. Кортежи потоков — таблица, показывающая сведения, содержащиеся в каждом кортеже потока, и соответствующее NGS и правило.

С помощью строки запроса в верхней части панели мониторинга можно отфильтровать ее содержимое по любому параметру потоков, включая идентификатор подписки, группы ресурсов, правило или любую другую интересующую вас переменную. Дополнительные сведения о запросах и фильтрах Kibana см. в официальной документации

Заключение

Объединяя журналы потоков группы безопасности сети с Elastic Stack, мы создали мощный и настраиваемый способ визуализации сетевого трафика. Эти панели мониторинга позволяют быстро получать и обмениваться аналитическими сведениями о сетевом трафике, а также отфильтровывать и анализировать возможные аномалии. С помощью Kibana эти панели мониторинга можно адаптировать, чтобы создать определенные визуализации, соответствующие требованиям безопасности, аудита и соответствия.

Следующий шаг

Ознакомьтесь со статьей Visualizing Network Security Group flow logs with Power BI (Визуализация журналов потоков для групп безопасности сети с помощью Power BI).