إدارة جدار حماية المضيف باستخدام Azure IoT وOSConfig

هام

يتضمن الإصدار 1.0.3 (تاريخ النشر 28 يونيو 2022) التغييرات العاجلة على أسماء الأعضاء التي قد تؤثر على المستخدمين الحاليين. لمزيد من المعلومات، راجع: انتقال أسماء الأعضاء من PascalCase إلى camelCase في الإصدار 1.0.3

الجمهور

تم تصميم هذه المقالة لدعم الأشخاص الذين يقومون بتوفير الأجهزة أو إدارتها باستخدام Azure IoT. إذا لم يبدو ذلك مثلك، ففكر في إلقاء نظرة على Audiences لوثائق OSConfig.

نظرة عامة على جدار الحماية

عند تثبيت OSConfig على الأجهزة، يمكنك استخدام خدمات Azure IoT لتنفيذ العديد من مهام إدارة جدار الحماية الأساسية. على سبيل المثال:

  • التحقق مما إذا كان جدار الحماية نشطا
  • تأكد من وجود قواعد معينة (إنشاء إن لم يكن موجودا)
  • تأكد من عدم وجود قواعد معينة (حذف إذا تم العثور عليها)
  • مقارنة قواعد العديد من الأجهزة المنشورة بجهاز معروف جيدا
  • تعيين نهج نسبة استخدام الشبكة الافتراضية لنسبة استخدام الشبكة الواردة والصادرة

أيقونة جدار الحماية

تلميح

إذا كنت هنا لمرجع نموذج الكائن، يمكنك تخطي أمثلة استخدام الحالات إلى معلومات المرجع

أمثلة على حالات الاستخدام

يمكن أن تكون هذه الأمثلة بمثابة نقاط بداية للتكيف مع بيئتك الفريدة.

يتضمن كل مثال الخطوات والتقاطات الشاشة للعمل في مدخل Microsoft Azure، وللعمل في bash مع Azure CLI.

يتضمن كل مثال أيضا تباينات لجهاز واحد (على سبيل المثال، سيناريو استكشاف الأخطاء وإصلاحها)، أو للعديد من الأجهزة (على سبيل المثال، توفير التكوين أو سيناريو إعداد التقارير).

ما يمكن توقعه:

في إرشادات الجهاز الواحد، ستقرأ وتكتب الخصائص التي تم الإبلاغ عنها والخصائص المطلوبة مباشرة في OSConfig twin لجهاز. في الإرشادات على نطاق واسع، ستستخدم تكوينات IoT Hub (المعروفة أيضا باسم إدارة الجهاز التلقائي أو ADM) لدفع الخصائص المطلوبة إلى العديد من التوائم، واستخدام استعلامات IoT Hub (بشكل مستقل، أو المرفقة بالتكوينات كمقاييس) لمراقبة النتائج القادمة من الأجهزة.

المتطلبات الأساسية لتجربة الأمثلة على الأنظمة المباشرة

إذا كنت تستخدم هذه المقالة للرجوع إليها، فلا توجد متطلبات مسبقة. يمكنك مراجعة الأمثلة ونسخ أسماء الخصائص وما إلى ذلك.

إذا كنت تريد تجربة الأمثلة على الأنظمة المباشرة (مستحسن)، فاتبع الخطوات التالية:

  1. إنشاء حساب Azure مجاني أو استخدام حساب موجود

  2. توصيل جهاز واحد على الأقل ممكن بواسطة OSConfig إلى IoT Hub

    تلميح

    لإنشاء مركز IoT بسهولة مع الأجهزة (الظاهرية) المرفقة، راجع إنشاء بيئة مختبر OSConfig (باستخدام Azure IoT) في غضون 5 دقائق

  3. استعد لاتباع تعليمات مدخل Azure أو إرشادات Azure CLI في الأمثلة:

إذا كنت تفضل استخدام مدخل Microsoft Azure

  1. تسجيل الدخول إلى مدخل Microsoft Azure والوصول إلى صفحة نظرة عامة على مركز IoT لقطة شاشة تعرض IoT Hub والأجهزة من مدخل Microsoft Azure

-OR- إذا كنت تفضل استخدام Azure CLI

  1. موصى به: استخدم Azure Cloud Shell كبيئة bash الخاصة بك عن طريق تسجيل الدخول إلى مدخل Microsoft Azure، ثم تشغيل Azure Cloud Shell في وضع bash لقطة شاشة تفتح Cloud Shell من مدخل Microsoft Azure
  2. ALTERNATIVE: إذا كنت تفضل استخدام بيئة bash الخاصة بك بدلا من Cloud Shell، فقم بتثبيت Azure CLI وتسجيل الدخول
  3. تأكد من أن ملحق Azure IoT جاهز عن طريق تشغيل az extension add --name azure-iot

مثال A. هل جدار حماية المضيف نشط؟

state تعطي الخاصية ضمن properties.reported.Firewall إشارة عالية المستوى إلى ما إذا كان جدار الحماية المضيف نشطا. على سبيل المثال، يشير إلى ما إذا كان محرك جدار الحماية المضيف ممكنا وأن قاعدة واحدة على الأقل موجودة في جدول FILTER . لمزيد من المعلومات حول state تضمين القيم المحتملة، راجع: معلومات مرجعية.

  1. من صفحة مدخل IoT Hub، اختر الأجهزة في التنقل باليد اليسرى. إذا كان الجهاز مثبتا عليه IoT Edge بالإضافة إلى OSConfig، فاختر IoT Edge بدلا من الأجهزة.

  2. انقر فوق جهاز حيث تم تثبيت OSConfig.

  3. ضمن Module Identities انقر فوق osconfig.

  4. انقر فوق Module Identity Twin واستعرض JSON إلى properties.reported.Firewall.state. في مثال التقاط الشاشة التالي، يمكنك أن ترى ذلك state: enabled.

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

مثال ب. إنشاء قاعدة جدار حماية

يستخدم desiredRules هذا المثال وظيفة وحدة جدار الحماية. نقوم بإنشاء قاعدة جديدة تسمح بحركة مرور منفذ tcp الصادر 443 من الجهاز إلى الشبكة الفرعية 10.9.9.0/24.

لمزيد من المعلومات حول desiredRules (بما في ذلك معالجة قواعد متعددة وإزالة القواعد) راجع مرجع Firewall desiredRules لاحقا في هذه المقالة.

  1. باستخدام مدخل Azure، في وحدة osconfig المزدوجة للجهاز، ضمن properties.desired إضافة أو تعديل Firewall العقد و desiredRules كما يلي. وفقا لمعايير JSON، قد تحتاج إلى إضافة فاصلة في النهاية للتكامل مع الخصائص المطلوبة الأخرى إذا كانت موجودة.

    "Firewall": {
       "desiredRules": [
          {
             "desiredState": "present",
             "action": "accept",
             "direction": "out",
             "protocol": "tcp",
             "destinationAddress": "10.9.9.0/24",
             "destinationPort": 443
          }
       ]
    }
    

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

  2. بعد حوالي 30 ثانية، يمكنك التحقق من إجراء التغيير بنجاح من الوحدة النمطية المزدوجة نفسها. قم بتحديث طريقة عرض الوحدة النمطية المزدوجة، ثم قم بالتمرير للعثور على properties، ثم reported، ثم FirewallconfigurationStatus، state و.desiredRules

    لقطة شاشة توضح كيفية قراءة الخصائص المبلغ عنها لتكوين جدار الحماية لجهاز واحد باستخدام المدخل

مثال C. مقارنة بصمة حالة جدار الحماية للعديد من الأجهزة بجهاز معروف جيد

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

في أمثلة الجهاز الواحد، سنقوم ببساطة باسترداد القيمة، مما يعني أنك تقوم بإجراء مقارنة خارج النطاق. في الأمثلة على نطاق واسع، سنستخدم عامل تشغيل GROUP BY لاستعلام IoT Hub لإظهار القواسم المشتركة أو التباعد عبر الأسطول.

غير قابل للتطبيق، راجع مدخل Microsoft Azure، على نطاق واسع.

معلومات مرجعية

وصف نموذج الكائن

يصف هذا القسم الخصائص المزدوجة والسلوكيات المقابلة.

تلميح

تنطبق الوثائق المرجعية ل OSConfig على الأدوات ذات وجهات نظر محسنة لنموذج البيانات بلغة تعريف التوأم الرقمي (DTDL) أو بدونها. لمزيد من المعلومات، راجع: حول طرق العرض المطلوبة/المبلغ عنها العادية وطرق العرض المحسنة ل DTDL.

خصائص جدار الحماية المبلغ عنها/للقراءة فقط (لسيناريوهات إعداد التقارير والتدقيق)
  • المسار: properties.reported.Firewall (Firewall مكون، خصائص للقراءة فقط)

  • الوصف: حالة جدار الحماية المضيف كما تم اكتشافه بواسطة وحدة جدار الحماية في OSConfig

  • الأعضاء

    الاسم النوع ملاحظات
    حالة التكوين تعداد السلاسل يمثل حالة الفشل/النجاح للوصول إلى التكوين المطلوب. ذات معنى فقط إذا تم تعيين خصائص التكوين المطلوبة مثل desiredRules أو desiredDefaultPolicies تم تعيينها. القيمة المحتملة اعتبارا من هذه الكتابة هي successو failureو.unknown
    configurationStatusDetail سلسلة النص الذي يتم إرجاعه بواسطة واجهات برمجة التطبيقات الأساسية أو الأدوات مثل iptables. تهدف إلى توفير المستوى الأول من الرؤى في معلمات الإدخال السيئة، وما إلى ذلك دون اللجوء إلى التمشيط من خلال سجلات التشخيص.
    نهج افتراضية صفيف من الكائنات (راجع مثال الحمولة) يمثل التسليم الافتراضي لجدار الحماية للحزم التي لا تفي بأي قاعدة محددة. في سياق iptables، يتم تعيين هذا إلى نهج السلسلة لسلاسل الإدخال والإخراج لجدول التصفية. في محركات جدار الحماية الأخرى، سيؤدي ذلك إلى تعيين سلوك محرك جدار الحماية حسب الحاجة. على سبيل المثال، لا تحتوي بعض محركات جدار الحماية على فكرة سياسة صريحة، وتسقط حركة المرور بطبيعتها والتي لا تفي بأي قاعدة.
    بصمات الاصابع سلسلة • بصمة مبهمة لقائمة جميع قواعد جدار الحماية على الجهاز
    • يستخدم لمقارنة أعداد كبيرة من الأجهزة بجهاز معروف
    ملاحظة: في إصدارات OSConfig قبل إصدار أكتوبر 2022، كانت هذه الخاصية تعرف باسم "firewallFingerprint"
    الولاية تعداد السلاسل حالة عالية المستوى لجدار حماية المضيف. القيم المحتملة هي:
    unknown
    enabled
    disabled
    المنطق هو enabled أنه تم الكشف عن محرك جدار حماية نشط وبقاعدة واحدة على الأقل في جدول FILTER.
    ملاحظة: في إصدارات OSConfig قبل إصدار أكتوبر 2022، تم تقديم هذه المعلومات على أنها "firewallState" (بدلا من "state") وكانت القيم عبارة عن أعداد صحيحة (بدلا من سلاسل).
  • مثال على الحمولة (كما هو ملاحظ في قسم التوأم properties.reported )

    "Firewall": {
        "configurationStatus": "success",
        "configurationStatusDetail": "",
        "defaultPolicies": [
           {
              "direction": "in",
              "action": "accept"
           },
           {
              "direction": "out",
              "action": "accept"
           }
        ],
        "fingerprint": "c30d8b8bf5327a8a325a686e0c4bbf73b1bd33a72779af88827e8ea256caddb2",
        "state": "enabled"
    }
    
قواعد جدار الحماية المطلوبة

تنبيه

كما هو الحال مع أي إدارة جدار حماية، انتبه كثيرا عند حظر حركة المرور. لديك القدرة على منع الجهاز من متابعة اتصاله ب IoT Hub أو قنوات إدارية أخرى. في مثل هذه الحالات قد تكون هناك حاجة إلى الوصول المحلي إلى الجهاز للاسترداد.

  • المسار: properties.desired.Firewall.desiredRules (Firewall مكون، desiredRules خاصية قابلة للكتابة)

  • الوصف: قائمة مرتبة من واصفات القواعد. يمكن أن يكون لكل واصف قاعدة في القائمة الأعضاء التالين.

  • أعضاء كل واصف قاعدة

    الاسم النوع ملاحظات
    desiredState تعداد السلاسل مطلوب دائما. القيم المحتملة هي present (تعني أنه يجب إنشاء مثل هذه القاعدة إذا لم تكن هناك قاعدة مطابقة موجودة بالفعل)، أو absent (تعني أنه يجب حذف أي قاعدة موجودة على الجهاز الذي يطابق هذا الواصف إذا تم العثور عليها. بالنسبة لواصفات القواعد حيث desiredState: "present" وحيث لا توجد قاعدة مطابقة بالفعل على الجهاز، تتم إضافة القاعدة الجديدة في أعلى قائمة القواعد على الجهاز. بالنسبة للسياق، يمكنك التفكير في هذا على أنه مماثل ل iptables -I بدلا من iptables -A. إذا كانت واصفات قواعد متعددة desiredState: "present" موجودة في desiredRules، تتم إضافتها بحيث يتم الاحتفاظ بالترتيب. بمعنى آخر، ستكون القاعدة العليا في desiredRules أعلى قائمة القواعد على الجهاز، وستتبع القاعدة desiredRules التالية في ذلك في قائمة القواعد على الجهاز، وهكذا.
    إجراء تعداد السلاسل مطلوب دائما. القيم المُحتملة هي accept وdrop أو reject.
    direction تعداد السلاسل مطلوب دائما. القيم المُحتملة هي in أو out.
    البروتوكول تعداد السلاسل مطلوب دائما. القيم المُحتملة هي any وudp وtcp وicmp. لاحظ أن يعني any أي حركة مرور (على عكس معنى "كل من tcp وudp، ولكن ليس بروتوكولات IP الأخرى). وفقا لذلك، يجب ألا تتضمن sourcePort القواعد أو .destinationPortprotocol: "any"
    عنوان المصدر سلسلة عنوان IP أو نطاق CIDR. إذا لم يتم تحديدها، فستتطابق القاعدة الناتجة مع أي عنوان
    منفذ المصدر عدد صحيح ذات صلة بالقواعد حيث protocol: tcp أو protocol:udp. يجب عدم تضمينها في قواعد أخرى. تحديد رقم المنفذ عند تضمينه في قاعدة ذات صلة. عند عدم تضمينها، يشير إلى قاعدة يجب أن تتطابق مع أي رقم منفذ.
    عنوان الوجهة سلسلة عنوان IP أو نطاق CIDR. إذا لم يتم تحديدها، فستتطابق القاعدة الناتجة مع أي عنوان
    منفذ الوجهة عدد صحيح ذات صلة بالقواعد حيث protocol: tcp أو protocol:udp. يجب عدم تضمينها في قواعد أخرى. تحديد رقم المنفذ عند تضمينه في قاعدة ذات صلة. عند عدم تضمينها، يشير إلى قاعدة يجب أن تتطابق مع أي رقم منفذ.

مثال على الحمولة (كما هو ملاحظ في قسم التوأم properties.desired )

تمثل القواعد التالية نوايا المسؤول التالية:

  1. "الشبكة الفرعية للمسؤول المحلية هي 10.9.9.0/24، لذلك أريد أن تسمح الأجهزة للمنفذ الوارد 22 (SSH) من هناك"

  2. "كانت الشبكة الفرعية للمسؤول القديم 10.24.24.0/24، لذلك إذا كان أي جهاز لا يزال لديه قاعدة تسمح بالمنفذ 22 (SSH) من هناك، أريد إزالة مثل هذه القاعدة"

  3. ملاحظة: قد يرغب المسؤول في قاعدة ثالثة هنا لحظر SSH من كل مكان (مع الاستثناء أعلاه)، ولكن في هذا المثال سنستخدم نهج إسقاط افتراضي، مما يجعل مثل هذه القاعدة زائدة عن الحاجة. desiredDefaultPolicies راجع المثال لاحقا في هذا المستند.

    "Firewall": {
       "desiredRules": [
          {
             "desiredState": "present",
             "action": "accept",
             "direction": "in",
             "protocol": "tcp",
             "sourceAddress": "10.9.9.0/24",
             "destinationPort": 22
          },
          {
             "desiredState": "absent",
             "action": "accept",
             "direction": "in",
             "protocol": "tcp",
             "sourceAddress": "10.24.24.0/24",
             "destinationPort": 22
          }
       ]
    }
    

لاحظ أنه عندما يقوم سير عمل إداري بتعيين properties.desired.Firewall.desiredRules ( مكون، desiredRules خاصية قابلة للكتابة من منظور DTDL)، يقر الجهاز بإيصال نفس الشيء عن طريق إضافة خاصية desiredRules إلى properties.reported.FirewallFirewall . تتضمن قيمة هذه الخاصية نسخة من الحمولة الأصلية desiredRules ، إلى جانب رقم الإصدار ورمز الحالة. يمكن أن تستخدم مهام سير العمل الإدارية المستندة إلى IoT Hub هذا لتحديد ما إذا كانت الحالة المطلوبة قد وصلت إلى الجهاز بعد. هذا فقط اعتراف. لتحديد ما إذا كان الجهاز قد نجح في الوصول إلى الحالة المطلوبة، راجع configurationStatus أيضا و configurationStatusDetail.

نهج جدار الحماية المرغوبة

تنبيه

كما هو الحال مع أي إدارة جدار حماية، انتبه كثيرا عند حظر حركة المرور. لديك القدرة على منع الجهاز من متابعة اتصاله ب IoT Hub أو قنوات إدارية أخرى. في مثل هذه الحالات قد تكون هناك حاجة إلى الوصول المحلي إلى الجهاز للاسترداد.

تتطلب النهج الافتراضية تطبيقا دقيقا بشكل خاص. على الأنظمة المستندة إلى iptables، على سبيل المثال، تنطبق النهج على كل حزمة على حدة دون النظر في الاتصالات الموجودة. وبعبارة أخرى، فإن نهج الإرادة drop الافتراضي الوارد (بالإضافة إلى حظر الاتصالات الواردة الجديدة) يمنع الاستجابات من الأنظمة البعيدة. يمكن أن يجعل هذا من المستحيل على الجهاز الاتصال الصادر باستخدام بروتوكولات (مثل TCP) التي تتطلب تدفق حزمة ثنائية الاتجاه. لا تقم بتعيين action إلى drop على in النهج أو out دون التأكد أولا من وجود قواعد محددة لتمكين جميع الحزم المطلوبة في كلا الاتجاهين.

  • المسار: properties.desired.Firewall.desiredDefaultPolicies (Firewall مكون، desiredDefaultPolicies خاصية قابلة للكتابة)

  • الوصف: صفيف ذو عنصرين، يصف السلوك الافتراضي المطلوب (قبول أو إسقاط) لنسبة استخدام الشبكة الواردة وحركة المرور الصادرة.

  • أعضاء كل عنصر

    الاسم النوع ملاحظات
    direction تعداد السلاسل القيم المحتملة هي in أو out
    إجراء تعداد السلاسل مطلوب دائما. القيم المُحتملة هي accept أو drop.

مثال على الحمولة (كما هو ملاحظ في قسم التوأم properties.desired )

"Firewall": {
   "desiredDefaultPolicies": [
      {"direction": "in", "action": "drop"},
      {"direction": "out", "action": "accept"}
   ]
}

لاحظ أنه عندما تقوم مهام سير عمل إدارية بتعيين properties.desired.Firewall.desiredDefaultPolicies ( مكون، desiredDefaultPolicies خاصية قابلة للكتابة من منظور DTDL)، يقر الجهاز بإيصال نفس الشيء عن طريق إضافة خاصية desiredDefaultPolicies إلى properties.reported.FirewallFirewall . تتضمن قيمة هذه الخاصية نسخة من الحمولة الأصلية، إلى جانب رقم الإصدار ورمز الحالة. يمكن أن تستخدم مهام سير العمل الإدارية المستندة إلى IoT Hub هذا لتحديد ما إذا كانت الحالة المطلوبة قد وصلت إلى الجهاز بعد. هذا مجرد إقرار بالإيصال والمعالجة. لمزيد من المعلومات حول نجاح أو فشل الوصول إلى الحالة المطلوبة، راجع configurationStatus و configurationStatusDetail.

معلومات إضافية وأسئلة المتداولة

ماذا عن حالة استخدام "استبدال كل شيء"؟

في بعض الحالات، قد يرغب المسؤولون في فرض التحكم المطلق في القائمة الصافية لقواعد جدار الحماية الخاصة بالجهاز. تخيل نية مثل، "يجب أن توجد القواعد X وY وZ فقط؛ يجب إزالة أي قواعد أخرى (موجودة مسبقا على الجهاز أو تم إنشاؤها بمرور الوقت بواسطة عمليات أخرى) بشكل دوري." في هذا الوقت، لا توفر الوحدة النمطية OSConfig Firewall حالة الاستخدام هذه مباشرة. يمكن إنجاز إزالة قواعد محددة من خلال desiredRules و "desiredState": "absent"، ولكن لا توجد وظائف استبدال الكل صريحة. إذا كنت ترغب في إضافة مثل هذه الميزة، فشاهد وثائق القابلية للتوسعة في https://github.com/Azure/azure-osconfig.

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

للحصول على نظرة عامة على سيناريوهات وقدرات OSConfig، راجع:

للحصول على أمثلة عملية محددة، راجع: