NSG-stroomlogboeken van Azure Network Watcher visualiseren met open-sourcehulpprogramma's

Let op

In dit artikel wordt verwezen naar CentOS, een Linux-distributie die de status End Of Life (EOL) nadert. Overweeg uw gebruik en planning dienovereenkomstig. Zie de Richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

Stroomlogboeken voor netwerkbeveiligingsgroepen bieden informatie die kan worden gebruikt om inzicht te hebben in inkomend en uitgaand IP-verkeer in netwerkbeveiligingsgroepen. Deze stroomlogboeken tonen uitgaande en binnenkomende stromen per regel, de NIC waarop de stroom van toepassing is, 5 tuple-informatie over de stroom (bron/doel-IP, bron-/doelpoort, protocol) en of het verkeer is toegestaan of geweigerd.

Deze stroomlogboeken kunnen moeilijk handmatig worden geparseerd en inzichten verkrijgen uit. Er zijn echter verschillende opensource-hulpprogramma's waarmee u deze gegevens kunt visualiseren. Dit artikel biedt een oplossing voor het visualiseren van deze logboeken met behulp van de Elastic Stack, waarmee u uw stroomlogboeken snel kunt indexeren en visualiseren op een Kibana-dashboard.

Scenario

In dit artikel hebben we een oplossing ingesteld waarmee u stroomlogboeken van netwerkbeveiligingsgroepen kunt visualiseren met behulp van de elastische stack. Met een Logstash-invoerinvoegtoepassing worden de stroomlogboeken rechtstreeks opgehaald uit de opslagblob die is geconfigureerd voor het bevatten van de stroomlogboeken. Vervolgens worden de stroomlogboeken geïndexeerd en gebruikt om een Kibana-dashboard te maken om de informatie te visualiseren.

Diagram toont een scenario waarmee u stroomlogboeken voor netwerkbeveiligingsgroepen kunt visualiseren met behulp van de elastische stack.

Stappen

Stroomlogboekregistratie van netwerkbeveiligingsgroepen inschakelen

Voor dit scenario moet logboekregistratie van netwerkbeveiligingsgroepen zijn ingeschakeld voor ten minste één netwerkbeveiligingsgroep in uw account. Zie het volgende artikel Inleiding tot stroomlogboeken voor netwerkbeveiligingsgroepen voor instructies voor het inschakelen van netwerkbeveiligingsstroomlogboeken.

De elastische stack instellen

Door NSG-stroomlogboeken te verbinden met de Elastic Stack, kunnen we een Kibana-dashboard maken waarmee we kunnen zoeken, grafieken, analyseren en inzichten kunnen afleiden uit onze logboeken.

Elasticsearch installeren

De volgende instructies worden gebruikt voor het installeren van Elasticsearch in Ubuntu Azure-VM's. Zie Elasticsearch installeren met RPM voor instructies over het installeren van elastisch zoeken in RHEL-/CentOS-distributies.

  1. Voor de Elastic Stack van versie 5.0 en hoger is Java 8 vereist. Voer de opdracht java -version uit om uw versie te controleren. Als u Java niet hebt geïnstalleerd, raadpleegt u de documentatie over de JDK's met Ondersteuning van Azure.

  2. Download het juiste binaire pakket voor uw systeem:

    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 installatiemethoden zijn te vinden bij Elasticsearch Installation

  3. Controleer of Elasticsearch wordt uitgevoerd met de opdracht:

    curl http://127.0.0.1:9200
    

    Als het goed is, ziet u een antwoord dat er ongeveer als volgt uitziet:

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

Zie Installatie-instructies voor meer instructies voor het installeren van Elastic Search.

Logstash installeren

De volgende instructies worden gebruikt voor het installeren van Logstash in Ubuntu. Zie het artikel Installeren vanuit pakketopslagplaatsen - yum voor instructies over het installeren van dit pakket in RHEL/CentOS.

  1. Voer de volgende opdrachten uit om Logstash te installeren:

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Vervolgens moeten we Logstash configureren om de stroomlogboeken te openen en te parseren. Maak een logstash.conf-bestand met behulp van:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. De volgende inhoud toevoegen aan het bestand:

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

Zie de officiële documentatie voor meer instructies over het installeren van Logstash.

De Logstash-invoerinvoegtoepassing voor Azure Blob Storage installeren

Met deze Logstash-invoegtoepassing kunt u rechtstreeks toegang krijgen tot de stroomlogboeken vanuit hun toegewezen opslagaccount. Als u deze invoegtoepassing wilt installeren, voert u de opdracht uit vanuit de standaardinstallatiemap van Logstash:

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

Voer de volgende opdracht uit om Logstash te starten:

sudo /etc/init.d/logstash start

Zie de documentatie voor meer informatie over deze invoegtoepassing.

Kibana installeren

Zie Kibana installeren met RPM voor instructies over het installeren van Kibana in RHEL/CentOS-systemen. Zie Kibana installeren vanuit APT-opslagplaats voor instructies over het installeren van Kibana in Ubuntu/Debian-systemen met behulp van een opslagplaatspakket.

Vervolgens zijn de volgende instructies getest in Ubuntu en kunnen worden gebruikt in verschillende Linux-distributies omdat ze niet specifiek zijn voor Ubuntu.

  1. Voer de volgende opdrachten uit om Kibana te installeren:

    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. Gebruik de volgende opdrachten om Kibana uit te voeren:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Als u uw Kibana-webinterface wilt weergeven, gaat u naar http://localhost:5601

  4. Voor dit scenario is het indexpatroon dat wordt gebruikt voor de stroomlogboeken 'nsg-flow-logs'. U kunt het indexpatroon wijzigen in de sectie 'output' van het bestand logstash.conf.

  5. Als u het Kibana-dashboard extern wilt weergeven, maakt u een binnenkomende NSG-regel die toegang tot poort 5601 toestaat.

Een Kibana-dashboard maken

In de volgende afbeelding ziet u een voorbeelddashboard om trends en details in uw waarschuwingen weer te geven:

afbeelding 1

Download het dashboardbestand, het visualisatiebestand en het opgeslagen zoekbestand.

Ga op het tabblad Beheer van Kibana naar Opgeslagen objecten en importeer alle drie de bestanden. Vervolgens kunt u op het tabblad Dashboard het voorbeelddashboard openen en laden.

U kunt ook uw eigen visualisaties en dashboards maken die zijn afgestemd op metrische gegevens van uw eigen interesse. Lees meer over het maken van Kibana-visualisaties uit de officiële documentatie van Kibana.

NSG-stroomlogboeken visualiseren

Het voorbeelddashboard biedt verschillende visualisaties van de stroomlogboeken:

  1. Stromen per beslissing/richting in de loop van de tijd - tijdreeksgrafieken met het aantal stromen gedurende de periode. U kunt de tijdseenheid en de duur van beide visualisaties bewerken. Stromen per beslissing toont het aandeel van beslissingen voor toestaan of weigeren, terwijl Flows by Direction het aandeel van inkomend en uitgaand verkeer weergeeft. Met deze visuals kunt u de verkeerstrends in de loop van de tijd onderzoeken en zoeken naar pieken of ongebruikelijke patronen.

    Schermopname van een voorbeelddashboard met stromen op beslissing en richting in de loop van de tijd.

  2. Stromen per doel/bronpoort: cirkeldiagrammen met de uitsplitsing van stromen naar hun respectieve poorten. Met deze weergave ziet u de meest gebruikte poorten. Als u in het cirkeldiagram op een specifieke poort klikt, filtert de rest van het dashboard omlaag naar stromen van die poort.

    Schermopname van een voorbeelddashboard met stromen per doel- en bronpoort.

  3. Aantal stromen en vroegste logboektijd: metrische gegevens over het aantal opgenomen stromen en de datum van het vroegste vastgelegde logboek.

    Schermopname van een voorbeelddashboard met het aantal stromen en de vroegste logboektijd.

  4. Stromen per NSG en regel: een staafdiagram met de verdeling van stromen binnen elke NSG en de verdeling van regels binnen elke NSG. , kunt u zien welke NSG en regels het meeste verkeer hebben gegenereerd.

    Schermopname van een voorbeelddashboard met stromen per N S G en regel.

  5. Top 10 bron-/doel-IP-adressen: staafdiagrammen met de top 10 bron- en doel-IP-adressen. U kunt deze grafieken aanpassen om meer of minder ip-adressen weer te geven. Hier ziet u de meest voorkomende IP-adressen en de verkeersbeslissing (toestaan of weigeren) voor elk IP-adres.

    Schermopname van een voorbeelddashboard met stromen op de tien belangrijkste bron- en doel-I P-adressen.

  6. Flow Tuples: in deze tabel ziet u de informatie in elke stroom-tuple en de bijbehorende NGS en regel.

    Schermopname van stroom tuples in een tabel.

Met behulp van de querybalk boven aan het dashboard kunt u het dashboard filteren op basis van een parameter van de stromen, zoals abonnements-id, resourcegroepen, regels of andere interessante variabelen. Zie de officiële documentatie voor meer informatie over de query's en filters van Kibana

Conclusie

Door de stroomlogboeken van de netwerkbeveiligingsgroep te combineren met de Elastic Stack, hebben we een krachtige en aanpasbare manier bedacht om ons netwerkverkeer te visualiseren. Met deze dashboards kunt u snel inzichten verkrijgen en delen over uw netwerkverkeer, en filteren en onderzoeken op mogelijke afwijkingen. Met Kibana kunt u deze dashboards aanpassen en specifieke visualisaties maken om te voldoen aan alle beveiligings-, audit- en nalevingsbehoeften.

Volgende stappen

Meer informatie over het visualiseren van uw NSG-stroomlogboeken met Power BI door naar NSG-stromenlogboeken visualiseren met Power BI te gaan