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

Это важно

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

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

Ведение журналов потоков можно включить для нескольких групп безопасности сети. При большом количестве сетевых групп безопасности с включённым журналированием потоков, разбор и получение информации из журналов может затрудняться. В этой статье предложено решение по централизованному управлению журналами потоков для групп безопасности сети на основе Graylog (средство с открытым кодом для анализа журналов и управления ими) и Logstash (серверный конвейер с открытым кодом для обработки данных).

Предупреждение

В следующих шагах используются журналы потоков версии 1. Дополнительные сведения см. в статье Общие сведения о ведении журнала потоков для групп безопасности сети. Приведенные ниже инструкции не будут работать с файлами журнала версии 2 без изменений.

Сценарий

Чтобы включить журналы трафика для группы безопасности сети, используется Network Watcher. Журналы потоков передаются в хранилище BLOB-объектов Azure. Плагин Logstash используется для подключения и обработки журналов потоков из облачного хранилища BLOB и их отправки в Graylog. Как только потоковые логи сохраняются в Graylog, их можно анализировать и визуализировать на настраиваемых панелях мониторинга.

Рабочий процесс Graylog

Действия по установке

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

В рамках этого сценария вам нужно включить ведение журнала потоков по меньшей мере для одной группы безопасности сети в учетной записи. Инструкции по включению журналов потоков для групп безопасности сети см. в статье Introduction to flow logging for Network Security Groups (Общие сведения о журналах потоков для групп безопасности сети).

Настройка Graylog

В этом примере грейлог и Logstash настраиваются на сервере Ubuntu Server, развернутом в Azure.

  • Просмотрите документацию с пошаговыми инструкциями по установке Graylog в Ubuntu.
  • Обязательно настройте веб-интерфейс Graylog, выполнив инструкции в документации.

В этом примере используется минимальная настройка Graylog (т. е. один экземпляр Грейлога), но Грейлог может быть разработан для масштабирования между ресурсами в зависимости от потребностей системы и рабочей среды. Дополнительные сведения об архитектуре или глубоком руководстве по архитектуре см. в документации и руководстве по архитектуре Грейлога.

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

Установка Logstash

Logstash позволяет преобразовать формат журналов потоков из JSON в плоскую структуру на уровне кортежей потока. Уплощение потоковых журналов облегчает организацию и поиск журналов в Graylog. Следующие инструкции используются для установки Logstash в Ubuntu. Инструкции по установке этого пакета в Red Hat Enterprise Linux см. в разделе "Установка из репозиториев пакетов " yum".

  1. Введите следующие команды, чтобы установить Logstash.

    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg
    sudo apt-get install apt-transport-https
    echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
    sudo apt-get update && sudo apt-get install logstash
    
  2. Настройте в Logstash синтаксический анализ журналов потоков и их отправку в Graylog. Создайте файл logstash.conf.

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Добавьте в файл следующее содержимое. Измените значения storage_account_name, storage_access_key и container, чтобы отразить сведения о вашей учетной записи хранения.

     input {
         azureblob
         {
             storage_account_name => "mystorageaccount"
             storage_access_key => "NrUZmx7pJSKaRJzvQbeiZWi5nBRWOTr7Wwr9DrvK7YtDBrADYxT1y0oEExtSlkDnGRt7qcRiZzEBCCyRYND8SxSt"
             container => "insights-logs-networksecuritygroupflowevent"
             registry_create_policy => "start_over"
             codec => "json"
             file_head_bytes => 21
             file_tail_bytes => 9
             # Possible options: `do_not_break`, `with_head_tail`, `without_head_tail`
             break_json_down_policy  => 'with_head_tail'
             break_json_batch_count => 2
             interval => 5
         }
     }
    
     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]}"
         }
         add_field => {
                     "time" => "%{[records][time]}"
                     "systemId" => "%{[records][systemId]}"
                     "category" => "%{[records][category]}"
                     "resourceId" => "%{[records][resourceId]}"
                     "operationName" => "%{[records][operationName}}"
                     "Version" => "%{[records][properties][Version}}"
                     "rule" => "%{[records][properties][flows][rule]}"
                     "mac" => "%{[records][properties][flows][flows][mac]}"
         }
         convert => {"unixtimestamp" => "integer"}
         convert => {"srcPort" => "integer"}
         convert => {"destPort" => "integer"}
         add_field => { "message" => "%{Message}" }
     }
         date {
             match => ["unixtimestamp" , "UNIX"]
         }
     }
     output {
         stdout { codec => rubydebug }
         udp {
             host => "127.0.0.1"
             port => 12201
         }
     }
    

    Предоставленный файл конфигурации Logstash состоит из трех частей: данные входа, фильтр и данные выхода. В разделе входных данных указывается входной источник журналов, которые будет обрабатывать Logstash. В этом случае вы будете использовать подключаемый модуль ввода Azure BLOB (установленный на последующих шагах), который обеспечивает доступ к файлам JSON журнала потоков группы безопасности сети, хранящимся в хранилище BLOB.

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

Наконец, в разделе выходных данных каждое событие Logstash перенаправляется на сервер Graylog. Вы можете изменить файл конфигурации Logstash в соответствии со своими потребностями.

Замечание

В предыдущем файле конфигурации предполагается, что сервер Graylog настроен с петлевым IP-адресом 127.0.0.1 локального узла. В противном случае измените параметр узла в разделе выходных данных, указав правильный IP-адрес.

Дополнительные инструкции по установке Logstash см. в документации по Logstash.

Установка входного модуля Logstash для хранилища объектов BLOB Azure

Подключаемый модуль Logstash позволяет непосредственно обращаться к журналам потоков из выделенной для них учетной записи блоб-хранилища. Чтобы установить этот подключаемый модуль, из каталога установки Logstash по умолчанию (в нашем случае — /usr/share/logstash/bin) выполните следующую команду:

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

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

Настройка подключения Logstash к Graylog

Теперь установлено подключение из Logstash к журналам потоков и настроен сервер Graylog. Осталось только настроить в Graylog прием входящих файлов журнала.

  1. Откройте веб-интерфейс сервера Graylog по URL-адресу, который вы настроили для него ранее. Для доступа к интерфейсу просто откройте в веб-браузере страницу http://<graylog-server-ip>:9000/

  2. Чтобы перейти на страницу конфигурации, выберите раскрывающееся меню "Система " в верхней панели навигации справа и выберите "Входные данные". Или перейдите к http://<graylog-server-ip>:9000/system/inputs

  3. Чтобы активировать новый вход, выберите GELF UDP в раскрывающемся списке Select Input (Выбор входа) и заполните предложенную форму. GELF расшифровывается как "Graylog Extended Log Format" (расширенный формат журнала Greylog). Формат GELF разработан Graylog. Чтобы узнать больше о его преимуществах, см. документацию Graylog.

    Обязательно привяжите вход к IP-адресу, на котором вы настроили сервер Greylog. Этот IP-адрес должен совпадать с полем host выхода UDP в файле конфигурации Logstash. По умолчанию используется порт 12201. Убедитесь, что номер порта совпадает со значением в поле port (Порт), указанным в свойствах выхода UDP в файле конфигурации Logstash.

    Просмотрите документацию с дополнительными сведениями о входах для сообщений Graylog.

  4. После завершения этих настроек вы можете запустить Logstash для начала чтения журналов потоков с помощью команды sudo systemctl start logstash.service.

Поиск по сообщениям Graylog

Разрешив некоторое время для сервера Graylog собирать сообщения, вы сможете выполнять поиск по сообщениям. Чтобы проверить сообщения, отправляемые на сервер Graylog, на странице конфигурации входных данных нажмите кнопку "Показать полученные сообщения" созданного входного ввода UDP GELF.

Выберите синюю %ссылку {Message} , чтобы развернуть сообщение, чтобы отобразить параметры кортежа потока.

По умолчанию все поля сообщений включаются в поиск, если вы не выбираете определенное поле сообщения для поиска. Если вы хотите выполнить поиск определенных сообщений (т. е. кортежей потоков из определенного исходного IP-адреса), вы можете использовать язык запросов graylog в документе.

Анализ журналов потоков для групп безопасности сети с помощью Graylog

Когда система Graylog будет настроена и начнет работать, можно использовать ее функциональные возможности для анализа данных из журнала потоков. Один из методов такого анализа — создание определенного представления данных с помощью панели мониторинга.

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

  1. В верхней панели навигации выберите Dashboards (Панели мониторинга) или перейдите к http://<graylog-server-ip>:9000/dashboards/.

  2. Затем нажмите зеленую кнопку "Создать панель мониторинга " и заполните короткую форму заголовком и описанием панели мониторинга. Нажмите кнопку Save (Сохранить), чтобы создать новую панель мониторинга. Вы видите панель мониторинга, похожую на следующую картинку:

    Снимок экрана: панели мониторинга сервера Graylog с параметрами для создания и изменения панелей мониторинга.

Добавление мини-приложений

Вы можете выбрать название панели мониторинга, чтобы увидеть ее, но сейчас она пуста, так как мы не добавили никаких мини-приложений. Простым и удобным вариантом для начала работы с панелью мониторинга будет мини-приложение диаграмм Quick Values (Быстрые значения), в которых отображается список значений для выбранного поля и сведения об их распределении.

  1. Вернитесь к результатам поиска входных данных UDP, получающих журналы потоков, выбрав "Поиск " на верхней панели навигации.

  2. На панели Результаты поиска в левой части экрана найдите вкладку Поля, где перечислены разные поля каждого входящего потока кортежных сообщений.

  3. Выберите любой параметр, который нужно визуализировать (здесь выбран IP-адрес источника). Чтобы отобразить список возможных мини-приложений, щелкните синюю стрелку раскрывающегося списка слева от поля, а затем нажмите кнопку "Быстрые значения ", чтобы создать мини-приложение.

  4. Здесь можно нажать кнопку Add to dashboard (Добавить на панель мониторинга), которая расположена в правом верхнем углу окна мини-приложения, и выбрать панель мониторинга, на которую нужно добавить этот элемент.

  5. Вернитесь к панели мониторинга. Вы увидите на ней добавленное мини-приложение.

    Вы можете добавить в панель мониторинга множество других мини-приложений, таких как гистограммы и счетчики, чтобы отслеживать важные метрики.

    Дополнительные сведения о панелях мониторинга и других типах мини-приложений см. в документации Грейлога.

Интеграция Наблюдателя за сетями с Graylog обеспечивает удобное централизованное управление журналами потоков для групп безопасности сети и позволяет визуализировать данные журналов. Graylog располагает рядом мощных возможностей, таких как потоки данных и предупреждения. Они помогают в управлении журналами потоков и анализе сетевого трафика. Мы завершили настройку системы Graylog и подключили ее к Azure. Теперь можно приступать к изучению ее функций.

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