تصور سجلات تدفق NSG لـ Azure Network Watcher باستخدام أدوات مفتوحة المصدر

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

قد يكون من الصعب تحليل سجلات التدفق هذه يدويًا والحصول على رؤى منها. ومع ذلك، هناك العديد من الأدوات مفتوحة المصدر التي يمكن أن تساعد في تصور هذه البيانات. توفر هذه المقالة حلا لتصور هذه السجلات باستخدام Elastic Stack، والذي يسمح لك بفهرسة سجلات التدفق وتصورها بسرعة على لوحة معلومات Kibana.

السيناريو

في هذه المقالة، قمنا بإعداد حل يسمح لك بتصور سجلات تدفق مجموعة أمان الشبكة باستخدام Elastic Stack. يحصل المكون الإضافي لإدخال Logstash على سجلات التدفق مباشرة من كائن التخزين الثنائي كبير الحجم المكون لاحتواء سجلات التدفق. بعد ذلك، باستخدام Elastic Stack، تتم فهرسة سجلات التدفق واستخدامها لإنشاء لوحة معلومات Kibana لتصور المعلومات.

يوضح الرسم التخطيطي سيناريو يتيح لك تصور سجلات تدفق مجموعة أمان الشبكة باستخدام Elastic Stack.

‏‏الخطوات

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

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

إعداد Elastic Stack

من خلال ربط سجلات تدفق NSG مع Elastic Stack، يمكننا إنشاء لوحة معلومات Kibana تتيح لنا البحث والرسم البياني والتحليل واستخلاص الأفكار من سجلاتنا.

تثبيت Elasticsearch

يتم استخدام الإرشادات التالية لتثبيت Elasticsearch في Ubuntu Azure VMs. للحصول على إرشادات حول كيفية تثبيت البحث المرن في Red Hat Enterprise Linux، راجع تثبيت Elasticsearch مع RPM.

  1. Elastic Stack من الإصدار 5.0 وما بعده يتطلب Java 8. شغّل الأمر java -version للتحقق من إصدارك. إذا لم يكن لديك Java مثبتا، فشاهد الوثائق على JDKs المuppored Azure.

  2. نزّل الحزمة الثنائية الصحيحة لنظامك:

    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
    

    يمكن العثور على أساليب التثبيت الأخرى على تثبيت Elasticsearch

  3. تحقق من تشغيل Elasticsearch بالأمر:

    curl http://127.0.0.1:9200
    

    يجب أن تشاهد استجابة مشابهة للآتي:

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

لمزيد من الإرشادات حول تثبيت Elastic search، راجع إرشادات التثبيت.

تثبيت Logstash

يتم استخدام الإرشادات التالية لتثبيت 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 للوصول إلى سجلات التدفق وتحليلها. أنشئ ملف 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]}"
                    }
       convert => {"unixtimestamp" => "integer"}
       convert => {"srcPort" => "integer"}
       convert => {"destPort" => "integer"}
      }
    
      date{
        match => ["unixtimestamp" , "UNIX"]
      }
     }
    output {
      stdout { codec => rubydebug }
      elasticsearch {
        hosts => "localhost"
        index => "nsg-flow-logs"
      }
    }
    

لمزيد من الإرشادات حول تثبيت Logstash، راجع الوثائق الرسمية.

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

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

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

لبدء Logstash، شغّل الأمر:

sudo /etc/init.d/logstash start

لمزيد من المعلومات حول هذا المكون الإضافي، راجع الوثائق.

تثبيت Kibana

للحصول على إرشادات حول كيفية تثبيت Kibana في Red Hat Enterprise Linux، راجع تثبيت Kibana باستخدام RPM. للحصول على إرشادات حول كيفية تثبيت Kibana في أنظمة Ubuntu/Debian باستخدام حزمة مستودع، راجع تثبيت Kibana من مستودع APT.

ثم تم اختبار التعليمات التالية في Ubuntu ويمكن استخدامها في توزيعات Linux المختلفة لأنها ليست خاصة ب Ubuntu.

  1. شغّل الأوامر التالية لتثبيت 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. لتشغيل Kibana، استخدم الأوامر:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. لعرض واجهة ويب Kibana الخاصة بك، انتقل إلى http://localhost:5601

  4. بالنسبة لهذا السيناريو، فإن نمط الفهرس المستخدم لسجلات التدفق هو "nsg-flow-logs". يمكنك تغيير نمط الفهرس في قسم "الإخراج" من ملف logstash.conf الخاص بك.

  5. إذا كنت تريد عرض لوحة معلومات Kibana عن بُعد، فأنشئ قاعدة NSG واردة تسمح بالوصول إلى المنفذ 5601.

أنشئ لوحة معلومات Kibana

يظهر نموذج لوحة معلومات لعرض الاتجاهات والتفاصيل في تنبيهاتك في الصورة التالية:

شكل 1

قم بتنزيل ملف لوحة التحكم و ملف المرئيات و ملف البحث المحفوظ .

ضمن علامة التبويب الإدارة في Kibana، انتقل إلى الكائنات المحفوظة واستورد جميع الملفات الثلاثة. ثم من علامة التبويب لوحة المعلومات يمكنك فتح وتحميل نموذج لوحة المعلومات.

يمكنك أيضًا إنشاء مرئياتك ولوحات معلوماتك المُصممة خصيصًا لمقاييس تهمك. اقرأ المزيد حول إنشاء مرئيات Kibana من وثائق Kibana الرسمية.

تصور سجلات تدفق NSG

يوفر نموذج لوحة المعلومات عدة تصورات لسجلات التدفق:

  1. التدفقات حسب القرار / الاتجاه بمرور الوقت - الرسوم البيانية للسلاسل الزمنية التي توضح عدد التدفقات خلال الفترة الزمنية. يمكنك تحرير وحدة الوقت والمدى لكل من هذه المرئيات. تدفقات حسب القرار توضح نسبة السماح أو رفض القرارات المتخذة، بينما تدفقات حسب الاتجاه تظهر نسبة حركة المرور الواردة والصادرة. باستخدام هذه المرئيات، يمكنك فحص اتجاهات نسبة استخدام الشبكة بمرور الوقت والبحث عن أي طفرات أو أنماط غير عادية.

    لقطة شاشة تعرض لوحة معلومات نموذجية مع تدفقات حسب القرار والاتجاه بمرور الوقت.

  2. التدفقات حسب الوجهة / منفذ المصدر - مخططات دائرية توضح توزيع التدفقات إلى المنافذ الخاصة بها. باستخدام طريقة العرض هذه، يمكنك مشاهدة المنافذ الأكثر استخداما. إذا نقرت فوق منفذ معين داخل المخطط الدائري، فستتم تصفية باقي لوحة المعلومات وصولا إلى تدفقات هذا المنفذ.

    تظهر لقطة شاشة نموذج لوحة معلومات مع تدفقات حسب الوجهة ومنفذ المصدر.

  3. عدد التدفقات وأقرب وقت للتسجيل - تعرض لك المقاييس عدد التدفقات المسجلة وتاريخ أول سجل تم تسجيله.

    تظهر لقطة شاشة نموذج لوحة معلومات مع عدد التدفقات وأقرب وقت تسجيل.

  4. التدفقات حسب NSG والقاعدة - رسم بياني شريطي يوضح لك توزيع التدفقات داخل كل NSG، وتوزيع القواعد داخل كل مجموعة أمان شبكة. ، يمكنك معرفة مجموعة أمان الشبكة والقواعد التي أنشأت أكبر عدد من نسبة استخدام الشبكة.

    تظهر لقطة شاشة لوحة تحكم نموذجية مع تدفقات بواسطة NSG والقاعدة.

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

    تظهر لقطة شاشة نموذج لوحة معلومات مع تدفقات حسب أهم عشرة عناوين IP للمصدر والوجهة.

  6. مجموعات التدفق - يعرض لك هذا الجدول المعلومات الواردة في كل مجموعة تدفق، و NGS وقاعدة المقابلة لها.

    تظهر لقطة الشاشة مجموعات التدفق في جدول.

باستخدام شريط الاستعلام في الجزء العلوي من لوحة المعلومات، يمكنك تصفية لوحة المعلومات استنادًا إلى أي معلمة من التدفقات، مثل معرف الاشتراك أو مجموعات الموارد أو القاعدة أو أي متغير آخر مهم. لمزيد من التفاصيل حول استعلامات Kibana وعوامل التصفية، راجع الوثائق الرسمية

الخاتمة

من خلال الجمع بين سجلات تدفق Network Security Group مع Elastic Stack، توصلنا إلى طريقة قوية وقابلة للتخصيص لتصور حركة مرور الشبكة الخاصة بنا. تسمح لك لوحات المعلومات هذه باكتساب ومشاركة الرؤى بسرعة حول نسبة استخدام الشبكة، وتصفية أي حالات شاذة محتملة والتحقيق فيها. باستخدام Kibana، يمكنك تخصيص لوحات المعلومات هذه وإنشاء تصورات محددة لتلبية أي احتياجات تتعلق بالأمان والتدقيق والامتثال.

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

تعرف على كيفية تصور سجلات تدفق NSG باستخدام Power BI من خلال زيارة تصور سجلات تدفقات NSG باستخدام Power BI