مشاركة عبر


إدارة وتحليل سجلات تدفق مجموعة أمان الشبكة باستخدام Network Watcher وGrafana

هام

في 30 سبتمبر 2027، سيتم إيقاف سجلات تدفق مجموعة أمان الشبكة (NSG). كجزء من هذا الإيقاف، لن تتمكن بعد الآن من إنشاء سجلات تدفق NSG جديدة بدءا من 30 يونيو 2025. نوصي بالترحيل إلى سجلات تدفق الشبكة الظاهرية، والتي تتغلب على قيود سجلات تدفق NSG. بعد تاريخ الإيقاف، لن يتم دعم تحليلات نسبة استخدام الشبكة الممكنة مع سجلات تدفق NSG، وسيتم حذف موارد سجلات تدفق NSG الموجودة في اشتراكاتك. ومع ذلك، لن يتم حذف سجلات سجلات تدفق NSG وستستمر في اتباع نهج الاستبقاء الخاصة بها. لمزيد من المعلومات، راجع الإعلان الرسمي.

توفر سجلات تدفق مجموعة أمان الشبكة (NSG) معلومات يمكن استخدامها لفهم دخول وخروج حركة مرور IP على واجهات الشبكة. تُظهر سجلات التدفق هذه التدفقات الصادرة والداخلية على أساس قاعدة كل مجموعة موردي المواد النووية، وNIC الذي ينطبق عليه التدفق، ومعلومات 5 مجموعات حول التدفق (المصدر / الوجهة IP، المصدر / المنفذ الوجهة، البروتوكول)، وما إذا تم السماح بحركة المرور أو رفض.

يمكن أن يكون لديك العديد من موردي المواد النووية في شبكتك مع تمكين تسجيل التدفق. هذا القدر من بيانات التسجيل يجعل من الصعب تحليل واكتساب رؤى من سجلاتك. توفر هذه المقالة حلا لإدارة سجلات تدفق NSG هذه مركزيا باستخدام Grafana، وهي أداة رسم بياني مصدر مفتوح، و Elasticsearch، ومحرك بحث وتحليلات موزع، وLogstash، وهو خط أنابيب لمعالجة البيانات من جانب الخادم مصدر مفتوح.

السيناريو

يتم تمكين سجلات تدفق NSG باستخدام Network Watcher ويتم تخزينها في تخزين Azure blob. يتم استخدام المكون الإضافي Logstash للاتصال ومعالجة سجلات التدفق من تخزين blob وإرسالها إلى Elasticsearch. بمجرد تخزين سجلات التدفق في Elasticsearch، يمكن تحليلها وتصورها في لوحات معلومات مخصصة في Grafana.

جرافانا مراقب شبكة NSG

خطوات التثبيت

تفعيل تسجيل تدفق مجموعة أمان الشبكة

بالنسبة لهذا السيناريو، يجب أن يكون لديك Network Security Group Flow Logging ممكّنًا على مجموعة أمان شبكة واحدة على الأقل في حسابك. للحصول على إرشادات حول تمكين سجلات تدفق أمان الشبكة، راجع المقالة التالية مقدمة لتسجيل التدفق لمجموعات أمان الشبكة .

اعتبارات الإعداد

في هذا المثال، يتم تكوين Grafana و Elasticsearch و Logstash على خادم Ubuntu LTS المنشور في Azure. يتم استخدام هذا الإعداد الأدنى لتشغيل جميع المكونات الثلاثة - يتم تشغيلها جميعا على نفس الجهاز الظاهري. يجب استخدام هذا الإعداد فقط للاختبار وأحمال العمل غير الحرجة. يمكن تصميم كل من Logstash وElasticsearch وGrafana لتوسيع نطاقها بشكل مستقل عبر العديد من الحالات. لمزيد من المعلومات، راجع الوثائق الخاصة بكل من هذه المكونات.

تثبيت Logstash

يمكنك استخدام Logstash لتسوية سجلات التدفق المنسقة بتنسيق JSON إلى مستوى مجموعة التدفق.

يتم استخدام الإرشادات التالية لتثبيت Logstash في Ubuntu. للحصول على إرشادات حول كيفية تثبيت هذه الحزمة في Red Hat Enterprise Linux، راجع التثبيت من مستودعات الحزم - yum.

  1. لتثبيت Logstash، قم بتشغيل الأوامر التالية:

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. تكوين Logstash لتحليل سجلات التدفق وإرسالها إلى Elasticsearch. قم بإنشاء ملف Logstash.conf باستخدام:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. أضف المحتوى التالي إلى الملف. قم بتغيير اسم حساب التخزين ومفتاح الوصول ليعكس تفاصيل حساب التخزين الخاص بك:

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

يتكون ملف تكوين Logstash المقدم من ثلاثة أجزاء: الإدخال والتصفية والإخراج. يعين قسم الإدخال مصدر الإدخال للسجلات التي سيعالجها Logstash - في هذه الحالة سنستخدم مكون إدخال إضافي "azureblob" (مثبت في الخطوات التالية) والذي سيسمح لنا بالوصول إلى ملفات JSON لسجل تدفق NSG المخزنة في تخزين blob.

يقوم قسم المرشح بعد ذلك بتسوية كل ملف سجل تدفق بحيث يصبح كل مجموعة تدفق فردية والخصائص المرتبطة بها حدث Logstash منفصل.

وأخيرا، يقوم قسم الإخراج بإعادة توجيه كل حدث Logstash إلى خادم Elasticsearch. لا تتردد في تعديل ملف تكوين Logstash ليناسب احتياجاتك الخاصة.

قم بتثبيت مكون إدخال Logstash الإضافي لتخزين Azure Blob

يمكّنك هذا المكون الإضافي Logstash من الوصول مباشرة إلى سجلات التدفق من حساب تخزين blob المخصص لهم. لتثبيت هذا المكون الإضافي، من دليل تثبيت Logstash الافتراضي (في هذه الحالة / usr / share / logstash / bin) قم بتشغيل الأمر:

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

لمزيد من المعلومات حول هذا المكون الإضافي، راجع المكون الإضافي لإدخال Logstash لـ Azure Storage Blobs .

تثبيت Elasticsearch

يمكنك استخدام البرنامج النصي التالي لتثبيت Elasticsearch. للحصول على معلومات حول تثبيت Elasticsearch، راجع 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

قم بتثبيت Grafana

لتثبيت Grafana وتشغيله، قم بتشغيل الأوامر التالية:

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

للحصول على معلومات التثبيت الإضافية، راجع التثبيت على Debian / Ubuntu .

إضافة خادم Elasticsearch كمصدر بيانات

بعد ذلك، تحتاج إلى إضافة فهرس Elasticsearch الذي يحتوي على سجلات التدفق كمصدر بيانات. يمكنك إضافة مصدر بيانات عن طريق تحديد إضافة مصدر بيانات واستكمال النموذج بالمعلومات ذات الصلة. يمكن العثور على عينة من هذا التكوين في لقطة الشاشة التالية:

إضافة مصدر بيانات

إنشاء لوحة معلومات

الآن بعد أن قمت بتكوين Grafana بنجاح للقراءة من فهرس Elasticsearch الذي يحتوي على سجلات تدفق NSG، يمكنك إنشاء لوحات المعلومات وتخصيصها. لإنشاء لوحة تحكم جديدة، حدد إنشاء لوحة التحكم الأولى . يوضح نموذج تكوين الرسم البياني التالي التدفقات مقسمة حسب قاعدة مجموعة موردي المواد النووية:

الرسم البياني للوحة القيادة

الخاتمة

من خلال دمج Network Watcher مع Elasticsearch وGrafana، لديك الآن طريقة مريحة ومركزية لإدارة وتصور سجلات تدفق NSG بالإضافة إلى البيانات الأخرى. يحتوي Grafana على عدد من ميزات الرسوم البيانية القوية الأخرى التي يمكن استخدامها أيضاً لإدارة سجلات التدفق وفهم حركة مرور الشبكة بشكل أفضل. الآن بعد أن تم إعداد مثيل Grafana وتوصيله بـ Azure، لا تتردد في متابعة استكشاف الوظائف الأخرى التي يوفرها.

الخطوة التالية