Wizualizowanie dzienników przepływu sieciowych grup zabezpieczeń usługi Azure Network Watcher przy użyciu narzędzi open source

Uwaga

W tym artykule odwołuje się do systemu CentOS — dystrybucji systemu Linux, która zbliża się do stanu zakończenia życia (EOL). Rozważ odpowiednie użycie i planowanie. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zakończenia życia systemu CentOS.

Dzienniki przepływu sieciowej grupy zabezpieczeń zawierają informacje, których można użyć do zrozumienia ruchu przychodzącego i wychodzącego IP w sieciowych grupach zabezpieczeń. Te dzienniki przepływu pokazują przepływy wychodzące i przychodzące na podstawie reguły, karta sieciowa, do którego ma zastosowanie przepływ, 5-krotka informacji o przepływie (źródłowy/docelowy adres IP, port źródłowy/docelowy, protokół) i jeśli ruch był dozwolony lub blokowany.

Te dzienniki przepływu mogą być trudne do ręcznego analizowania i uzyskiwania szczegółowych informacji. Istnieje jednak kilka narzędzi typu open source, które mogą ułatwić wizualizowanie tych danych. Ten artykuł zawiera rozwiązanie do wizualizacji tych dzienników przy użyciu usługi Elastic Stack, która umożliwia szybkie indeksowanie i wizualizowanie dzienników przepływu na pulpicie nawigacyjnym kibana.

Scenariusz

W tym artykule skonfigurowaliśmy rozwiązanie, które umożliwia wizualizowanie dzienników przepływu sieciowej grupy zabezpieczeń przy użyciu elastycznego stosu. Wtyczka wejściowa logstash uzyskuje dzienniki przepływu bezpośrednio z obiektu blob magazynu skonfigurowanego do przechowywania dzienników przepływu. Następnie przy użyciu elastycznego stosu dzienniki przepływu są indeksowane i używane do tworzenia pulpitu nawigacyjnego Kibana w celu wizualizacji informacji.

Diagram przedstawia scenariusz, który umożliwia wizualizowanie dzienników przepływu sieciowej grupy zabezpieczeń przy użyciu elastycznego stosu.

Kroki

Włączanie rejestrowania przepływu sieciowej grupy zabezpieczeń

W tym scenariuszu na koncie musi być włączone rejestrowanie przepływu sieciowej grupy zabezpieczeń w co najmniej jednej sieciowej grupie zabezpieczeń. Aby uzyskać instrukcje dotyczące włączania dzienników przepływu zabezpieczeń sieci, zobacz następujący artykuł Wprowadzenie do rejestrowania przepływów dla sieciowych grup zabezpieczeń.

Konfigurowanie elastycznego stosu

Łącząc dzienniki przepływów sieciowej grupy zabezpieczeń z usługą Elastic Stack, możemy utworzyć pulpit nawigacyjny Kibana, który umożliwia nam wyszukiwanie, graf, analizowanie i uzyskiwanie szczegółowych informacji z naszych dzienników.

Instalowanie programu Elasticsearch

Poniższe instrukcje służą do instalowania programu Elasticsearch na maszynach wirtualnych platformy Azure z systemem Ubuntu. Aby uzyskać instrukcje dotyczące sposobu instalowania wyszukiwania elastycznego w dystrybucjach RHEL/CentOS, zobacz Instalowanie programu Elasticsearch z funkcją RPM.

  1. Elastyczny stos z wersji 5.0 lub nowszej wymaga środowiska Java 8. Uruchom polecenie java -version , aby sprawdzić wersję. Jeśli nie masz zainstalowanego środowiska Java, zapoznaj się z dokumentacją zestawów JDK platformy Azure.

  2. Pobierz prawidłowy pakiet binarny dla systemu:

    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
    

    Inne metody instalacji można znaleźć w artykule Elasticsearch Installation (Instalacja programu Elasticsearch)

  3. Sprawdź, czy usługa Elasticsearch jest uruchomiona za pomocą polecenia :

    curl http://127.0.0.1:9200
    

    Powinna zostać wyświetlona odpowiedź podobna do następującej:

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

Aby uzyskać dalsze instrukcje dotyczące instalowania funkcji Elastic Search, zobacz Instrukcje instalacji.

Instalowanie usługi Logstash

Poniższe instrukcje służą do instalowania usługi Logstash w systemie Ubuntu. Aby uzyskać instrukcje dotyczące sposobu instalowania tego pakietu w systemie RHEL/CentOS, zobacz artykuł Instalowanie z repozytoriów pakietów — yum .

  1. Aby zainstalować usługę Logstash, uruchom następujące polecenia:

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Następnie należy skonfigurować usługę Logstash, aby uzyskiwać dostęp do dzienników przepływu i analizować je. Utwórz plik logstash.conf przy użyciu:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Dodaj następującą zawartość do pliku:

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

Aby uzyskać dalsze instrukcje dotyczące instalowania usługi Logstash, zobacz oficjalną dokumentację.

Instalowanie wtyczki danych wejściowych usługi Logstash dla usługi Azure Blob Storage

Ta wtyczka usługi Logstash umożliwia bezpośredni dostęp do dzienników przepływu z wyznaczonego konta magazynu. Aby zainstalować tę wtyczkę, w domyślnym katalogu instalacyjnym usługi Logstash uruchom polecenie:

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

Aby uruchomić usługę Logstash, uruchom polecenie:

sudo /etc/init.d/logstash start

Aby uzyskać więcej informacji na temat tej wtyczki, zobacz dokumentację.

Instalowanie narzędzia Kibana

Aby uzyskać instrukcje dotyczące sposobu instalowania rozwiązania Kibana w systemach RHEL/CentOS, zobacz Instalowanie narzędzia Kibana z prędkością RPM. Aby uzyskać instrukcje dotyczące sposobu instalowania narzędzia Kibana w systemach Ubuntu/Debian przy użyciu pakietu repozytorium, zobacz Instalowanie narzędzia Kibana z repozytorium APT.

Następnie poniższe instrukcje zostały przetestowane w systemie Ubuntu i mogą być używane w różnych dystrybucjach systemu Linux, ponieważ nie są specyficzne dla systemu Ubuntu.

  1. Uruchom następujące polecenia, aby zainstalować oprogramowanie 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. Aby uruchomić program Kibana, użyj poleceń:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Aby wyświetlić interfejs internetowy Kibana, przejdź do strony http://localhost:5601

  4. W tym scenariuszu wzorzec indeksu używany dla dzienników przepływu to "nsg-flow-logs". Wzorzec indeksu można zmienić w sekcji "output" pliku logstash.conf.

  5. Jeśli chcesz zdalnie wyświetlić pulpit nawigacyjny Kibana, utwórz regułę sieciowej grupy zabezpieczeń dla ruchu przychodzącego zezwalającą na dostęp do portu 5601.

Tworzenie pulpitu nawigacyjnego Kibana

Przykładowy pulpit nawigacyjny do wyświetlania trendów i szczegółów w alertach jest pokazany na poniższej ilustracji:

rysunek 1

Pobierz plik pulpitu nawigacyjnego, plik wizualizacji i zapisany plik wyszukiwania.

Na karcie Zarządzanie narzędzia Kibana przejdź do pozycji Zapisane obiekty i zaimportuj wszystkie trzy pliki. Następnie na karcie Pulpit nawigacyjny możesz otworzyć i załadować przykładowy pulpit nawigacyjny.

Możesz również utworzyć własne wizualizacje i pulpity nawigacyjne dostosowane do własnych metryk. Przeczytaj więcej na temat tworzenia wizualizacji Kibana z oficjalnej dokumentacji Kibany.

Wizualizowanie dzienników przepływu sieciowych grup zabezpieczeń

Przykładowy pulpit nawigacyjny zawiera kilka wizualizacji dzienników przepływu:

  1. Przepływy według decyzji/kierunku w czasie — wykresy szeregów czasowych pokazujące liczbę przepływów w danym okresie. Możesz edytować jednostkę czasu i zakres obu tych wizualizacji. Przepływy według decyzji pokazują proporcję podejmowanych decyzji dotyczących zezwalania lub odmowy, natomiast przepływy według kierunku pokazują proporcję ruchu przychodzącego i wychodzącego. Dzięki tym wizualizacjom można badać trendy ruchu w czasie i szukać wszelkich skoków lub nietypowych wzorców.

    Zrzut ekranu przedstawia przykładowy pulpit nawigacyjny z przepływami według decyzji i kierunku w czasie.

  2. Przepływy według portu docelowego/źródłowego — wykresy kołowe przedstawiające podział przepływów na odpowiednie porty. Ten widok umożliwia wyświetlenie najczęściej używanych portów. Jeśli klikniesz określony port na wykresie kołowym, pozostałe pulpity nawigacyjne będą filtrowane w dół do przepływów tego portu.

    Zrzut ekranu przedstawia przykładowy pulpit nawigacyjny z przepływami według miejsca docelowego i portu źródłowego.

  3. Liczba przepływów i najwcześniejszy czas dziennika — metryki przedstawiające liczbę zarejestrowanych przepływów i datę najwcześniejszego przechwycenia dziennika.

    Zrzut ekranu przedstawia przykładowy pulpit nawigacyjny z liczbą przepływów i najwcześniejszym czasem rejestrowania.

  4. Przepływy według sieciowej grupy zabezpieczeń i reguły — wykres słupkowy przedstawiający rozkład przepływów w każdej sieciowej grupie zabezpieczeń oraz rozkład reguł w każdej sieciowej grupie zabezpieczeń. , można zobaczyć, która sieciowa grupa zabezpieczeń i reguły wygenerowały najwięcej ruchu.

    Zrzut ekranu przedstawia przykładowy pulpit nawigacyjny z przepływami według N S G i reguły.

  5. 10 pierwszych źródłowych/docelowych adresów IP — wykresy słupkowe przedstawiające 10 pierwszych źródłowych i docelowych adresów IP. Możesz dostosować te wykresy, aby pokazać więcej lub mniej najważniejszych adresów IP. W tym miejscu można zobaczyć najczęściej występujące adresy IP i decyzje dotyczące ruchu (zezwalanie lub odmawianie) podejmowane względem każdego adresu IP.

    Zrzut ekranu przedstawiający przykładowy pulpit nawigacyjny z przepływami według dziesięciu pierwszych adresów źródłowych i docelowych adresów we/wy.

  6. Krotki przepływu — ta tabela zawiera informacje zawarte w każdej krotki przepływu oraz odpowiadające jej reguły i NGS.

    Zrzut ekranu przedstawiający krotki przepływu w tabeli.

Za pomocą paska zapytania w górnej części pulpitu nawigacyjnego można filtrować pulpit nawigacyjny na podstawie dowolnego parametru przepływów, takich jak identyfikator subskrypcji, grupy zasobów, reguła lub dowolna inna zmienna zainteresowania. Aby uzyskać więcej informacji na temat zapytań i filtrów Kibana, zobacz oficjalną dokumentację

Podsumowanie

Łącząc dzienniki przepływu sieciowej grupy zabezpieczeń z elastycznym stosem, utworzyliśmy zaawansowany i dostosowywalny sposób wizualizacji ruchu sieciowego. Te pulpity nawigacyjne umożliwiają szybkie uzyskiwanie i udostępnianie szczegółowych informacji na temat ruchu sieciowego oraz filtrowanie i badanie wszelkich potencjalnych anomalii. Za pomocą narzędzia Kibana można dostosować te pulpity nawigacyjne i utworzyć określone wizualizacje, aby spełnić wszelkie potrzeby dotyczące zabezpieczeń, inspekcji i zgodności.

Następne kroki

Dowiedz się, jak wizualizować dzienniki przepływu sieciowej grupy zabezpieczeń za pomocą usługi Power BI, odwiedzając stronę Visualize NSG flows logs with Power BI (Wizualizowanie dzienników przepływów sieciowej grupy zabezpieczeń za pomocą usługi Power BI)