Stroomlogboeken voor netwerkbeveiligingsgroepen in Azure beheren en analyseren met Behulp van Network Watcher en Graylog

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 u kunt gebruiken om inzicht te hebben in inkomend en uitgaand IP-verkeer voor Azure-netwerkinterfaces. Stroomlogboeken tonen uitgaande en binnenkomende stromen per netwerkbeveiligingsgroepregel, de netwerkinterface waarop de stroom van toepassing is, informatie over 5 tuples (bron/doel-IP, bron-/doelpoort, protocol) over de stroom en of het verkeer is toegestaan of geweigerd.

U kunt veel netwerkbeveiligingsgroepen in uw netwerk hebben waarvoor stroomlogboekregistratie is ingeschakeld. Verschillende netwerkbeveiligingsgroepen waarvoor stroomlogboekregistratie is ingeschakeld, kunnen het lastig maken om uw logboeken te parseren en er inzicht in te krijgen. Dit artikel bevat een oplossing voor het centraal beheren van deze stroomlogboeken voor netwerkbeveiligingsgroepen met behulp van Graylog, een opensource-hulpprogramma voor logboekbeheer en analyse, en Logstash, een pijplijn voor gegevensverwerking aan de serverzijde.

Waarschuwing

De volgende stappen werken met stroomlogboeken versie 1. Zie Inleiding tot stroomlogboekregistratie voor netwerkbeveiligingsgroepen voor meer informatie. De volgende instructies werken niet met versie 2 van de logboekbestanden, zonder wijziging.

Scenario

Stroomlogboeken voor netwerkbeveiligingsgroepen worden ingeschakeld met Behulp van Network Watcher. Stroomlogboeken stromen naar Azure Blob Storage. Een Logstash-invoegtoepassing wordt gebruikt om logboeken van blobopslag te verbinden en te verwerken en naar Graylog te verzenden. Zodra de stroomlogboeken zijn opgeslagen in Graylog, kunnen ze worden geanalyseerd en gevisualiseerd in aangepaste dashboards.

Graylog-werkstroom

Installatiestappen

Stroomlogboekregistratie van netwerkbeveiligingsgroepen inschakelen

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

Graylog instellen

In dit voorbeeld worden zowel Graylog als Logstash geconfigureerd op een Ubuntu-server, geïmplementeerd in Azure.

  • Raadpleeg de documentatie van Graylog voor stapsgewijze instructies voor het installeren op Ubuntu.
  • Zorg ervoor dat u ook de Graylog-webinterface configureert door de documentatie te volgen.

In dit voorbeeld wordt gebruikgemaakt van de minimale Graylog-installatie (bijvoorbeeld één exemplaar van een Graylog), maar Graylog kan worden ontworpen voor het schalen van resources, afhankelijk van uw systeem- en productiebehoeften. Zie de documentatie en architectuurhandleiding van Graylog voor meer informatie over architectuuroverwegingen of een uitgebreide architectuurhandleiding.

Graylog kan op veel manieren worden geïnstalleerd, afhankelijk van uw platform en voorkeuren. Raadpleeg de officiële documentatie van Graylog voor een volledige lijst met mogelijke installatiemethoden. De Graylog-servertoepassing wordt uitgevoerd op Linux-distributies en heeft de volgende vereisten:

Logstash installeren

Logstash wordt gebruikt voor het platmaken van de JSON-stroomlogboeken naar een tuple-niveau van een stroom. Door de stroomlogboeken plat te maken, zijn de logboeken eenvoudiger te ordenen en te zoeken in Graylog. De volgende instructies worden gebruikt voor het installeren van Logstash in Ubuntu. Raadpleeg 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:

    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. Configureer Logstash om de stroomlogboeken te parseren en naar Graylog te verzenden. Maak een Logstash.conf-bestand:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Voeg de volgende inhoud toe aan het bestand. Wijzig de storage_account_name, storage_access_keyen container waarden zodat deze overeenkomen met de gegevens van uw opslagaccount:

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

    Het opgegeven Logstash-configuratiebestand bestaat uit drie delen: de invoer, het filter en de uitvoer. De invoersectie wijst de invoerbron aan van de logboeken die Logstash gaat verwerken. In dit geval gebruikt u een Azure-bloginvoerinvoegtoepassing (geïnstalleerd in de volgende stappen) waarmee we toegang kunnen krijgen tot de JSON-bestanden van de netwerkbeveiligingsgroep die zijn opgeslagen in blobopslag.

De filtersectie platt vervolgens elk stroomlogboekbestand af, zodat elke afzonderlijke stroom-tuple en de bijbehorende eigenschappen een afzonderlijke Logstash-gebeurtenis worden.

Ten slotte stuurt de uitvoersectie elke Logstash-gebeurtenis door naar de Graylog-server. Wijzig het logstash-configuratiebestand, indien nodig, om aan uw specifieke behoeften te voldoen.

Notitie

In het vorige configuratiebestand wordt ervan uitgegaan dat de Graylog-server is geconfigureerd op het IP-adres van de lokale host loopback 127.0.0.1. Als dat niet het geval is, moet u de hostparameter in de uitvoersectie wijzigen in het juiste IP-adres.

Zie de Logstash-documentatie voor meer instructies over het installeren van Logstash.

De Logstash-invoerinvoegtoepassing voor Azure Blob Storage installeren

Met de Logstash-invoegtoepassing kunt u rechtstreeks toegang krijgen tot de stroomlogboeken vanuit hun aangewezen blobopslagaccount. Voer de volgende opdracht uit vanuit de standaardinstallatiemap van Logstash (in dit geval /usr/share/logstash/bin) om de invoegtoepassing te installeren:

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

Zie de documentatie voor meer informatie over deze invoegtoepassing.

Verbinding van Logstash naar Graylog instellen

Nu u verbinding hebt gemaakt met de stroomlogboeken met behulp van Logstash en de Graylog-server hebt ingesteld, moet u Graylog configureren om de binnenkomende logboekbestanden te accepteren.

  1. Navigeer naar de Graylog Server-webinterface met behulp van de URL die u hiervoor hebt geconfigureerd. U kunt toegang krijgen tot de interface door uw browser naar http://<graylog-server-ip>:9000/

  2. Als u naar de configuratiepagina wilt gaan, selecteert u het vervolgkeuzemenu Systeem in de bovenste navigatiebalk rechts en klikt u vervolgens op Invoer. U kunt ook naar http://<graylog-server-ip>:9000/system/inputs

    Aan de slag

  3. Als u de nieuwe invoer wilt starten, selecteert u GELF UDP in de vervolgkeuzelijst Invoer selecteren en vult u het formulier in. GELF staat voor Graylog Extended Log Format. De GELF-indeling is ontwikkeld door Graylog. Zie de Graylog-documentatie voor meer informatie over de voordelen ervan.

    Zorg ervoor dat u de invoer verbindt met het IP-adres waarop u de Graylog-server hebt geconfigureerd. Het IP-adres moet overeenkomen met het hostveld van de UDP-uitvoer van het Logstash-configuratiebestand. De standaardpoort moet 12201 zijn. Zorg ervoor dat de poort overeenkomt met het poortveld in de UDP-uitvoer die is aangewezen in het logstash-configuratiebestand.

    Schermopname van graylog-invoer, met opties om invoer te starten en te zoeken.

    Zodra u de invoer hebt gestart, wordt deze weergegeven onder de sectie Lokale invoer , zoals wordt weergegeven in de volgende afbeelding:

    Schermopname van de sectie Lokale invoer die de invoer bevat die u hebt gestart.

    Raadpleeg de documentatie voor meer informatie over graylog-berichtinvoer.

  4. Zodra deze configuraties zijn gemaakt, kunt u Logstash starten om te beginnen met het lezen in stroomlogboeken met de volgende opdracht: sudo systemctl start logstash.service

Zoeken in Graylog-berichten

Nadat u enige tijd hebt toegestaan voordat uw Graylog-server berichten verzamelt, kunt u de berichten doorzoeken. Als u wilt controleren welke berichten naar uw Graylog-server worden verzonden, klikt u op de pagina Invoerconfiguratie op de knop Ontvangen berichten weergeven van de GELF UDP-invoer die u hebt gemaakt. U wordt omgeleid naar een scherm dat lijkt op de volgende afbeelding:

Schermopname van de Graylog-server met het zoekresultaat, histogram en berichten.

Als u op de blauwe koppeling %{Message} klikt, wordt elk bericht uitgevouwen om de parameters van elke stroom-tuple weer te geven, zoals wordt weergegeven in de volgende afbeelding:

Schermopname van berichtdetails van de Graylog-server.

Standaard worden alle berichtvelden opgenomen in de zoekopdracht als u geen specifiek berichtveld selecteert waarnaar u wilt zoeken. Als u wilt zoeken naar specifieke berichten (d.w.w.: stroom tuples van een specifieke bron-IP) kunt u de Graylog-zoekquerytaal gebruiken zoals gedocumenteerd

Stroomlogboeken van netwerkbeveiligingsgroepen analyseren met Graylog

Nu Graylog het is ingesteld, kunt u een aantal van de functionaliteit ervan gebruiken om meer inzicht te krijgen in uw stroomlogboekgegevens. Een dergelijke manier is door dashboards te gebruiken om specifieke weergaven van uw gegevens te maken.

Een dashboard maken

  1. Selecteer Dashboards in de bovenste navigatiebalk of navigeer naar http://<graylog-server-ip>:9000/dashboards/

  2. Klik hier op de groene knop Dashboard maken en vul het korte formulier in met de titel en beschrijving van uw dashboard. Druk op de knop Opslaan om het nieuwe dashboard te maken. U ziet een dashboard dat lijkt op de volgende afbeelding:

    Schermopname van Graylog-serverdashboards, met de opties voor het maken en bewerken van dashboards.

Widgets toevoegen

U kunt op de titel van het dashboard klikken om het te zien, maar op dit moment is het leeg, omdat we geen widgets hebben toegevoegd. Een eenvoudig en nuttig typewidget die u aan het dashboard kunt toevoegen, zijn grafieken met snelle waarden , waarin een lijst met waarden van het geselecteerde veld en de bijbehorende verdeling wordt weergegeven.

  1. Ga terug naar de zoekresultaten van de UDP-invoer die stroomlogboeken ontvangt door Zoeken te selecteren in de bovenste navigatiebalk.

  2. Zoek onder het deelvenster Zoekresultaten links van het scherm het tabblad Velden , waarin de verschillende velden van elk binnenkomende stroom-tuplebericht worden weergegeven.

  3. Selecteer een gewenste parameter waarin u wilt visualiseren (in dit voorbeeld is de IP-bron geselecteerd). Als u de lijst met mogelijke widgets wilt weergeven, klikt u op de blauwe vervolgkeuzepijl links van het veld en selecteert u Snelle waarden om de widget te genereren. U ziet iets vergelijkbaars met de volgende afbeelding:

    Bron-IP

  4. Hier kunt u de knop Toevoegen aan dashboard selecteren in de rechterbovenhoek van de widget en het bijbehorende dashboard selecteren dat u wilt toevoegen.

  5. Ga terug naar het dashboard om de widget te zien die u zojuist hebt toegevoegd.

    U kunt verschillende andere widgets, zoals histogrammen en tellingen, toevoegen aan uw dashboard om belangrijke metrische gegevens bij te houden, zoals het voorbeelddashboard dat in de volgende afbeelding wordt weergegeven:

    Flowlogs-dashboard

    Raadpleeg de documentatie van Graylog voor meer informatie over dashboards en de andere typen widgets.

Door Network Watcher te integreren met Graylog, hebt u nu een handige en gecentraliseerde manier om stroomlogboeken van netwerkbeveiligingsgroepen te beheren en visualiseren. Graylog heeft een aantal andere krachtige functies, zoals streams en waarschuwingen die ook kunnen worden gebruikt om stroomlogboeken verder te beheren en uw netwerkverkeer beter te begrijpen. Nu u Graylog hebt ingesteld en verbonden met Azure, kunt u doorgaan met het verkennen van de andere functionaliteit die het biedt.

Volgende stappen

Meer informatie over het visualiseren van stroomlogboeken van uw netwerkbeveiligingsgroep met Power BI door naar Logboeken van netwerkbeveiligingsgroepstromen visualiseren met Power BI te gaan.