Bagikan melalui


Mengelola dan menganalisis log alur kelompok keamanan jaringan menggunakan Network Watcher dan Grafana

Penting

Pada 30 September 2027, log alur kelompok keamanan jaringan (NSG) akan dihentikan. Sebagai bagian dari penghentian ini, Anda tidak akan lagi dapat membuat log alur NSG baru mulai 30 Juni 2025. Sebaiknya migrasi ke log alur jaringan virtual, yang mengatasi keterbatasan log alur NSG. Setelah tanggal penghentian, analitik lalu lintas yang diaktifkan dengan log alur NSG tidak akan lagi didukung, dan sumber daya log alur NSG yang ada di langganan Anda akan dihapus. Namun, rekaman log alur NSG tidak akan dihapus dan akan terus mengikuti kebijakan retensi masing-masing. Untuk informasi selengkapnya, lihat pengumuman resmi.

Log alur Network Security Group (NSG) menyediakan informasi yang dapat digunakan untuk memahami lalu lintas IP masuk dan keluar pada antarmuka jaringan. Log alur ini memperlihatkan alur keluar dan masuk per aturan dasar NSG, NIC yang diterapkan alur ke, informasi 5 tuple tentang alur (IP Sumber/Tujuan, Port Sumber/Tujuan, Protokol), dan apakah lalu lintas diizinkan atau ditolak.

Anda dapat mengaktifkan banyak NSG di jaringan Anda dengan mengaktifkan log alur. Jumlah data pencatatan ini membuatnya sulit untuk mengurai dan mendapatkan wawasan dari log Anda. Artikel ini menyediakan solusi untuk mengelola log alur NSG ini secara terpusat menggunakan Grafana, alat grafik sumber terbuka, Elasticsearch, mesin pencarian dan analitik terdistribusi, dan Logstash, yang merupakan alur pemrosesan data sisi server sumber terbuka.

Skenario

Log alur NSG diaktifkan menggunakan Network Watcher dan disimpan dalam penyimpanan blob Azure. Plugin Logstash digunakan untuk menyambungkan dan memproses log alur dari penyimpanan blob dan mengirimkannya ke Elasticsearch. Setelah log alur disimpan di Elasticsearch, log tersebut dapat dianalisis dan divisualisasikan ke dasbor yang disesuaikan di Grafana.

NSG Network Watcher Grafana

Langkah-langkah penginstalan

Aktifkan pengelogan alur Kelompok Keamanan Jaringan

Untuk skenario ini, Anda harus mengaktifkan Pencatatan Alur Network Security Group pada setidaknya satu Network Security Group di akun Anda. Untuk petunjuk pengaktifan Log Alur Keamanan Jaringan, lihat artikel berikut Pengenalan pengelogan alur untuk Kelompok Keamanan Jaringan.

Pertimbangan penyiapan

Dalam contoh ini Grafana, Elasticsearch, dan Logstash dikonfigurasi pada Ubuntu LTS Server yang disebarkan di Azure. Pengaturan minimal ini digunakan untuk menjalankan ketiga komponen - semuanya berjalan pada VM yang sama. Pengaturan ini hanya boleh digunakan untuk pengujian dan beban kerja non-kritis. Logstash, Elasticsearch, dan Grafana semuanya dapat dirancang untuk menskalakan secara independen di banyak instans. Untuk informasi selengkapnya, lihat dokumentasi masing-masing komponen ini.

Menginstal Logstash

Anda menggunakan Logstash untuk meratakan log alur berformat JSON ke tingkat tuple alur.

Instruksi berikut digunakan untuk menginstal Logstash di Ubuntu. Untuk instruksi tentang cara menginstal paket ini di Red Hat Enterprise Linux, lihat Menginstal dari Repositori Paket - yum.

  1. Untuk menginstal Logstash, jalankan langkah-langkah berikut:

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Konfigurasikan Logstash untuk mengurai log alur dan mengirimnya ke Elasticsearch. Buat file Logstash.conf menggunakan:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Tambahkan konten berikut ke file. Ubah nama akun penyimpanan dan kunci akses untuk mencerminkan detail akun penyimpanan Anda:

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

File konfigurasi Logstash yang disediakan terdiri dari tiga bagian: input, filter, dan output. Bagian input menunjuk sumber input log yang akan diproses Logstash - dalam hal ini kita akan menggunakan plugin input "azureblob" (diinstal pada langkah berikutnya) yang akan memungkinkan kita untuk mengakses log alur NSG file JSON yang disimpan dalam penyimpanan blob.

Bagian filter kemudian meratakan setiap file log alur sehingga setiap tupel alur individu dan properti terkait menjadi peristiwa Logstash terpisah.

Terakhir, bagian output meneruskan setiap peristiwa Logstash ke server Elasticsearch. Jangan ragu untuk memodifikasi file konfigurasi Logstash agar sesuai dengan kebutuhan khusus Anda.

Instal plugin input Logstash untuk penyimpanan Azure Blob

Plugin Logstash ini memungkinkan Anda untuk langsung mengakses log alur dari akun penyimpanan blob yang ditunjuk. Untuk menginstal plug in ini, dari direktori penginstalan Logstash default (dalam hal ini /usr/share/logstash/bin), lakukan langkah berikut:

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

Untuk informasi selengkapnya tentang plug in ini, lihat Plugin input Logstash untuk Azure Storage Blobs.

Menginstal ElasticSearch

Anda dapat menggunakan skrip berikut untuk menginstal Elasticsearch. Untuk informasi tentang menginstal Elasticsearch, lihat 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

Menginstal Grafana

Untuk menginstal dan menjalankan Grafana, jalankan perintah berikut:

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

Untuk informasi instalasi tambahan, lihat Menginstal di Debian / Ubuntu.

Menambahkan server Elasticsearch sebagai sumber data

Selanjutnya, Anda perlu menambahkan indeks Elasticsearch yang berisi log alur sebagai sumber data. Anda bisa menambahkan sumber data dengan memilih Tambahkan sumber data dan mengisi formulir dengan informasi yang relevan. Sampel konfigurasi ini dapat ditemukan di tangkapan layar berikut:

Tambahkan sumber data

Membuat dasbor

Sekarang setelah Anda berhasil mengonfigurasi Grafana untuk membaca dari indeks Elasticsearch yang berisi log alur NSG, Anda dapat membuat dan mempersonalisasi dasbor. Untuk membuat dasbor baru, pilih Buat dasbor pertama Anda. Contoh konfigurasi grafik berikut menunjukkan alur yang disegmentasikan oleh aturan NSG:

Grafik dasbor

Kesimpulan

Dengan mengintegrasikan Network Watcher dengan Elasticsearch dan Grafana, Anda sekarang memiliki cara yang nyaman dan terpusat untuk mengelola dan memvisualisasikan log alur NSG serta data lainnya. Grafana memiliki sejumlah fitur grafik canggih lainnya yang juga dapat digunakan untuk mengelola log arus lebih lanjut dan lebih memahami lalu lintas jaringan Anda. Sekarang setelah Anda memiliki instans Grafana yang disiapkan dan terhubung ke Azure, jangan ragu untuk terus menjelajahi fungsionalitas lain yang ditawarkannya.

Langkah selanjutnya