Visualisieren von Azure Network Watcher-NSG-Datenflussprotokollen mit Open-Source-Tools

Wichtig

Am 30. September 2027 werden NSG-Datenflussprotokolle (Netzwerksicherheitsgruppe) eingestellt. Aufgrund dieser Einstellung können Sie ab dem 30. Juni 2025 keine neuen NSG-Datenflussprotokolle mehr erstellen. Es wird empfohlen, zu Datenflussprotokollen für virtuelle Netzwerke zu migrieren, bei denen die Einschränkungen von NSG-Datenflussprotokollen nicht gelten. Nach dem Einstellungsdatum wird die Aktivierung der Datenverkehrsanalyse mit NSG-Datenflussprotokollen nicht mehr unterstützt, und vorhandene Ressourcen für NSG-Datenflussprotokolle in Ihren Abonnements werden gelöscht. NSG-Datenflussprotokolle werden jedoch nicht gelöscht, und es gelten weiterhin die jeweiligen Aufbewahrungsrichtlinien. Weitere Informationen finden Sie in der offiziellen Ankündigung.

NSG-Datenflussprotokolle (Netzwerksicherheitsgruppen) enthalten Informationen für ein besseres Verständnis von ein- und ausgehendem IP-Datenverkehr in Netzwerksicherheitsgruppen. In diesen Datenflussprotokollen werden ausgehende und eingehende Datenflüsse pro Regel, die NIC, auf die sich der Datenfluss bezieht, 5-Tupel-Informationen zum Datenfluss (Quell-/Ziel-IP, Quell-/Zielport, Protokoll) und Informationen zu zugelassenem oder abgelehntem Datenverkehr angezeigt.

Die manuelle Analyse und Auswertung dieser Datenflussprotokolle kann schwierig sein. Es gibt jedoch mehrere Open-Source-Tools, die zur Visualisierung dieser Daten beitragen können. In diesem Artikel wird eine Lösung für Visualisierung dieser Protokolle mit Elastic Stack bereitgestellt, mit der Sie Ihre Datenflussprotokolle schnell in einem Kibana-Dashboard indizieren und visualisieren können.

Szenario

In diesem Artikel richten wir eine Lösung ein, mit der Sie Datenflussprotokolle von Netzwerksicherheitsgruppen mithilfe von Elastic Stack visualisieren können. Ein Logstash-Eingabe-Plug-In ruft die Datenflussprotokolle direkt aus dem für deren Aufnahme konfigurierten Speicherblob ab. Anschließend werden die Datenflussprotokolle mit Elastic Stack indiziert und für das Erstellen eines Kibana-Dashboards genutzt, mit dem die Informationen visualisiert werden.

Das Diagramm zeigt ein Szenario, in dem Sie Datenflussprotokolle für Netzwerksicherheitsgruppen mit Elastic Stack visualisieren können.

Schritte

Aktivieren der Datenflussprotokollierung für Netzwerksicherheitsgruppen

Für dieses Szenario müssen Sie die NSG-Datenflussprotokollierung für mindestens eine Netzwerksicherheitsgruppe in Ihrem Konto aktivieren. Eine Anleitung zum Aktivieren von NSG-Datenflussprotokollen finden Sie im Artikel Einführung in die Datenflussprotokollierung für Netzwerksicherheitsgruppen.

Einrichten des Elastic Stack

Durch das Verbinden von NSG-Datenflussprotokollen mit dem Elastic Stack können wir ein Kibana-Dashboard erstellen, in dem wir die Protokolle durchsuchen, grafisch darstellen, analysieren und auswerten können.

Installieren von Elasticsearch

Die folgenden Anweisungen dienen zum Installieren von Elasticsearch auf Azure-VMs unter Ubuntu. Anweisungen zum Installieren von Elasticsearch in Red Hat Enterprise Linux finden Sie unter Installieren von Elasticsearch mit RPM.

  1. Elastic Stack ab Version 5.0 erfordert Java 8. Führen Sie den Befehl java -version aus, um Ihre Version zu überprüfen. Wenn Java nicht installiert ist, lesen Sie die Dokumentation zu den von Azure unterstützten JDKs.

  2. Laden Sie das richtige Binärpaket für Ihr System herunter:

    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
    

    Andere Methoden zur Installation finden Sie auf der Installationsseite von Elasticsearch.

  3. Sie überprüfen die Ausführung von Elasticsearch mit dem Befehl:

    curl http://127.0.0.1:9200
    

    Die Antwort sollte ähnlich der folgenden aussehen:

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

Weitere Anweisungen zum Installieren von Elasticsearch finden Sie unter den Installationsanweisungen.

Installieren von Logstash

Die folgenden Anweisungen dienen zur Installation von Logstash unter Ubuntu. Anweisungen zum Installieren dieses Pakets unter Red Hat Enterprise Linux finden Sie im Artikel Installieren aus Paketrepositorys – yum.

  1. Führen Sie die folgenden Befehle zum Installieren von Logstash aus:

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Im nächsten Schritt muss Logstash für den Zugriff auf die und die Analyse der Flowprotokolle konfiguriert werden. Erstellen Sie die Datei „logstash.conf“ wie folgt:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Fügen Sie der Datei Folgendes hinzu:

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

Weitere Anweisungen zum Installieren von Logstash finden Sie in der offiziellen Dokumentation.

Installieren des Logstash-Eingangs-Plug-Ins für Azure Blob Storage

Mithilfe dieses Logstash-Plug-Ins können Sie im vorgesehenen Speicherkonto direkt auf die Datenflussprotokolle zugreifen. Zum Installieren dieses Plug-Ins über das standardmäßige Logstash-Installationsverzeichnis führen Sie den folgenden Befehl aus:

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

Führen Sie zum Starten von Logstash folgenden Befehl aus:

sudo /etc/init.d/logstash start

Weitere Informationen zu diesem Plug-In finden in der Dokumentation.

Installieren von Kibana

Anweisungen zum Installieren von Kibana in Red Hat Enterprise Linux finden Sie unter Installieren von Kibana mit RPM. Anweisungen zum Installieren von Kibana auf Ubuntu-/Debian-Systemen mithilfe eines Repositorypakets finden Sie unter Installieren von Kibana aus dem APT-Repository.

Anschließend wurden die folgenden Anweisungen in Ubuntu getestet und konnten in verschiedenen Linux-Distributionen verwendet werden, da sie nicht für Ubuntu spezifisch sind.

  1. Führen Sie die folgenden Befehle zum Installieren von Kibana aus:

    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. Verwenden Sie zum Ausführen von Kibana diese Befehle:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Navigieren Sie zum Anzeigen Ihrer Kibana-Weboberfläche zu http://localhost:5601.

  4. In diesem Szenario wird das Indexmuster „nsg-flow-logs“ für die Datenflussprotokolle verwendet. Sie können das Indexmuster im Abschnitt „output“ der Datei „logstash.conf“ ändern.

  5. Wenn Sie das Kibana-Dashboard remote anzeigen möchten, erstellen Sie eine eingehende NSG-Regel, die den Zugriff auf Port 5601 erlaubt.

Erstellen eines Kibana-Dashboards

Ein Beispieldashboard zum Anzeigen von Trends und Details in den Warnungen ist in der folgenden Abbildung dargestellt:

Abbildung 1

Laden Sie die Dashboarddatei, die Visualisierungsdatei und die Datei mit der gespeicherten Suche herunter.

Navigieren Sie auf der Registerkarte Management (Verwaltung) von Kibana zu Saved Objects (Gespeicherte Objekte), und importieren Sie alle drei Dateien. Sie können dann auf der Registerkarte Dashboard das Beispieldashboard öffnen und laden.

Sie können auch eigene Visualisierungen und Dashboards erstellen, die auf die für Sie relevanten Metriken zugeschnitten sind. Weitere Informationen zum Erstellen von Kibana-Visualisierungen finden Sie in der offiziellen Dokumentation von Kibana.

Visualisieren von NSG-Datenflussprotokollen

Das Beispieldashboard stellt mehrere Visualisierungen der Datenflussprotokolle bereit:

  1. Datenfluss nach Entscheidung/Richtung über die Zeit: Zeitraumdiagramme zeigen die Anzahl der Datenflüsse für den Zeitraum an. Sie können Zeiteinheit und Dauer bei beiden Visualisierungen ändern. „Datenflüsse nach Entscheidung“ zeigt den Anteil von Entscheidungen für das Zulassen bzw. Verweigern an, während „Datenflüsse nach Richtung“ den Anteil von eingehendem und ausgehendem Datenverkehr darstellt. Mithilfe dieser Visualisierungen können Sie Datenverkehrstrends über einen Zeitraum auf Spitzen oder ungewöhnliche Muster untersuchen.

    Screenshot zeigt ein Beispieldashboard mit Datenflüssen nach Entscheidung und Richtung im Zeitverlauf.

  2. Datenflüsse nach Ziel/Quellport: Kreisdiagramme zeigen eine Aufschlüsselung der Datenflüsse an den jeweiligen Ports an. In dieser Ansicht können Sie die am häufigsten verwendeten Ports ermitteln. Wenn Sie im Kreisdiagramm auf einen bestimmten Port klicken, wird das übrige Dashboard nach Datenflüssen über diesen Port gefiltert.

    Screenshot zeigt ein Beispieldashboard mit Datenflüssen nach Ziel- und Quellport.

  3. Anzahl von Datenflüssen und früheste Protokollzeit: Metriken zeigen die Anzahl der aufgezeichneten Datenflüsse und das Datum des ältesten aufgezeichneten Protokolls.

    Screenshot zeigt ein Beispieldashboard mit der Anzahl der Datenflüsse und der frühesten Protokollzeit.

  4. Datenflüsse nach NSG und Regel: Ein Balkendiagramm zeigt die Verteilung der Datenflüsse innerhalb der einzelnen NSGs sowie die Verteilung der Regeln in den NSGs. Sie können erkennen, welche NSGs und Regeln den meisten Datenverkehr generieren.

    Screenshot zeigt ein Beispieldashboard mit Datenflüssen nach NSG und einer Regel.

  5. 10 häufigste Quell-/Ziel-IP-Adressen: Balkendiagramme zeigen die zehn häufigsten Quell- und Ziel-IP-Adressen. Sie können diese Diagramme anpassen, um mehr oder weniger IP-Adressen anzuzeigen. Hier sehen Sie die am häufigsten auftretenden IP-Adressen sowie die Entscheidung zum Datenverkehr (zulassen oder verweigern), die für jede IP-Adresse getroffen wurden.

  6. Flowtupel: Eine Tabelle mit Informationen innerhalb jedes Flowtupels mit der zugehörigen NSG und Regel.

Mithilfe der Abfrageleiste oben im Dashboard können Sie das Dashboard basierend auf beliebige Parameter der Datenflüsse filtern, z.B. nach Abonnement-ID, Ressourcengruppen, Regel oder andere relevante Variablen. Weitere Informationen zu Kibana-Abfragen und -Filtern finden Sie in der offiziellen Dokumentation.

Zusammenfassung

Durch die Kombination der Datenflussprotokolle von Netzwerksicherheitsgruppen mit dem Elastic Stack steht Ihnen eine leistungsstarke und anpassbare Methode zum Visualisieren des Netzwerkdatenverkehrs zur Verfügung. Mithilfe dieser Dashboards können Sie schnell Einblicke in Ihren Netzwerkdatenverkehr erhalten und teilen. Außerdem können Sie Filter anwenden und potenzielle Anomalien untersuchen. Mit Kibana können Sie diese Dashboards anpassen und geeignete Visualisierungen erstellen, die bestehende Anforderungen an Sicherheit, Überwachung und Compliance erfüllen.

Nächster Schritt

Erfahren Sie unter Visualisieren der Datenflussprotokolle von Netzwerksicherheitsgruppen mit Power BI, wie Sie Ihre NSG-Datenflussprotokolle mit Power BI visualisieren.