Zarządzanie dziennikami przepływów sieciowych grup zabezpieczeń i analizowanie ich przy użyciu usługi Network Watcher i narzędzia Grafana
Ważne
30 września 2027 r. dzienniki przepływów sieciowej grupy zabezpieczeń zostaną wycofane. W ramach tego wycofania nie będzie już można tworzyć nowych dzienników przepływów sieciowej grupy zabezpieczeń od 30 czerwca 2025 r. Zalecamy migrację do dzienników przepływów sieci wirtualnej, co pozwala wyeliminować ograniczenia dzienników przepływów sieciowej grupy zabezpieczeń. Po dacie wycofania analiza ruchu włączona z dziennikami przepływów sieciowej grupy zabezpieczeń nie będzie już obsługiwana, a istniejące zasoby przepływów sieciowej grupy zabezpieczeń w subskrypcjach zostaną usunięte. Jednak rekordy dzienników przepływu sieciowej grupy zabezpieczeń nie zostaną usunięte i będą nadal zgodne z odpowiednimi zasadami przechowywania. Więcej informacji znajdziesz w oficjalnym ogłoszeniu.
Dzienniki przepływu sieciowej grupy zabezpieczeń zawierają informacje, których można użyć do zrozumienia ruchu przychodzącego i wychodzącego IP w interfejsach sieciowych. Te dzienniki przepływu pokazują przepływy wychodzące i przychodzące na podstawie reguły sieciowej grupy zabezpieczeń, karta sieciowa, do którego ma zastosowanie przepływ, 5 krotki dotyczące przepływu (źródłowy/docelowy adres IP, port źródłowy/docelowy, protokół) i jeśli ruch był dozwolony lub blokowany.
W sieci może być dostępnych wiele sieciowych grup zabezpieczeń z włączonym rejestrowaniem przepływu. Ta ilość danych rejestrowania sprawia, że kłopotliwe jest analizowanie i uzyskiwanie szczegółowych informacji z dzienników. Ten artykuł zawiera rozwiązanie do centralnego zarządzania tymi dziennikami przepływów sieciowej grupy zabezpieczeń przy użyciu narzędzia Grafana, narzędzia do tworzenia grafów typu open source, elasticSearch, aparatu rozproszonego wyszukiwania i analizy oraz usługi Logstash, który jest potokiem przetwarzania danych po stronie serwera typu open source.
Scenariusz
Dzienniki przepływu sieciowej grupy zabezpieczeń są włączone przy użyciu usługi Network Watcher i są przechowywane w usłudze Azure Blob Storage. Wtyczka logstash służy do łączenia i przetwarzania dzienników przepływu z magazynu obiektów blob i wysyłania ich do usługi ElasticSearch. Gdy dzienniki przepływu są przechowywane w usłudze ElasticSearch, można je analizować i wizualizować w dostosowanych pulpitach nawigacyjnych w narzędziu Grafana.
Kroki instalacji
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, zapoznaj się z następującym artykułem Wprowadzenie do rejestrowania przepływu dla sieciowych grup zabezpieczeń.
Zagadnienia dotyczące konfiguracji
W tym przykładzie narzędzie Grafana, ElasticSearch i Logstash są konfigurowane na serwerze Ubuntu LTS Wdrożonym na platformie Azure. Ta minimalna konfiguracja jest używana do uruchamiania wszystkich trzech składników — wszystkie są uruchomione na tej samej maszynie wirtualnej. Ta konfiguracja powinna być używana tylko do testowania i niekrytycznych obciążeń. Usługa Logstash, Elasticsearch i Grafana mogą być zaprojektowane tak, aby można je było skalować niezależnie w wielu wystąpieniach. Aby uzyskać więcej informacji, zobacz dokumentację dla każdego z tych składników.
Instalowanie usługi Logstash
Usługa Logstash umożliwia spłaszczenie dzienników przepływu sformatowanego w formacie JSON na poziomie krotki przepływu.
Poniższe instrukcje służą do instalowania usługi Logstash w systemie Ubuntu. Aby uzyskać instrukcje dotyczące sposobu instalowania tego pakietu w systemie Red Hat Enterprise Linux, zobacz Instalowanie z repozytoriów pakietów — yum.
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
Skonfiguruj usługę Logstash, aby przeanalizować dzienniki przepływu i wysłać je do usługi ElasticSearch. Utwórz plik Logstash.conf przy użyciu:
sudo touch /etc/logstash/conf.d/logstash.conf
Dodaj następującą zawartość do pliku. Zmień nazwę konta magazynu i klucz dostępu, aby odzwierciedlić szczegóły konta magazynu:
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]}" } 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 } elasticsearch { hosts => "localhost" index => "nsg-flow-logs" } }
Podany plik konfiguracji usługi Logstash składa się z trzech części: danych wejściowych, filtru i danych wyjściowych. Sekcja danych wejściowych wyznacza źródło wejściowe dzienników, które będą przetwarzane przez usługę Logstash — w tym przypadku użyjemy wtyczki wejściowej "azureblob" (zainstalowanej w następnych krokach), która umożliwi nam dostęp do plików JSON dziennika przepływu sieciowej grupy zabezpieczeń przechowywanych w magazynie obiektów blob.
Następnie sekcja filtru spłaszcza każdy plik dziennika przepływu, tak aby każda pojedyncza krotka przepływu i skojarzone z nią właściwości stały się oddzielnym zdarzeniem usługi Logstash.
Na koniec sekcja danych wyjściowych przekazuje każde zdarzenie usługi Logstash do serwera ElasticSearch. Możesz zmodyfikować plik konfiguracji usługi Logstash zgodnie z twoimi potrzebami.
Instalowanie wtyczki wejściowej 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 obiektów blob. Aby zainstalować tę wtyczkę, uruchom polecenie z domyślnego katalogu instalacyjnego logstash (w tym przypadku /usr/share/logstash/bin):
sudo /usr/share/logstash/bin/logstash-plugin install logstash-input-azureblob
Aby uzyskać więcej informacji na temat tej wtyczki, zobacz Logstash input plugin for Azure Storage Blobs (Wtyczka wejściowa usługi Logstash dla obiektów blob usługi Azure Storage).
Instalowanie programu ElasticSearch
Do zainstalowania programu ElasticSearch można użyć następującego skryptu. Aby uzyskać informacje na temat instalowania programu ElasticSearch, zobacz Elastic Stack.
sudo apt-get install apt-transport-https openjdk-8-jre-headless uuid-runtime pwgen -y
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/5.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-5.x.list
sudo apt-get update && apt-get install elasticsearch
sudo sed -i s/#cluster.name:.*/cluster.name:\ grafana/ /etc/elasticsearch/elasticsearch.yml
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
Instalowanie narzędzia Grafana
Aby zainstalować i uruchomić aplikację Grafana, uruchom następujące polecenia:
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.5.1_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_4.5.1_amd64.deb
sudo service grafana-server start
Aby uzyskać dodatkowe informacje o instalacji, zobacz Instalowanie w systemie Debian/Ubuntu.
Dodawanie serwera ElasticSearch jako źródła danych
Następnie należy dodać indeks ElasticSearch zawierający dzienniki przepływu jako źródło danych. Źródło danych można dodać, wybierając pozycję Dodaj źródło danych i wypełniając formularz odpowiednimi informacjami. Przykład tej konfiguracji można znaleźć na poniższym zrzucie ekranu:
Tworzenie pulpitu nawigacyjnego
Po pomyślnym skonfigurowaniu narzędzia Grafana do odczytu z indeksu ElasticSearch zawierającego dzienniki przepływu sieciowej grupy zabezpieczeń możesz tworzyć i personalizować pulpity nawigacyjne. Aby utworzyć nowy pulpit nawigacyjny, wybierz pozycję Utwórz pierwszy pulpit nawigacyjny. Poniższa przykładowa konfiguracja grafu przedstawia przepływy podzielone według reguły sieciowej grupy zabezpieczeń:
Podsumowanie
Dzięki integracji usługi Network Watcher z usługami ElasticSearch i Grafana masz teraz wygodny i scentralizowany sposób zarządzania dziennikami przepływów sieciowej grupy zabezpieczeń oraz wizualizowania ich, a także innych danych. Narzędzie Grafana oferuje wiele innych zaawansowanych funkcji grafu, które mogą być również używane do dalszego zarządzania dziennikami przepływów i lepszego zrozumienia ruchu sieciowego. Teraz, gdy masz już skonfigurowane wystąpienie narzędzia Grafana i nawiązane połączenie z platformą Azure, możesz kontynuować eksplorowanie innych funkcji, które oferuje.
Następny krok
- Dowiedz się więcej o korzystaniu z usługi Network Watcher.