Partager via


Visualiser les journaux de flux NSG d’Azure Network Watcher à l’aide d’outils open source

Important

Le 30 septembre 2027, les journaux de flux de groupe de sécurité réseau (NSG) seront mis hors service. Dans le cadre de cette mise hors service, vous ne pourrez plus créer de journaux de flux de NSG à compter du 30 juin 2025. Nous vous recommandons de migrer vers des journaux de flux de réseau virtuel, qui surmontent les limitations des journaux de flux de NSG. Après la date de mise hors service, l’analytique du trafic activée avec les journaux de flux de NSG ne sera plus prise en charge, et les ressources de journaux de flux de NSG existantes dans vos abonnements seront supprimées. Toutefois, les enregistrements des journaux de flux de NSG ne seront pas supprimés et continueront de suivre leurs stratégies de rétention respectives. Pour plus d’informations, consultez l’annonce officielle.

Les journaux d’activité des flux de groupe de sécurité réseau fournissent des informations permettant de comprendre le trafic IP entrant et sortant sur les groupes de sécurité réseau. Ces journaux de flux affichent les flux entrants et sortants en fonction de la règle, de la carte réseau à laquelle le flux s’applique, des informations à 5 tuples sur le flux (adresse IP source/de destination, port source/de destination, protocole), et de l’autorisation ou du refus du trafic.

Ces journaux de flux peuvent être difficiles à analyser et à exploiter manuellement. Toutefois, il existe de nombreux outils open source qui peuvent aider à visualiser ces données. Cet article propose une solution pour visualiser ces journaux d’activité à l’aide d’Elastic Stack, qui vous permet d’indexer et de visualiser rapidement vos journaux de flux dans un tableau de bord Kibana.

Scénario

Dans cet article, nous configurons une solution qui vous permet de visualiser les journaux de flux de groupe de sécurité réseau à l’aide d’Elastic Stack. Un plug-in d’entrée Logstash collecte les journaux de flux directement à partir de l’objet blob de stockage configuré pour contenir les journaux de flux. Ensuite, à l’aide d’Elastic Stack, les journaux de flux sont indexés et utilisés pour créer un tableau de bord Kibana permettant de visualiser les informations.

Le diagramme illustre un scénario qui vous permet de visualiser les journaux de distribution de groupes de sécurité réseau à l’aide de la Suite Elastic.

Étapes

Activer les journaux de flux des groupes de sécurité réseau

Pour ce scénario, la journalisation des flux de groupe de sécurité réseau doit être activée sur au moins un groupe de sécurité réseau dans votre compte. Pour obtenir des instructions sur l’activation des journaux d’activité des flux de groupe de sécurité réseau, consultez l’article suivant Introduction à la journalisation des flux pour les groupes de sécurité réseau.

Configurer la Suite Elastic

En connectant les journaux de flux NSG à la Suite Elastic, nous pouvons générer un tableau de bord Kibana qui nous permet d’effectuer des recherches, de créer des graphiques, d’analyser et d’obtenir des informations à partir de nos journaux d’activité.

Installer Elasticsearch

Les instructions suivantes sont utilisées pour installer Elasticsearch sur des machines virtuelles Ubuntu Azure. Pour obtenir des instructions sur l’installation de la recherche élastique dans Red Hat Enterprise Linux, consultez Installer Elasticsearch avec RPM.

  1. La Suite Elastic à partir de la version 5.0 et pour les versions ultérieures requiert Java 8. Exécutez la commande java -version pour vérifier la version que vous utilisez. Si Java n’est pas installé sur votre ordinateur, consultez la documentation sur les JDK pris en charge par Azure.

  2. Téléchargez le package binaire approprié pour votre système :

    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
    

    D’autres méthodes d’installation se trouvent sur la page Elasticsearch Installation (Installation d’Elasticsearch).

  3. Vérifiez qu’Elasticsearch est en cours d’exécution avec la commande :

    curl http://127.0.0.1:9200
    

    Vous devriez voir une réponse similaire à ce qui suit :

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

Pour plus d’informations sur l’installation d’Elasticsearch, consultez les instructions d’installation.

Installer Logstash

Les instructions suivantes permettent d’installer Logstash dans Ubuntu. Pour obtenir des instructions sur l’installation de ce package dans Red Hat Enterprise Linux, consultez l’article Installation à partir de dépôts de packages – yum.

  1. Exécutez les commandes suivantes pour installer Logstash :

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Ensuite, nous devons configurer Logstash pour accéder aux journaux de flux et les analyser. Créez un fichier logstash.conf à l’aide de :

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Ajoutez le contenu suivant au fichier :

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

Pour plus d’informations sur l’installation de Logstash, consultez la documentation officielle.

Installer le plug-in d’entrée Logstash pour le stockage Blob Azure

Ce plug-in Logstash vous permet d’accéder directement aux journaux de flux, à partir de leur compte de stockage désigné. Pour installer ce plug-in, exécutez la commande suivante à partir du répertoire d’installation par défaut de Logstash :

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

Pour démarrer Logstash, exécutez la commande :

sudo /etc/init.d/logstash start

Pour plus d’informations à propos de ce plug-in, consultez la documentation.

Installer Kibana

Pour obtenir des instructions sur l’installation de Kibana dans Red Hat Enterprise Linux, consultez Installer Kibana avec RPM. Pour obtenir des instructions sur l’installation de Kibana dans des systèmes Ubuntu/Debian à l’aide d’un package de référentiel, consultez Installer Kibana à partir d’un référentiel APT.

Ensuite, les instructions suivantes ont été testées dans Ubuntu et peuvent être utilisées dans différentes distributions Linux, car elles ne sont pas spécifiques à Ubuntu.

  1. Exécutez les commandes suivantes pour installer 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. Pour exécuter Kibana, exécutez les commandes ci-dessous :

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Pour afficher votre interface web Kibana, accédez à http://localhost:5601

  4. Dans ce scénario, le modèle d’index utilisé pour les journaux de flux est « nsg-flow-logs ». Vous pouvez modifier le modèle d’index dans la section « sortie » de votre fichier logstash.conf.

  5. Si vous souhaitez afficher le tableau de bord Kibana à distance, créez une règle de groupe de sécurité réseau entrante autorisant l’accès au port 5601.

Créer un tableau de bord Kibana

L’image suivante montre un exemple de tableau de bord où sont affichés les tendances et les détails de vos alertes :

figure 1

Téléchargez le fichier du tableau de bord, le fichier de visualisation et le fichier des recherches sauvegardées.

Dans l’onglet Gestion de Kibana, accédez à Saved Objects (Objets enregistrés) et importez les trois fichiers. Puis, à partir de l’onglet Tableau de bord, vous pouvez ouvrir et charger l’exemple de tableau de bord.

Vous avez également la possibilité de créer vos propres visualisations et tableaux de bord en fonction des mesures qui vous intéressent. Reportez-vous à la documentation officielle de Kibana pour en savoir plus sur la création de visualisation Kibana.

Visualiser les journaux de flux NSG

L’exemple de tableau de bord fournit plusieurs visualisations des journaux de flux :

  1. Flux par décision/direction dans le temps : graphiques chronologiques indiquant le nombre de flux sur une période de temps. Vous pouvez modifier l’unité de temps et l’étendue de ces deux visualisations. Le graphique de flux par décision affiche la proportion de décisions d’autorisation ou de refus, tandis que celui du flux par direction affiche la proportion du trafic entrant et sortant. Grâce à ces éléments visuels, vous pouvez examiner les tendances du trafic au fil du temps et identifier les pics ou les modèles inhabituels.

    Capture d’écran montrant un exemple de tableau de bord avec des flux par décision et sens dans le temps.

  2. Flux par port source/de destination : graphiques à secteurs montrant la répartition des flux en fonction de leurs ports respectifs. Grâce à cet affichage, vous pouvez visualiser les ports les plus fréquemment utilisés. Si vous cliquez sur un port spécifique dans le graphique à secteurs, le reste du tableau de bord filtre les flux selon ce port.

    Capture d’écran montrant un exemple de tableau de bord avec flux par destination et port source.

  3. Nombre de flux et date du premier journal : mesures indiquant le nombre de flux enregistrés et la date du plus ancien journal capturé.

    Capture d’écran montrant un exemple de tableau de bord avec le nombre de flux et la première heure de journalisation.

  4. Flux par groupe de sécurité réseau et par règle : graphique à barres montrant la répartition des flux au sein de chaque groupe de sécurité réseau, et la répartition des règles au sein de ces derniers. , vous pouvez identifier le groupe de sécurité réseau et les règles qui ont généré le plus de trafic.

    Capture d’écran montrant un exemple de tableau de bord avec des flux par groupe de sécurité réseau et règle.

  5. 10 principales adresses IP source/de destination : graphiques à barres indiquant les 10 principales adresses IP source et de destination. Vous pouvez ajuster ces graphiques pour afficher un nombre plus ou moins important d’adresses IP. À partir de ces données, vous pouvez identifier les adresses IP les plus fréquemment utilisées, et la décision de trafic (autorisation ou refus) prise par rapport à chacune d’entre elles.

  6. Tuples de flux – un tableau affichant les informations contenues dans chaque tuple de flux, ainsi que son NGS et sa règle correspondants.

À l’aide de la barre de requête située en haut du tableau de bord, vous pouvez filtrer le tableau de bord en fonction de n’importe quel paramètre des flux, tel que l’ID d’abonnement, les groupes de ressources, la règle ou toute autre variable d’intérêt. Pour plus d’informations sur les requêtes et les filtres de Kibana, consultez la documentation officielle

Conclusion

En combinant les journaux d’activité des flux de groupe de sécurité réseau avec la Suite Elastic, nous bénéficions d’une solution puissante et personnalisable permettant de visualiser le trafic de notre réseau. Ces tableaux de bord vous permettent d’obtenir et de partager rapidement des analyses sur le trafic de votre réseau, mais aussi de filtrer et d’examiner toute anomalie potentielle. Grâce à Kibana, vous pouvez adapter ces tableaux de bord et créer des visualisations spécifiques pour répondre à tous vos besoins en matière de sécurité, d’audit et de conformité.

Étape suivante

Découvrez comment visualiser vos journaux de flux de groupe de sécurité réseau avec Power BI en consultant la page Visualizing Network Security Group flow logs with Power BI (Visualisation des journaux de flux de groupe de sécurité réseau avec Power BI).