Condividi tramite


Gestire e analizzare i log di flusso dei gruppi di sicurezza di rete in Azure con Network Watcher e Graylog

I log di flusso dei gruppi di sicurezza di rete contengono informazioni che è possibile usare per conoscere il traffico IP in ingresso e in uscita per le interfacce di rete di Azure. I log di flusso indicano i flussi in ingresso e in uscita in base a regole del gruppo di sicurezza, l'interfaccia di rete cui si applica il flusso, informazioni su 5 tuple relative al flusso (IP di origine/destinazione, porta di origine/destinazione, protocollo) e se il traffico è consentito o meno.

Nella rete possono essere presenti molti gruppi di sicurezza per cui la registrazione del flusso è abilitata e di conseguenza l'analisi e l'acquisizione di informazioni approfondite dai log può risultare difficile. Questo articolo offre una soluzione per la gestione centralizzata dei log di flusso dei gruppi di sicurezza di rete grazie a Graylog, uno strumento open source di analisi e di gestione dei log, e a Logstash, una pipeline open source di elaborazione dei dati lato server.

Avviso

I passaggi seguenti usano i log dei flussi versione 1. Per informazioni dettagliate, vedere Introduzione alla registrazione dei flussi per i gruppi di sicurezza di rete. Le istruzioni seguenti non funzioneranno con la versione 2 dei file di log, senza modifica.

Scenario

I log di flusso dei gruppi di sicurezza di rete vengono abilitati tramite Network Watcher e il contenuto viene inviato ad Archiviazione BLOB di Azure. Per connettersi ed elaborare log di flusso dall'archiviazione BLOB e per inviarli a Graylog, viene usato un plug-in Logstash. Dopo l'archiviazione in Graylog, i log di flusso possono essere analizzati e visualizzati in dashboard personalizzati.

Flusso di lavoro Graylog

Procedura di installazione

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.

Configurazione di Graylog

In questo esempio, sia Graylog che Logstash sono configurati in un server Ubuntu, distribuito in Azure.

  • Per istruzioni dettagliate sull'installazione in Ubuntu, vedere la documentazione di Graylog.
  • Verificare di configurare anche l'interfaccia Web di Graylog in base alla documentazione.

In questo esempio viene usata la configurazione minima di Graylog (ovvero una singola istanza di graylog), ma Graylog può essere progettata per la scalabilità tra le risorse a seconda delle esigenze di sistema e produzione. Per altre informazioni sulle considerazioni sull'architettura o una guida completa all'architettura, vedere la documentazione e la guida all'architettura di Graylog.

Graylog può essere installato in molti modi, in base alla piattaforma in uso e alle proprie preferenze. Per un elenco completo dei metodi di installazione possibili, vedere la documentazione ufficiale di Graylog. L'applicazione server Graylog viene eseguita su distribuzioni Linux e deve rispettare i requisiti seguenti:

Installare Logstash

Logstash consente di rendere flat i log di flusso in formato JSON a un livello di tupla dei flussi. In questo modo l'organizzazione e la ricerca dei log di flusso in Graylog risultano più semplice. Le istruzioni seguenti vengono usate per installare Logstash in Ubuntu. Per istruzioni su come installare questo pacchetto in Red Hat Enterprise Linux, vedere Installazione da repository di pacchetti - yum.

  1. Per installare Logstash, eseguire questi comandi:

    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. Configurare Logstash per analizzare i log di flusso e inviarli a Graylog. Creare un file logstash.conf:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Aggiungere il contenuto seguente al file. Modificare i storage_account_namevalori , storage_access_keye container in modo da riflettere i dettagli dell'account di archiviazione:

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

    Il file di configurazione di Logstash è composto da tre parti, ovvero input, filtro e output. La sezione di input designa l'origine di input dei log che Logstash elabora. In questo caso si userà un plug-in di input del blog di Azure (installato nei passaggi successivi) che consente di accedere ai file JSON del log del flusso del gruppo di sicurezza di rete archiviati nell'archiviazione BLOB.

La sezione filtro rende quindi flat tutti i file di log di flusso in modo che ogni tupla dei flussi e le relative proprietà associate diventino un evento Logstash separato.

La sezione di output inoltra infine ogni evento Logstash al server Graylog. Modificare il file di configurazione Logstash in base alle esigenze specifiche.

Nota

Il file di configurazione precedente presuppone che il server Graylog sia stato configurato nell'indirizzo IP 127.0.0.1 di loopback dell'host locale. In caso contrario, assicurarsi di modificare il parametro host nella sezione di output impostando l'indirizzo IP corretto.

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

Installare il plug-in di input Logstash per Archiviazione BLOB di Azure

Il plug-in Logstash consente di accedere direttamente ai log di flusso dall'account di archiviazione BLOB designato. Per installare il plug-in, nella directory di installazione di Logstash predefinita (in questo caso /usr/share/logstash/bin) eseguire questo comando:

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

Per altre informazioni sul plug-in, vedere la documentazione.

Configurare la connessione da Logstash a Graylog

Dopo aver stabilito una connessione con i log di flusso tramite Logstash e configurato il server Graylog, è necessario configurare Graylog per accettare i file di log in ingresso.

  1. Spostarsi sull'interfaccia Web del server Graylog tramite l'URL configurato. Per accedere all'interfaccia, indirizzare il browser all'URL http://<graylog-server-ip>:9000/

  2. Per spostarsi sulla pagina di configurazione, selezionare il menu a discesa System (Sistema) nella barra di spostamento superiore a destra e quindi fare clic su Inputs (Input). In alternativa, accedere all'URL http://<graylog-server-ip>:9000/system/inputs

    Introduzione

  3. Per avviare il nuovo input, selezionare GELF UDP nel menu a discesa Select input (Seleziona input) e quindi compilare il modulo. GELF è l'acronimo di Graylog Extended Log Format. Il formato GELF viene sviluppato da Graylog. Per altre informazioni sui vantaggi relativi, vedere la documentazione di Graylog.

    Verificare di associare l'input all'indirizzo IP su cui è stato configurato il server Graylog. L'indirizzo IP deve corrispondere al campo host dell'output UDP del file di configurazione di Logstash. La porta predefinita deve essere 12201. Verificare che la porta corrisponda al campo port nell'output UDP indicato nel file di configurazione di Logstash.

    Screenshot che mostra gli input graylog, con opzioni per l'avvio e la ricerca degli input.

    Dopo che l'input è stato avviato, deve essere visualizzato nella sezione Local inputs (Input locali), come illustrato nella figura seguente:

    Screenshot che mostra la sezione Input locali che contiene l'input avviato.

    Per altre informazioni sugli input dei messaggi di Graylog, vedere la documentazione.

  4. Dopo aver eseguito tali configurazioni, è possibile avviare Logstash per iniziare a leggere i log di flusso con il comando seguente: sudo systemctl start logstash.service.

Cercare i messaggi in Graylog

Dopo aver consentito al server Graylog di raccogliere i messaggi, è possibile eseguire una ricerca. Per controllare i messaggi inviati al server Graylog, nella pagina Di configurazione Input fare clic sul pulsante "Mostra messaggi ricevuti" dell'input UDP GELF creato. Si verrà reindirizzati a una schermata analoga alla figura seguente:

Screenshot che mostra il server Graylog che visualizza i risultati della ricerca, l'istogramma e i messaggi.

Facendo clic sul collegamento blu "%{Message}" viene espanso ogni messaggio per visualizzare i parametri di ogni tupla del flusso, come illustrato nell'immagine seguente:

Screenshot che mostra i dettagli del messaggio dal server Graylog.

Per impostazione predefinita, tutti i campi dei messaggi vengono inclusi nella ricerca se non si seleziona un campo di messaggio specifico da cercare. Se si desidera cercare messaggi specifici ( ad esempio tuple di flusso da un indirizzo IP di origine specifico) è possibile usare il linguaggio di query di ricerca Graylog come documentato

Analizzare i log di flusso dei gruppi di sicurezza di rete tramite Graylog

Ora che Graylog è configurato ed è in esecuzione, è possibile usarne alcune funzionalità per comprendere meglio i dati dei log di flusso, ad esempio usando dashboard per creare visualizzazioni specifiche dei dati.

Creare un dashboard

  1. Nella barra di spostamento superiore, selezionare Dashboards (Dashboard) o accedere all'URL http://<graylog-server-ip>:9000/dashboards/

  2. Fare clic sul pulsante verde Create dashboard (Crea dashboard) e compilare il breve modulo inserendo il titolo e la descrizione del dashboard. Fare clic sul pulsante Save (Salva) per creare il nuovo dashboard. Verrà visualizzato un dashboard come illustrato nella figura seguente:

    Screenshot che mostra i dashboard del server Graylog, con le opzioni per creare e modificare i dashboard.

Aggiungere widget

È possibile fare clic sul titolo del dashboard per visualizzarlo, ma al momento è vuoto, poiché non sono stati aggiunti widget. Un tipo di widget semplice e pratico da aggiungere al dashboard è costituito dai grafici Quick Values (Valori rapidi) che consentono di visualizzare un elenco di valori del campo selezionato e la relativa distribuzione.

  1. Tornare ai risultati della ricerca dell'input UDP che riceve i log dei flussi selezionando Cerca nella barra di spostamento superiore.

  2. Sotto il pannello Risultato della ricerca sul lato sinistro della schermata individuare la scheda Campi in cui sono elencati i vari campi di ogni messaggio delle tuple di flusso in ingresso.

  3. Selezionare i parametri desiderati in base ai quali eseguire la visualizzazione (in questo esempio è stato selezionato l'indirizzo IP di origine). Per visualizzare l'elenco dei possibili widget, fare clic sulla freccia a discesa blu a sinistra del campo e quindi selezionare Quick values (Valori rapidi) per generare il widget. Verrà visualizzata una schermata analoga alla figura seguente:

    IP di origine

  4. In questo punto è possibile selezionare il pulsante Add to dashboard (Aggiungi a dashboard) nell'angolo superiore destro del widget e quindi selezionare il dashboard corrispondente da aggiungere.

  5. Spostarsi sul dashboard per visualizzare il widget aggiunto.

    È possibile aggiungere un'ampia gamma di altri widget, ad esempio istogrammi e conteggi per il dashboard per tenere traccia di metriche importanti, ad esempio il dashboard di esempio illustrato nella figura seguente:

    Dashboard di log di flusso

    Per altre spiegazioni sui dashboard e sugli altri tipi di widget, vedere la documentazione di Graylog.

Grazie all'integrazione di Network Watcher con Graylog, è ora disponibile un modo semplice e centralizzato per gestire e visualizzare i log di flusso dei gruppi di sicurezza di rete. Graylog offre una vasta gamma di altre funzionalità potenti, ad esempio flussi e avvisi, che possono essere usate anche per gestire ulteriormente i log di flusso e conoscere meglio il traffico di rete. Dopo aver configurato e connesso ad Azure un'istanza di Graylog, è possibile continuare a esplorare le altre funzionalità che offre.

Passaggi successivi

Per informazioni su come visualizzare i log di flusso dei gruppi di sicurezza di rete con Power BI, vedere Visualizzare i log dei flussi dei gruppi di sicurezza di rete con Power BI.