Visualizar registos do fluxo do NSG do Observador de Rede do Azure com ferramentas open-sourceVisualize Azure Network Watcher NSG flow logs using open source tools

Os registos de fluxo do Grupo de Segurança de Rede fornecem informações que podem ser utilizadas compreendem o tráfego IP de entrada e saída em Grupos de Segurança de Rede.Network Security Group flow logs provide information that can be used understand ingress and egress IP traffic on Network Security Groups. Estes registos de fluxo mostram fluxos de saída e de entrada numa base de regra, o NIC o fluxo aplica-se a 5 informações sobre o fluxo (Source/Destination IP, Source/Destination Port, Protocol), e se o tráfego foi permitido ou negado.These flow logs show outbound and inbound flows on a per rule basis, the NIC the flow applies to, 5 tuple information about the flow (Source/Destination IP, Source/Destination Port, Protocol), and if the traffic was allowed or denied.

Estes registos de fluxo podem ser difíceis de analisar manualmente e obter insights de.These flow logs can be difficult to manually parse and gain insights from. No entanto, existem várias ferramentas de código aberto que podem ajudar a visualizar estes dados.However, there are several open source tools that can help visualize this data. Este artigo fornecerá uma solução para visualizar estes troncos usando a Pilha Elástica, que lhe permitirá indexar e visualizar rapidamente os seus registos de fluxo num dashboard kibana.This article will provide a solution to visualize these logs using the Elastic Stack, which will allow you to quickly index and visualize your flow logs on a Kibana dashboard.

ScenarioScenario

Neste artigo, vamos criar uma solução que lhe permitirá visualizar os registos de fluxo do Grupo de Segurança de Rede utilizando a Pilha Elástica.In this article, we will set up a solution that will allow you to visualize Network Security Group flow logs using the Elastic Stack. Um plugin de entrada logstash obtém os registos de fluxo diretamente da bolha de armazenamento configurada para conter os registos de fluxo.A Logstash input plugin will obtain the flow logs directly from the storage blob configured for containing the flow logs. Em seguida, usando a Pilha Elástica, os registos de fluxo serão indexados e usados para criar um dashboard Kibana para visualizar a informação.Then, using the Elastic Stack, the flow logs will be indexed and used to create a Kibana dashboard to visualize the information.

O diagrama mostra um cenário que permite visualizar os registos de fluxo do Grupo de Segurança de Rede utilizando a Pilha Elástica.

PassosSteps

Ativar a registo de fluxo do Grupo de Segurança de RedeEnable Network Security Group flow logging

Para este cenário, deve ter o Fluxo de Fluxo de Rede ativado em pelo menos um Grupo de Segurança de Rede na sua conta.For this scenario, you must have Network Security Group Flow Logging enabled on at least one Network Security Group in your account. Para obter instruções sobre a ativação dos registos de fluxo de segurança da rede, consulte o seguinte artigo Introdução à registo de fluxo para grupos de segurança da rede.For instructions on enabling Network Security Flow Logs, refer to the following article Introduction to flow logging for Network Security Groups.

Configurar a Pilha ElásticaSet up the Elastic Stack

Ao ligar os registos de fluxo NSG com a Pilha Elástica, podemos criar um dashboard Kibana que nos permite pesquisar, grafar, analisar e obter insights dos nossos registos.By connecting NSG flow logs with the Elastic Stack, we can create a Kibana dashboard what allows us to search, graph, analyze, and derive insights from our logs.

Instalar o elásticoInstall Elasticsearch

  1. A Pilha Elástica da versão 5.0 ou superior requer Java 8.The Elastic Stack from version 5.0 and above requires Java 8. Verifique o comando java -version para verificar a sua versão.Run the command java -version to check your version. Se não tiver java instalado, consulte a documentação sobre os JDKs suposos do Azure.If you do not have java installed, refer to documentation on the Azure-suppored JDKs.

  2. Descarregue o pacote binário correto para o seu sistema:Download the correct binary package for your system:

    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
    

    Outros métodos de instalação podem ser encontrados na Instalação ElasticsearchOther installation methods can be found at Elasticsearch Installation

  3. Verifique se o elasticsearch está a funcionar com o comando:Verify that Elasticsearch is running with the command:

    curl http://127.0.0.1:9200
    

    Deve ver uma resposta semelhante a esta:You should see a response similar to this:

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

Para obter mais instruções sobre a instalação da busca elástica, consulte as instruções de instalação.For further instructions on installing Elastic search, refer to Installation instructions.

Instalar LogstashInstall Logstash

  1. Para instalar o Logstash, executar os seguintes comandos:To install Logstash run the following commands:

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Em seguida, precisamos configurar logstash para aceder e analisar os registos de fluxo.Next we need to configure Logstash to access and parse the flow logs. Criar um ficheiro logstash.conf utilizando:Create a logstash.conf file using:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Adicione o seguinte conteúdo ao ficheiro:Add the following content to the file:

    input {
       azureblob
         {
             storage_account_name => "mystorageaccount"
             storage_access_key => "VGhpcyBpcyBhIGZha2Uga2V5Lg=="
             container => "insights-logs-networksecuritygroupflowevent"
             codec => "json"
             # Refer https://docs.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"
      }
    }  
    

Para obter mais instruções sobre a instalação do Logstash, consulte a documentação oficial.For further instructions on installing Logstash, refer to the official documentation.

Instale o plugin de entrada Logstash para armazenamento de bolhas AzureInstall the Logstash input plugin for Azure blob storage

Este plugin Logstash permitir-lhe-á aceder diretamente aos registos de fluxo da sua conta de armazenamento designada.This Logstash plugin will allow you to directly access the flow logs from their designated storage account. Para instalar este plugin, a partir do diretório de instalação de Logstash predefinido (neste caso /usr/share/logstash/bin) executar o comando:To install this plugin, from the default Logstash installation directory (in this case /usr/share/logstash/bin) run the command:

logstash-plugin install logstash-input-azureblob

Para iniciar o Logstash, executar o comando:To start Logstash run the command:

sudo /etc/init.d/logstash start

Para obter mais informações sobre este plugin, consulte a documentação.For more information about this plugin, refer to the documentation.

Instalar o KibanaInstall Kibana

  1. Executar os seguintes comandos para instalar Kibana:Run the following commands to install 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. Para executar Kibana use os comandos:To run Kibana use the commands:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Para ver a sua interface web Kibana, navegue para http://localhost:5601To view your Kibana web interface, navigate to http://localhost:5601

  4. Para este cenário, o padrão de índice utilizado para os registos de fluxo é "nsg-flow-logs".For this scenario, the index pattern used for the flow logs is "nsg-flow-logs". Pode alterar o padrão de índice na secção "saída" do seu ficheiro logstash.conf.You may change the index pattern in the "output" section of your logstash.conf file.

  5. Se quiser ver o painel kibana remotamente, crie uma regra NSG de entrada que permite o acesso à porta 5601.If you want to view the Kibana dashboard remotely, create an inbound NSG rule allowing access to port 5601.

Criar um painel kibanaCreate a Kibana dashboard

Um painel de amostras para visualizar tendências e detalhes nos seus alertas é mostrado na seguinte imagem:A sample dashboard to view trends and details in your alerts is shown in the following picture:

figura 1

Descarregue o ficheiro do dashboard,o ficheiro de visualizaçãoe o ficheiro de pesquisa guardado.Download the dashboard file, the visualization file, and the saved search file.

Sob o separador Gestão de Kibana, navegue para Objetos Guardados e importe os três ficheiros.Under the Management tab of Kibana, navigate to Saved Objects and import all three files. Em seguida, a partir do separador Dashboard pode abrir e carregar o painel de amostras.Then from the Dashboard tab you can open and load the sample dashboard.

Também pode criar as suas próprias visualizações e dashboards adaptados para métricas do seu próprio interesse.You can also create your own visualizations and dashboards tailored towards metrics of your own interest. Leia mais sobre a criação de visualizações de Kibana a partir da documentação oficialde Kibana .Read more about creating Kibana visualizations from Kibana's official documentation.

Visualizar registos de fluxo NSGVisualize NSG flow logs

O painel de amostras fornece várias visualizações dos registos de fluxo:The sample dashboard provides several visualizations of the flow logs:

  1. Fluxos por Decisão/Direção Ao longo do tempo - gráficos de séries de tempo que mostram o número de fluxos ao longo do período de tempo.Flows by Decision/Direction Over Time - time series graphs showing the number of flows over the time period. Pode editar a unidade de tempo e de extensão de ambas as visualizações.You can edit the unit of time and span of both these visualizations. Os fluxos por decisão mostram a proporção de permitir ou negar decisões tomadas, enquanto flows by Direction mostra a proporção de tráfego de entrada e saída.Flows by Decision shows the proportion of allow or deny decisions made, while Flows by Direction shows the proportion of inbound and outbound traffic. Com estes visuais pode examinar as tendências de tráfego ao longo do tempo e procurar quaisquer picos ou padrões incomuns.With these visuals you can examine traffic trends over time and look for any spikes or unusual patterns.

    A screenshot mostra um painel de amostras com fluxos por decisão e direção ao longo do tempo.

  2. Flows by Destination/Source Port – gráficos de tartes que mostram a repartição dos fluxos para as respetivas portas.Flows by Destination/Source Port – pie charts showing the breakdown of flows to their respective ports. Com esta vista pode ver os seus portos mais utilizados.With this view you can see your most commonly used ports. Se clicar numa porta específica dentro do gráfico de tartes, o resto do painel filtrar-se-á até aos fluxos dessa porta.If you click on a specific port within the pie chart, the rest of the dashboard will filter down to flows of that port.

    A screenshot mostra um painel de amostras com fluxos por destino e porta de origem.

  3. Número de Fluxos e Início do Tempo de Registo – métricas que mostram o número de fluxos registados e a data do primeiro registo capturado.Number of Flows and Earliest Log Time – metrics showing you the number of flows recorded and the date of the earliest log captured.

    A screenshot mostra um painel de amostras com o número de fluxos e a hora de início do registo.

  4. Flows by NSG and Rule – um gráfico de barras que mostra a distribuição dos fluxos dentro de cada NSG, bem como a distribuição de regras dentro de cada NSG.Flows by NSG and Rule – a bar graph showing you the distribution of flows within each NSG, as well as the distribution of rules within each NSG. A partir daqui você pode ver quais NSG e regras geraram mais tráfego.From here you can see which NSG and rules generated the most traffic.

    A screenshot mostra um painel de amostras com fluxos por N S G e regra.

  5. Top 10 IPs de Origem/Destino – gráficos de barras que mostram os 10 melhores IPs de origem e destino.Top 10 Source/Destination IPs – bar charts showing the top 10 source and destination IPs. Pode ajustar estes gráficos para mostrar mais ou menos iPs de topo.You can adjust these charts to show more or less top IPs. A partir daqui pode ver os IPs mais comumente ocorrentes, bem como a decisão de tráfego (permitir ou negar) sendo tomada em relação a cada IP.From here you can see the most commonly occurring IPs as well as the traffic decision (allow or deny) being made towards each IP.

    A screenshot mostra um painel de amostras com fluxos pelos dez principais endereços de origem e destino I P.

  6. Flow Tuples – esta tabela mostra-lhe as informações contidas em cada tuple de fluxo, bem como as respetivas NGS e regra.Flow Tuples – this table shows you the information contained within each flow tuple, as well as its corresponding NGS and rule.

    A screenshot mostra tuples de fluxo numa mesa.

Utilizando a barra de consulta na parte superior do painel de instrumentos, pode filtrar o painel de instrumentos com base em qualquer parâmetro dos fluxos, tais como ID de subscrição, grupos de recursos, regra ou qualquer outra variável de interesse.Using the query bar at the top of the dashboard, you can filter down the dashboard based on any parameter of the flows, such as subscription ID, resource groups, rule, or any other variable of interest. Para saber mais sobre as consultas e filtros de Kibana, consulte a documentação oficialFor more about Kibana's queries and filters, refer to the official documentation

ConclusãoConclusion

Ao combinar os registos de fluxo do Grupo de Segurança de Rede com a Pilha Elástica, criámos uma forma poderosa e personalizável de visualizar o tráfego da nossa rede.By combining the Network Security Group flow logs with the Elastic Stack, we have come up with powerful and customizable way to visualize our network traffic. Estes dashboards permitem-lhe obter e partilhar rapidamente informações sobre o tráfego da sua rede, bem como filtrar e investigar quaisquer anomalias potenciais.These dashboards allow you to quickly gain and share insights about your network traffic, as well as filter down and investigate on any potential anomalies. Usando Kibana, você pode personalizar estes dashboards e criar visualizações específicas para atender a quaisquer necessidades de segurança, auditoria e conformidade.Using Kibana, you can tailor these dashboards and create specific visualizations to meet any security, audit, and compliance needs.

Passos seguintesNext steps

Saiba como visualizar os seus registos de fluxo NSG com Power BI visitando registos de fluxos NSG do Visualize com Power BILearn how to visualize your NSG flow logs with Power BI by visiting Visualize NSG flows logs with Power BI