تمرين - إنشاء وإدارة مجموعات أمان الشبكة

مكتمل

بصفتك مهندس الحلول لشركة التصنيع، فأنت الآن تريد البدء في نقل تطبيق ERP وخوادم قاعدة البيانات إلى Azure. كخطوة أولى، ستقوم باختبار خطة أمان شبكتك، باستخدام اثنين من الخوادم.

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

Diagram of exercise scenario network security groups.

إنشاء شبكة ظاهرية ومجموعة أمان شبكة

أولًا سوف تنشيء الشبكة الافتراضية والشبكات الفرعية لموارد الخادم الخاصة بك. ستقوم بعد ذلك بإنشاء مجموعة أمان للشبكة.

  1. في Azure Cloud Shell، شغِّل الأمر التالي لتعيين مجموعة موارد بيئة الاختبار المعزولة للمتغير rg:

    rg=<rgn>[sandbox resource group name]</rgn>
    
  2. لإنشاء الشبكة الظاهرية ⁧⁩لخوادم ERP⁧⁩ والشبكة الفرعية ⁧⁩للتطبيقات⁧⁩، شغِّل الأمر التالي في Cloud Shell:

    az network vnet create \
        --resource-group $rg \
        --name ERP-servers \
        --address-prefixes 10.0.0.0/16 \
        --subnet-name Applications \
        --subnet-prefixes 10.0.0.0/24
    
  3. لإنشاء الشبكة الفرعية لقواعد البيانات، شغِّل الأمر التالي في Cloud Shell:

    az network vnet subnet create \
        --resource-group $rg \
        --vnet-name ERP-servers \
        --address-prefixes 10.0.1.0/24 \
        --name Databases
    
  4. لإنشاء مجموعة أمان الشبكة ERP-SERVERS-NSG، قم بتشغيل الأمر التالي في Cloud Shell:

    az network nsg create \
        --resource-group $rg \
        --name ERP-SERVERS-NSG
    

إنشاء أجهزة ظاهرية بنظام تشغيل Ubuntu

بعد ذلك، ستقوم بإنشاء جهازين ظاهريين يسميان ⁧⁩AppServer⁧⁩ و⁧⁩DataServer⁧⁩. قم بنشر ⁧⁩AppServer⁧⁩ إلى الشبكة الفرعية ⁧⁩التطبيقات⁧⁩، و⁧⁩DataServer⁧⁩ إلى الشبكة الفرعية ⁧⁩قواعد البيانات⁧⁩. إضافة واجهات شبكة الجهاز الظاهري إلى مجموعة أمان الشبكة ⁧⁩ERP-SERVERS-NSG⁧⁩. ثم لاختبار مجموعة أمان الشبكة، استخدم هذه الأجهزة الظاهرية.

  1. لإنشاء جهاز ظاهري لـ AppServer، قم بتشغيل الأمر التالي في Cloud Shell. لحساب المسؤول، استبدل <password> بكلمة مرور معقدة.

    wget -N https://raw.githubusercontent.com/MicrosoftDocs/mslearn-secure-and-isolate-with-nsg-and-service-endpoints/master/cloud-init.yml && \
    az vm create \
        --resource-group $rg \
        --name AppServer \
        --vnet-name ERP-servers \
        --subnet Applications \
        --nsg ERP-SERVERS-NSG \
        --image UbuntuLTS \
        --size Standard_DS1_v2 \
         --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
        --no-wait \
        --admin-password <password>
    
  2. لإنشاء جهاز ظاهري لـ DataServer، قم بتشغيل الأمر التالي في Cloud Shell. لحساب المسؤول، استبدل <password> بكلمة مرور معقدة.

    az vm create \
        --resource-group $rg \
        --name DataServer \
        --vnet-name ERP-servers \
        --subnet Databases \
        --nsg ERP-SERVERS-NSG \
        --size Standard_DS1_v2 \
        --image UbuntuLTS \
        --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
         --no-wait \
        --admin-password <password>
    
  3. قد تستغرق الأجهزة الظاهرية عدة دقائق لتصل إلى حالة قيد التشغيل. للتأكد من أن الأجهزة الظاهرية قيد التشغيل، قم بتشغيل الأمر التالي في Cloud Shell:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, Provisioned:provisioningState, Power:powerState}" \
        --output table
    

    عند اكتمال إنشاء الجهاز الظاهري، ينبغي أن ترى الإخراج التالي.

    Name        Provisioned    Power
    ----------  -------------  ----------
    AppServer   Succeeded      VM running
    DataServer  Succeeded      VM running
    

التحقق من الاتصال الافتراضي

الآن، ستحاول فتح جلسة Secure Shell (SSH) لكل جهاز من أجهزتك الظاهرية. تذكر، لقد قمت حتى الآن بنشر مجموعة أمان شبكة ذات قواعد افتراضية.

  1. للاتصال بأجهزتك الظاهرية، استخدم SSH مباشرة من Cloud Shell. للقيام بذلك، تحتاج إلى عناوين IP العامة التي تم تخصيصها لأجهزتك الظاهرية. لإدراج عناوين IP التي ستستخدمها للاتصال بالأجهزة الظاهرية، قم بتشغيل الأمر التالي في Cloud Shell:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
        --output table
    
  2. لتسهيل الاتصال بأجهزتك الظاهرية في أثناء بقية هذا التمرين، قم بتعيين عناوين IP العامة للمتغيرات. لحفظ عنوان IP العام لـ AppServer وDataServer إلى متغيّر، قم بتشغيل الأمر التالي في Cloud Shell:

    APPSERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name AppServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
    DATASERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name DataServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
  3. للتحقق من إمكانية الاتصال بجهاز AppServer الظاهري من عدمها، قم بتشغيل الأمر التالي في Cloud Shell:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    ستحصل على الرسالة ⁧Connection timed out⁩.

  4. للتحقق من إمكانية الاتصال بجهاز DataServer الظاهري من عدمها، قم بتشغيل الأمر التالي في Cloud Shell:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    

    ستحصل على نفس رسالة فشل الاتصال.

تذكر أن القواعد الافتراضية ترفض كافة نسبة الاستخدام الواردة إلى شبكة ظاهرية، إلا إذا كانت نسبة الاستخدام هذه تأتي من نفس الشبكة الظاهرية. حظرت قاعدة ⁧⁩رفض كل الوارد⁧⁩ اتصالات SSH الواردة التي حاولت للتو.

⁩الواردة⁧

الاسم أولوية IP المصدر IP الوجهة Access
السماح بـ VNet الوارد 65000 VIRTUAL_NETWORK VIRTUAL_NETWORK سماح
رفض كل الوارد 65500 * * رفض

إنشاء قاعدة أمان لـ SSH

كما اختبرت الآن، فإن القواعد الافتراضية في مجموعة أمان الشبكة ⁧⁩ERP-SERVERS-NSG⁧⁩ تتضمن قاعدة ⁧⁩رفض كل الوارد⁧⁩. سوف تقوم الآن بإضافة قاعدة بحيث يمكنك استخدام SSH للاتصال بـ ⁧⁩AppServer⁧⁩ و⁧⁩DataServer⁧⁩.

  1. لإنشاء قاعدة أمان واردة جديدة لتمكين الوصول إلى SSH، شغّل الأمر التالي في Cloud Shell:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name AllowSSHRule \
        --direction Inbound \
        --priority 100 \
        --source-address-prefixes '*' \
        --source-port-ranges '*' \
        --destination-address-prefixes '*' \
        --destination-port-ranges 22 \
        --access Allow \
        --protocol Tcp \
        --description "Allow inbound SSH"
    
  2. للتحقق من إمكانية الاتصال بجهاز AppServer الظاهري من عدمها الآن، قم بتشغيل الأمر التالي في Cloud Shell:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

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

  3. يتعين أن تكون قادرًا الآن على الاتصال. بعد الرسالة ⁧Are you sure you want to continue connecting (yes/no)?⁩، أدخل ⁧yes⁩.

  4. أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.

  5. لإغلاق جلسة عمل AppServer، أدخِل exit.

  6. للتحقق من إمكانية الاتصال بجهاز DataServer الظاهري من عدمها الآن، شغِّل الأمر التالي في Cloud Shell:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    
  7. يتعين أن تكون قادرًا الآن على الاتصال. بعد الرسالة ⁧Are you sure you want to continue connecting (yes/no)?⁩، أدخل ⁧yes⁩.

  8. أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.

  9. لإغلاق جلسة عمل ⁧⁩DataServer⁧⁩، أدخل ⁧exit⁩.

إنشاء قاعدة أمان لمنع الوصول إلى الويب

الآن، أضف قاعدة حتى يتمكن ⁧⁩AppServer⁧⁩ من الاتصال بـ ⁧⁩DataServer⁧⁩ عبر HTTP، ولكن لا يمكن لـ ⁧⁩DataServer⁧⁩ الاتصال بـ ⁧⁩AppServer⁧⁩ عبر HTTP. هذه هي عناوين IP الداخلية لهذه الخوادم:

اسم الخادم عنوان IP
AppServer 10.0.0.4
DataServer 10.0.1.4
  1. لإنشاء قاعدة أمان واردة جديدة لرفض وصول HTTP عبر المنفذ 80، شغِّل الأمر التالي في Cloud Shell:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes 10.0.1.4 \
        --source-port-ranges '*' \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80"
    

اختبار اتصال HTTP بين الأجهزة الظاهرية

هنا، ستتحقق ما إذا كانت القاعدة الجديدة تعمل. ينبغي أن يكون ⁧⁩AppServer⁧⁩ قادرًا على الاتصال بـ ⁧⁩DataServer⁧⁩ عبر HTTP. وينبغي ألا يكون ⁧⁩DataServer⁧⁩ قادرًا على الاتصال بـ ⁧⁩AppServer⁧⁩ عبر HTTP.

  1. للاتصال بجهاز AppServer الظاهري، قم بتشغيل الأمر التالي في Cloud Shell. تحقق مما إذا كان ⁧⁩AppServer⁧⁩ يمكنه الاتصال بـ ⁧⁩DataServer⁧⁩ عبر HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.

  3. ينبغي أن تتضمن الاستجابة الرسالة ⁧200 OK⁩.

  4. للاتصال بجهاز DataServer الظاهري، قم بتشغيل الأمر التالي في Cloud Shell. تحقق مما إذا كان ⁧⁩DataServer⁧⁩ يمكنه الاتصال بـ ⁧⁩DataServer⁧⁩ عبر HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.

  6. لا ينبغي أن ينجح هذا، لأنك منعت الوصول عبر المنفذ 80. بعد عدة دقائق، ينبغي أن تحصل على الرسالة ⁧Connection timed out⁩. لإيقاف الأمر قبل انتهاء المهلة، اضغط على Ctrl+C.

نشر مجموعة أمان التطبيقات

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

Diagram of exercise scenario app security groups.

  1. لإنشاء مجموعة أمان تطبيقات جديدة بالاسم ERP-DB-SERVERS-ASG، شغِّل الأمر التالي في Cloud Shell:

    az network asg create \
        --resource-group $rg \
        --name ERP-DB-SERVERS-ASG
    
  2. لربط DataServer بمجموعة أمان التطبيقات، شغِّل الأمر التالي في Cloud Shell:

    az network nic ip-config update \
        --resource-group $rg \
        --application-security-groups ERP-DB-SERVERS-ASG \
        --name ipconfigDataServer \
        --nic-name DataServerVMNic \
        --vnet-name ERP-servers \
        --subnet Databases
    
  3. لتحديث قاعدة HTTP في مجموعة أمان الشبكة ERP-SERVERS-NSG، شغِّل الأمر التالي في Cloud Shell. ينبغي أن يشير إلى مجموعة أمان التطبيق ⁧⁩ERP-DB-Servers⁧⁩.

    az network nsg rule update \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes "" \
        --source-port-ranges '*' \
        --source-asgs ERP-DB-SERVERS-ASG \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80 using application security group"
    

اختبار قاعدة أمان HTTP المحدثة

  1. للاتصال بجهاز AppServer الظاهري، شغِّل الأمر التالي في Cloud Shell. تحقق مما إذا كان ⁧⁩AppServer⁧⁩ يمكنه الاتصال بـ ⁧⁩DataServer⁧⁩ عبر HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.

  3. كما في السابق، ينبغي أن تتضمن الاستجابة الرسالة ⁧200 OK⁩. يمكن أن تستغرق إعدادات مجموعة أمان التطبيقات دقيقة أو دقيقتين حتى يتم تفعيلها. إذا لم تتلق الرسالة ⁧200 OK⁩ في البداية، فانتظر دقيقة وحاول مرة أخرى.

  4. للاتصال بجهاز DataServer، شغِّل الأمر التالي في Cloud Shell. تحقق مما إذا كان ⁧⁩DataServer⁧⁩ يمكنه الاتصال بـ ⁧⁩DataServer⁧⁩ عبر HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.

  6. وكما في السابق، لا ينبغي أن ينجح هذا، لأنك منعت الوصول عبر المنفذ 80. بعد عدة دقائق، ينبغي أن تحصل على الرسالة ⁧Connection timed out⁩. لإيقاف الأمر قبل انتهاء المهلة، اضغط على Ctrl+C.

لقد تأكدت الآن من أن قاعدة مجموعة أمان الشبكة الخاصة بك تعمل باستخدام مجموعة أمان التطبيقات، بنفس الطريقة التي تستخدم بها عنوان IP المصدر. إذا أردنا إضافة خوادم بيانات إضافية، فيمكنك التأكد من أن لديها أمان الشبكة المناسب بسهولة عن طريق إضافة الخوادم الجديدة إلى ERP-DB-SERVERS-ASG.