Visualizzare i log dei flussi dei gruppi di sicurezza di rete di Azure Network Watcher con strumenti open sourceVisualize Azure Network Watcher NSG flow logs using open source tools

I log dei flussi dei gruppi di sicurezza di rete contengono informazioni utili per comprendere il traffico IP in ingresso e in uscita nei gruppi di sicurezza di rete.Network Security Group flow logs provide information that can be used understand ingress and egress IP traffic on Network Security Groups. Questi log mostrano i flussi in ingresso e in uscita in base alle regole, alla scheda di interfaccia di rete a cui si applica il flusso, a informazioni a 5 tuple sul flusso (IP di origine/destinazione, porta di origine/destinazione e protocollo) e al fatto che il traffico sia stato consentito o rifiutato.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.

Analizzare manualmente i log dei flussi e ottenerne informazioni significative può essere difficile.These flow logs can be difficult to manually parse and gain insights from. Esistono tuttavia diversi strumenti open source che possono semplificare la visualizzazione di questi dati.However, there are several open source tools that can help visualize this data. Questo articolo presenta una soluzione per visualizzare questi log con Elastic Stack, che consentirà di indicizzare e visualizzare rapidamente i log dei flussi in un 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

In questo articolo si configurerà una soluzione che consentirà di visualizzare i log dei flussi dei gruppi di sicurezza di rete con Elastic Stack.In this article, we will set up a solution that will allow you to visualize Network Security Group flow logs using the Elastic Stack. Un plug-in di input Logstash otterrà i log dei flussi direttamente dal BLOB del servizio di archiviazione configurato per contenerli.A Logstash input plugin will obtain the flow logs directly from the storage blob configured for containing the flow logs. Successivamente, con Elastic Stack, i log dei flussi verranno indicizzati e usati per creare un dashboard Kibana per visualizzare le informazioni.Then, using the Elastic Stack, the flow logs will be indexed and used to create a Kibana dashboard to visualize the information.

scenario

PassiSteps

Abilitare la registrazione dei flussi dei gruppi di sicurezza di reteEnable Network Security Group flow logging

Per questo scenario, è necessario abilitare la registrazione dei flussi dei gruppi di sicurezza di rete in almeno un gruppo di sicurezza di rete nel proprio account.For this scenario, you must have Network Security Group Flow Logging enabled on at least one Network Security Group in your account. Per istruzioni in proposito, vedere Introduzione alla registrazione dei flussi per i gruppi di sicurezza di rete.For instructions on enabling Network Security Flow Logs, refer to the following article Introduction to flow logging for Network Security Groups.

Configurare Elastic StackSet up the Elastic Stack

Connettendo i log dei flussi dei gruppi di sicurezza di rete con Elastic Stack, è possibile creare un dashboard Kibana che consente di eseguire ricerche e analisi, creare grafici e ottenere informazioni significative dai log.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.

Installare ElasticsearchInstall Elasticsearch

  1. Elastic Stack versione 5.0 e successive richiede Java 8.The Elastic Stack from version 5.0 and above requires Java 8. Eseguire il comando java -version per controllare la versione in uso.Run the command java -version to check your version. Se Java non è installato, vedere la documentazione sul sito Web OracleIf you do not have java install, refer to documentation on Oracle's website
  2. Scaricare il pacchetto binario corretto per il proprio 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
    

    Per altri metodi di installazione, vedere Elasticsearch Installation (Installazione di Elasticsearch)Other installation methods can be found at Elasticsearch Installation

  3. Verificare che Elasticsearch sia in esecuzione con questo comando:Verify that Elasticsearch is running with the command:

    curl http://127.0.0.1:9200
    

    La risposta visualizzata sarà simile a questa: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"
    }
    

Per altre istruzioni sull'installazione di Elasticsearch, vedere la pagina Installation (Installazione)For further instructions on installing Elastic search, refer to the page Installation

Installare LogstashInstall Logstash

  1. Per installare Logstash, eseguire questi comandi: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. Successivamente è necessario configurare Logstash per accedere ai log dei flussi e analizzarli.Next we need to configure Logstash to access and parse the flow logs. Creare un file logstash.conf usando:Create a logstash.conf file using:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Aggiungere il contenuto seguente al file: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/en-us/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]}"
                 }
    convert => {"unixtimestamp" => "integer"}
    convert => {"srcPort" => "integer"}
    convert => {"destPort" => "integer"}        
    }
    
    date{
     match => ["unixtimestamp" , "UNIX"]
    }
    }
    output {
    stdout { codec => rubydebug }
    elasticsearch {
     hosts => "localhost"
     index => "nsg-flow-logs"
    }
    }  
    

Per altre istruzioni sull'installazione di Logstash, vedere la documentazione ufficialeFor further instructions on installing Logstash, refer to the official documentation

Installare il plug-in di input Logstash per l'archiviazione BLOB di AzureInstall the Logstash input plugin for Azure blob storage

Questo plug-in Logstash consentirà di accedere direttamente ai log dei flussi dall'account di archiviazione designato.This Logstash plugin will allow you to directly access the flow logs from their designated storage account. Per installare questo plug-in, nella directory di installazione Logstash predefinita (in questo caso /usr/share/logstash/bin) eseguire il 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

Per avviare Logstash, eseguire questo comando:To start Logstash run the command:

sudo /etc/init.d/logstash start

Per altre informazioni sul plug-in, vedere la documentazione quiFor more information about this plugin, refer to documentation here

Installare KibanaInstall Kibana

  1. Eseguire questi comandi per installare 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. Per eseguire Kibana, usare questi comandi:To run Kibana use the commands:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Per visualizzare l'interfaccia Web di Kibana, passare a http://localhost:5601To view your Kibana web interface, navigate to http://localhost:5601

  4. Per questo scenario, il modello di indice usato per i log dei flussi è "nsg-flow-logs".For this scenario, the index pattern used for the flow logs is "nsg-flow-logs". È possibile modificare il modello di indice nella sezione "output" del file logstash.conf.You may change the index pattern in the "output" section of your logstash.conf file.

  5. Per visualizzare il dashboard Kibana in remoto, creare una regola dei gruppi di sicurezza di rete in ingresso che consenta l'accesso alla porta 5601.If you want to view the Kibana dashboard remotely, create an inbound NSG rule allowing access to port 5601.

Creare un dashboard KibanaCreate a Kibana dashboard

Per questo articolo, è stato fornito un dashboard di esempio per visualizzare tendenze e dettagli degli avvisi.For this article, we have provided a sample dashboard for you to view trends and details in your alerts.

Figura 1

  1. Scaricare il file del dashboard qui, il file delle visualizzazioni qui e il file della ricerca salvata qui.Download the dashboard file here, the visualization file here, and the saved search file here.

  2. Nella scheda Management (Gestione) di Kibana passare a Saved Objects (Oggetti salvati) e importare tutti e tre i file.Under the Management tab of Kibana, navigate to Saved Objects and import all three files. Dalla scheda Dashboard è quindi possibile aprire e caricare il dashboard di esempio.Then from the Dashboard tab you can open and load the sample dashboard.

È anche possibile creare visualizzazioni e dashboard personalizzati per le metriche a cui si è interessati.You can also create your own visualizations and dashboards tailored towards metrics of your own interest. Per altre informazioni sulla creazione di visualizzazioni Kibana, vedere la documentazione ufficiale di Kibana.Read more about creating Kibana visualizations from Kibana's official documentation.

Visualizzare i log dei flussi dei gruppi di sicurezza di reteVisualize NSG flow logs

Il dashboard di esempio offre diverse visualizzazioni dei log dei flussi.The sample dashboard provides several visualizations of the flow logs:

  1. Flussi per decisione/direzione nel tempo: grafici di serie temporali che mostrano il numero dei flussi nel periodo di tempo specificato.Flows by Decision/Direction Over Time - time series graphs showing the number of flows over the time period. È possibile modificare l'unità di tempo e l'intervallo di entrambe queste visualizzazioni.You can edit the unit of time and span of both these visualizations. Il grafico dei flussi per decisione mostra la proporzione tra le decisioni di consentire e di rifiutare il traffico che sono state prese, mentre quello dei flussi per direzione mostra la proporzione tra traffico in ingresso e in uscita.Flows by Decision shows the proportion of allow or deny decisions made, while Flows by Direction shows the proportion of inbound and outbound traffic. Questi oggetti visivi consentono di esaminare le tendenze del traffico nel tempo e individuare eventuali picchi o modelli insoliti.With these visuals you can examine traffic trends over time and look for any spikes or unusual patterns.

    Figura 2

  2. Flussi per porta di origine/destinazione: grafici a torta che mostrano la suddivisione dei flussi sulle rispettive porte.Flows by Destination/Source Port – pie charts showing the breakdown of flows to their respective ports. Questa visualizzazione consente di verificare le porte più usate.With this view you can see your most commonly used ports. Facendo clic su una porta specifica nel grafico a torta, il resto del dashboard viene filtrato in modo da visualizzare i flussi di tale 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.

    Figura 3

  3. Numero di flussi e data e ora del primo log: metriche che mostrano il numero di flussi registrato e la data del primo log acquisito.Number of Flows and Earliest Log Time – metrics showing you the number of flows recorded and the date of the earliest log captured.

    Figura 4

  4. Flussi per gruppo di sicurezza di rete e regola: grafico a barre che mostra la distribuzione dei flussi in ogni gruppo di sicurezza di rete nonché la distribuzione delle regole all'interno di ogni gruppo.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. Questo grafico consente di determinare il gruppo di sicurezza di rete e le regole che hanno generato la maggiore quantità di traffico.From here you can see which NSG and rules generated the most traffic.

    Figura 5

  5. 10 principali IP di origine/destinazione: grafici a barre che mostrano i 10 principali indirizzi IP di origine e di destinazione.Top 10 Source/Destination IPs – bar charts showing the top 10 source and destination IPs. È possibile modificare i grafici in modo da visualizzare un numero maggiore o minore di indirizzi IP principali.You can adjust these charts to show more or less top IPs. Questi grafici consentono di rilevare gli indirizzi IP più ricorrenti nonché le decisioni di consentire o rifiutare il traffico prese nei confronti di ogni 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.

    Figura 6

  6. Tuple dei flussi: questa tabella mostra le informazioni contenute in ogni tupla dei flussi, nonché il gruppo di sicurezza di rete e la regola corrispondenti.Flow Tuples – this table shows you the information contained within each flow tuple, as well as its corresponding NGS and rule.

    Figura 7

Usando la barra per le query nella parte superiore è possibile filtrare il dashboard in base a qualsiasi parametro dei flussi, come ID sottoscrizione, gruppi di risorse, regola o qualsiasi altra variabile a cui si è interessati.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. Per altre informazioni su query e filtri di Kibana, vedere la documentazione ufficialeFor more about Kibana's queries and filters, refer to the official documentation

ConclusioneConclusion

Combinando i log dei flussi dei gruppi di sicurezza di rete con Elastic Stack, si è ottenuto uno strumento personalizzabile ed efficace per visualizzare il traffico di rete.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. Questi dashboard consentono di ottenere e condividere rapidamente informazioni significative sul traffico di rete, nonché di applicare filtri e ricercare potenziali anomalie.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, è possibile personalizzare i dashboard e creare visualizzazioni specifiche per soddisfare qualsiasi esigenza in termini di sicurezza, controllo e conformità.Using Kibana, you can tailor these dashboards and create specific visualizations to meet any security, audit, and compliance needs.

Passaggi successiviNext steps

Per informazioni su come visualizzare i log dei flussi dei gruppi di sicurezza di rete con Power BI, vedere Visualizzare i log dei flussi dei gruppi di sicurezza di rete con Power BILearn how to visualize your NSG flow logs with Power BI by visiting Visualize NSG flows logs with Power BI