Visualizzare i log dei flussi dei gruppi di sicurezza di rete di Azure Network Watcher con strumenti open source

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. Questi log mostrano i flussi in ingresso e in uscita in base a regole, la scheda di rete a cui si applica il flusso, informazioni a 5 tuple sul flusso, ad esempio l'indirizzo IP di origine/destinazione, la porta di origine/destinazione o il protocollo, e se il traffico è stato consentito o negato.

Analizzare manualmente i log dei flussi e ottenerne informazioni significative può essere difficile. Esistono tuttavia diversi strumenti open source che possono semplificare la visualizzazione di questi dati. 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.

Scenario

In questo articolo delineiamo una soluzione che consente di visualizzare i log dei flussi dei gruppi di sicurezza di rete con Elastic Stack. Un plug-in di input Logstash ottiene i log dei flussi direttamente dal BLOB del servizio di archiviazione configurato per contenerli. Successivamente, con Elastic Stack, i log dei flussi verranno indicizzati e usati per creare un dashboard Kibana per visualizzare le informazioni.

Il diagramma mostra uno scenario che consente di visualizzare i log dei flussi dei gruppi di sicurezza di rete usando Elastic Stack.

Passaggi

Abilitare la registrazione dei flussi dei gruppi di sicurezza di rete

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. Per istruzioni in proposito, vedere Introduzione alla registrazione dei flussi per i gruppi di sicurezza di rete.

Configurare 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.

Installare Elasticsearch

Le istruzioni seguenti vengono usate per installare Elasticsearch in macchine virtuali Ubuntu di Azure. Per istruzioni su come installare la ricerca elastica in Red Hat Enterprise Linux, vedere Installare Elasticsearch con RPM.

  1. Elastic Stack versione 5.0 e successive richiede Java 8. Eseguire il comando java -version per controllare la versione in uso. Se Java non è installato, vedere la documentazione sui JDK supportati da Azure.

  2. Scaricare il pacchetto binario corretto per il proprio sistema:

    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)

  3. Verificare che Elasticsearch sia in esecuzione con questo comando:

    curl http://127.0.0.1:9200
    

    La risposta dovrebbe essere simile alla seguente:

    {
    "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 Istruzioni di installazione.

Installare Logstash

Le istruzioni seguenti vengono usate per installare Logstash in Ubuntu. Per istruzioni su come installare questo pacchetto in Red Hat Enterprise Linux, vedere l'articolo Installazione da repository di pacchetti - yum.

  1. Per installare Logstash, eseguire questi comandi:

    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. Creare un file logstash.conf usando:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Aggiungere il seguente contenuto nel file:

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

Per altre istruzioni sull'installazione di Logstash, vedere la documentazione ufficiale.

Installare il plug-in di input Logstash per l'archiviazione BLOB di Azure

Questo plug-in Logstash consente di accedere direttamente ai log di flusso dall'account di archiviazione designato. Per installare questo plug-in, dalla directory di installazione predefinita Logstash eseguire il comando:

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

Per avviare Logstash, eseguire questo comando:

sudo /etc/init.d/logstash start

Per altre informazioni su questo plug-in, vedere la documentazione.

Installare Kibana

Per istruzioni su come installare Kibana in Red Hat Enterprise Linux, vedere Installare Kibana con RPM. Per istruzioni su come installare Kibana nei sistemi Ubuntu/Debian usando un pacchetto di repository, vedere Installare Kibana dal repository APT.

Le istruzioni seguenti sono state quindi testate in Ubuntu e possono essere usate in distribuzioni Linux diverse perché non sono specifiche di Ubuntu.

  1. Eseguire questi comandi per installare 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:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Per visualizzare l'interfaccia Web di Kibana, passare a http://localhost:5601

  4. Per questo scenario, il modello di indice usato per i log dei flussi è "nsg-flow-logs". È possibile modificare il modello di indice nella sezione "output" del file logstash.conf.

  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.

Creare un dashboard Kibana

Un dashboard di esempio per visualizzare le tendenze e i dettagli degli avvisi è illustrato nell'immagine seguente:

Figura 1

Scaricare il file del dashboard, il file delle visualizzazioni e il file della ricerca salvata.

Nella scheda Management (Gestione) di Kibana passare a Saved Objects (Oggetti salvati) e importare tutti e tre i file. Dalla scheda Dashboard è quindi possibile aprire e caricare il dashboard di esempio.

È anche possibile creare visualizzazioni e dashboard personalizzati per le metriche a cui si è interessati. Per altre informazioni sulla creazione di visualizzazioni Kibana, vedere la documentazione ufficiale di Kibana.

Visualizzare i log dei flussi dei gruppi di sicurezza di rete

Il dashboard di esempio offre diverse visualizzazioni dei log dei flussi.

  1. Flussi per decisione/direzione nel tempo: grafici di serie temporali che mostrano il numero dei flussi nel periodo di tempo specificato. È possibile modificare l'unità di tempo e l'intervallo di entrambe queste visualizzazioni. 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. Questi oggetti visivi consentono di esaminare le tendenze del traffico nel tempo e individuare eventuali picchi o modelli insoliti.

    Screenshot che mostra una dashboard di esempio con flussi per decisione e direzione nel tempo.

  2. Flussi per porta di origine/destinazione: grafici a torta che mostrano la suddivisione dei flussi sulle rispettive porte. Questa visualizzazione consente di verificare le porte più usate. Facendo clic su una porta specifica nel grafico a torta, il resto della dashboard viene filtrato in modo da visualizzare i flussi di tale porta.

    Screenshot che mostra una dashboard di esempio con flussi per destinazione e porta di origine.

  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.

    Screenshot che mostra una dashboard di esempio con il numero di flussi e l'ora del log meno recente.

  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 e la distribuzione delle regole all'interno di ogni gruppo. Questo grafico consente di determinare il gruppo di sicurezza di rete e le regole che hanno generato la maggiore quantità di traffico.

    Screenshot che mostra una dashboard di esempio con flussi in base a N S G e regola.

  5. 10 principali IP di origine/destinazione: grafici a barre che mostrano i 10 principali indirizzi IP di origine e di destinazione. È possibile modificare i grafici in modo da visualizzare un numero maggiore o minore di indirizzi IP principali. Questi grafici consentono di rilevare gli indirizzi IP più ricorrenti e le decisioni di consentire o rifiutare il traffico prese nei confronti di ogni IP.

    Screenshot che mostra una dashboard di esempio con flussi in base ai primi dieci indirizzi I P di origine e destinazione.

  6. Tuple dei flussi: questa tabella mostra le informazioni contenute in ogni tupla dei flussi e il gruppo di sicurezza di rete e la regola corrispondenti.

    Screenshot che mostra le tuple dei flussi in una tabella.

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. Per altre informazioni su query e filtri di Kibana, vedere la documentazione ufficiale

Conclusione

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. Queste dashboard consentono di ottenere e condividere rapidamente informazioni significative sul traffico di rete, nonché di applicare filtri e ricercare potenziali anomalie. Usando Kibana, è possibile personalizzare i dashboard e creare visualizzazioni specifiche per soddisfare qualsiasi esigenza in termini di sicurezza, controllo e conformità.

Passaggi successivi

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 BI