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

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию конца жизни (EOL). Пожалуйста, рассмотрите возможность использования и планирования соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

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

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

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

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

Сценарий

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

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

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

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

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

Установка Graylog

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

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

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

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

Установка Logstash

Logstash позволяет преобразовать формат журналов потоков из JSON в плоскую структуру на уровне кортежей потока. Такое преобразование упрощает размещение журналов в Graylog и поиск по ним. Следующие инструкции используются для установки Logstash в Ubuntu. Инструкции по установке этого пакета в RHEL/CentOS см . в статье об установке из репозиториев пакетов — 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_access_keyи container значения, чтобы отразить сведения о учетной storage_account_nameзаписи хранения:

     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 (установленный на следующих шагах), который позволяет нам получить доступ к файлам 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. Чтобы перейти к странице настройки, откройте раскрывающееся меню System (Система) на верхней панели навигации справа и нажмите кнопку Inputs (Входы). Также можно использовать элемент http://<graylog-server-ip>:9000/system/inputs

    Начало работы

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

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

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

    Сразу после активации входа сведения о нем отобразятся в разделе Local inputs (Локальные входы), как показано на следующем изображении.

    Снимок экрана: раздел локальных входов, содержащий запущенный вход.

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

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

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

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

Снимок экрана: сервер Graylog с результатами поиска, гистограммой и сообщениями.

Щелкнув синюю ссылку "%{Message}", разверните каждое сообщение, чтобы отобразить параметры каждого кортежа потока, как показано на следующем рисунке:

Снимок экрана: подробные сведения о сообщении с сервера Graylog.

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

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

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

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

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

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

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

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

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

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

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

  3. Выберите любой параметр, который нужно визуализировать (здесь выбран IP-адрес источника). Щелкните синюю стрелку раскрывающегося списка слева от поля, чтобы отобразился полный список мини-приложений, и выберите элемент Quick Values (Быстрые значения) для создания мини-приложения. Результат будет выглядеть примерно так:

    Исходный IP-адрес

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

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

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

    Панель мониторинга для журналов потоков

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

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

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

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