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


Визуализация журналов потоков для групп безопасности сети Наблюдателя за сетями Azure с помощью инструментов с открытым кодом

Внимание

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

Журналы потоков группы безопасности сети предоставляют сведения, которые можно использовать для понимания входящего трафика и исходящего IP-трафика в группах безопасности сети. Эти журналы потоков отображают для каждого входящего и исходящего потока применимые правила, сетевой адаптер, к которому относится поток, информацию о 5 кортежах (исходный IP-адрес и порт, конечный 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"
    }
    

Дополнительные инструкции по установке эластичного поиска см . в инструкциях по установке.

Установка 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 для хранилища BLOB-объектов Azure

Этот подключаемый модуль 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 Over Time" (Потоки по решению с течением времени) показывает соотношение принятых решений разрешить или запретить поток, а диаграмма "Flows by Direction Over Time" (Потоки по направлению с течением времени) — соотношение входящего и исходящего трафика. С помощью этих визуальных элементов можно изучать тенденции трафика с течением времени и искать любые пики или необычные шаблоны.

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

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

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

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

    Снимок экрана: пример панели мониторинга с информацией о числе потоков и самом раннем времени в журнале.

  4. Потоки по 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).