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

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux vicina allo stato end of life (EOL). Prendere in considerazione l'uso e la pianificazione di conseguenza. Per altre informazioni, vedere le linee guida per la fine della vita di CentOS.

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 offre una soluzione per visualizzare questi log usando Elastic Stack, che consente di indicizzare e visualizzare rapidamente i log dei flussi in un dashboard Kibana.

Scenario

In questo articolo viene configurata una soluzione che consente di visualizzare i log dei flussi del gruppo di sicurezza di rete usando Elastic Stack. Un plug-in di input Logstash ottiene i log del flusso direttamente dal BLOB di archiviazione configurato per contenere i log del flusso. Quindi, usando Elastic Stack, i log dei flussi vengono 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 del gruppo 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 sull'abilitazione dei log dei flussi di sicurezza di rete, vedere l'articolo 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 nelle distribuzioni RHEL/CentOS, 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 suppored di 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
    

    Verrà visualizzata una risposta 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 Ricerca elastica, vedere Istruzioni di installazione.

Installare Logstash

Le istruzioni seguenti vengono usate per installare Logstash in Ubuntu. Per istruzioni su come installare questo pacchetto in RHEL/CentOS, 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://learn.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"
      }
    }
    

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 dei flussi 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 nei sistemi RHEL/CentOS, 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. Con questi oggetti visivi, è possibile esaminare le tendenze del traffico nel tempo e cercare eventuali picchi o modelli insoliti.

    Screenshot che mostra un 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. Con questa visualizzazione è possibile visualizzare le porte più usate. Se si fa clic su una porta specifica all'interno del grafico a torta, il resto del dashboard filtra i flussi di tale porta.

    Screenshot che mostra un 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 un 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: un grafico a barre che mostra la distribuzione dei flussi all'interno di ogni gruppo di sicurezza di rete e la distribuzione delle regole all'interno di ogni gruppo di sicurezza di rete. , è possibile visualizzare i gruppi di sicurezza di rete e le regole che hanno generato il maggior traffico.

    Screenshot che mostra un 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. Da qui è possibile visualizzare gli INDIRIZZI IP più comuni e la decisione del traffico (consentire o negare) da prendere per ogni IP.

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

  6. Tuple di flusso: questa tabella mostra le informazioni contenute all'interno di ogni tupla del flusso e la corrispondente regola e NGS.

    Screenshot che mostra le tuple di flusso 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 sulle query e i 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. Questi dashboard consentono di ottenere e condividere rapidamente informazioni dettagliate sul traffico di rete e di filtrare e analizzare eventuali anomalie potenziali. 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