تمرين - إنشاء وإدارة مجموعات أمان الشبكة
بصفتك مهندس الحلول لشركة التصنيع، فأنت الآن تريد البدء في نقل تطبيق ERP وخوادم قاعدة البيانات إلى Azure. كخطوة أولى، ستقوم باختبار خطة أمان شبكتك، باستخدام اثنين من الخوادم.
ستقوم في هذه الوحدة بتكوين مجموعة أمان الشبكة وقواعد الأمان لتقييد نسبة استخدام الشبكة على خوادم معينة. تريد أن يتمكن خادم التطبيق الخاص بك من الاتصال بخادم قاعدة البيانات عبر HTTP. لا تريد أن يتمكن خادم قاعدة البيانات من استخدام HTTP للاتصال بخادم التطبيق.
إنشاء شبكة ظاهرية ومجموعة أمان شبكة
أولًا سوف تنشيء الشبكة الافتراضية والشبكات الفرعية لموارد الخادم الخاصة بك. ستقوم بعد ذلك بإنشاء مجموعة أمان للشبكة.
في Azure Cloud Shell، شغِّل الأمر التالي لتعيين مجموعة موارد بيئة الاختبار المعزولة للمتغير
rg:rg=<rgn>[sandbox resource group name]</rgn>لإنشاء الشبكة الظاهرية لخوادم 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لإنشاء الشبكة الفرعية لقواعد البيانات، شغِّل الأمر التالي في Cloud Shell:
az network vnet subnet create \ --resource-group $rg \ --vnet-name ERP-servers \ --address-prefixes 10.0.1.0/24 \ --name Databasesلإنشاء مجموعة أمان الشبكة ERP-SERVERS-NSG، قم بتشغيل الأمر التالي في Cloud Shell:
az network nsg create \ --resource-group $rg \ --name ERP-SERVERS-NSG
إنشاء أجهزة ظاهرية بنظام تشغيل Ubuntu
بعد ذلك، ستقوم بإنشاء جهازين ظاهريين يسميان AppServer وDataServer. قم بنشر AppServer إلى الشبكة الفرعية التطبيقات، وDataServer إلى الشبكة الفرعية قواعد البيانات. إضافة واجهات شبكة الجهاز الظاهري إلى مجموعة أمان الشبكة ERP-SERVERS-NSG. ثم لاختبار مجموعة أمان الشبكة، استخدم هذه الأجهزة الظاهرية.
لإنشاء جهاز ظاهري لـ 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>لإنشاء جهاز ظاهري لـ 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>قد تستغرق الأجهزة الظاهرية عدة دقائق لتصل إلى حالة قيد التشغيل. للتأكد من أن الأجهزة الظاهرية قيد التشغيل، قم بتشغيل الأمر التالي في 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) لكل جهاز من أجهزتك الظاهرية. تذكر، لقد قمت حتى الآن بنشر مجموعة أمان شبكة ذات قواعد افتراضية.
للاتصال بأجهزتك الظاهرية، استخدم SSH مباشرة من Cloud Shell. للقيام بذلك، تحتاج إلى عناوين IP العامة التي تم تخصيصها لأجهزتك الظاهرية. لإدراج عناوين IP التي ستستخدمها للاتصال بالأجهزة الظاهرية، قم بتشغيل الأمر التالي في Cloud Shell:
az vm list \ --resource-group $rg \ --show-details \ --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \ --output tableلتسهيل الاتصال بأجهزتك الظاهرية في أثناء بقية هذا التمرين، قم بتعيين عناوين 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)"للتحقق من إمكانية الاتصال بجهاز AppServer الظاهري من عدمها، قم بتشغيل الأمر التالي في Cloud Shell:
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5ستحصل على الرسالة
Connection timed out.للتحقق من إمكانية الاتصال بجهاز 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.
لإنشاء قاعدة أمان واردة جديدة لتمكين الوصول إلى 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"للتحقق من إمكانية الاتصال بجهاز AppServer الظاهري من عدمها الآن، قم بتشغيل الأمر التالي في Cloud Shell:
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5قد تستغرق قاعدة مجموعة أمان الشبكة دقيقة أو دقيقتين حتى يتم تنفيذها. إذا تلقيت رسالة فشل في الاتصال، فحاول مرة أخرى.
يتعين أن تكون قادرًا الآن على الاتصال. بعد الرسالة
Are you sure you want to continue connecting (yes/no)?، أدخل yes.أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.
لإغلاق جلسة عمل AppServer، أدخِل
exit.للتحقق من إمكانية الاتصال بجهاز DataServer الظاهري من عدمها الآن، شغِّل الأمر التالي في Cloud Shell:
ssh azureuser@$DATASERVERIP -o ConnectTimeout=5يتعين أن تكون قادرًا الآن على الاتصال. بعد الرسالة
Are you sure you want to continue connecting (yes/no)?، أدخل yes.أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.
لإغلاق جلسة عمل DataServer، أدخل
exit.
إنشاء قاعدة أمان لمنع الوصول إلى الويب
الآن، أضف قاعدة حتى يتمكن AppServer من الاتصال بـ DataServer عبر HTTP، ولكن لا يمكن لـ DataServer الاتصال بـ AppServer عبر HTTP. هذه هي عناوين IP الداخلية لهذه الخوادم:
| اسم الخادم | عنوان IP |
|---|---|
| AppServer | 10.0.0.4 |
| DataServer | 10.0.1.4 |
لإنشاء قاعدة أمان واردة جديدة لرفض وصول 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.
للاتصال بجهاز AppServer الظاهري، قم بتشغيل الأمر التالي في Cloud Shell. تحقق مما إذا كان AppServer يمكنه الاتصال بـ DataServer عبر HTTP.
ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.
ينبغي أن تتضمن الاستجابة الرسالة
200 OK.للاتصال بجهاز DataServer الظاهري، قم بتشغيل الأمر التالي في Cloud Shell. تحقق مما إذا كان DataServer يمكنه الاتصال بـ DataServer عبر HTTP.
ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.
لا ينبغي أن ينجح هذا، لأنك منعت الوصول عبر المنفذ 80. بعد عدة دقائق، ينبغي أن تحصل على الرسالة
Connection timed out. لإيقاف الأمر قبل انتهاء المهلة، اضغط على Ctrl+C.
نشر مجموعة أمان التطبيقات
بعد ذلك، قم بإنشاء مجموعة أمان التطبيقات لخوادم قاعدة البيانات، بحيث يمكن تعيين نفس الإعدادات لجميع الخوادم في هذه المجموعة. إذا كنت تخطط لنشر المزيد من خوادم قواعد البيانات، وترغب في منع هذه الخوادم من الوصول إلى خوادم التطبيقات عبر HTTP. بتعيين مصادر في مجموعة أمان التطبيقات، لا تحتاج إلى الاحتفاظ يدويًا بقائمة عناوين IP في مجموعة أمان الشبكة. وبدلاً من ذلك، يمكنك تعيين واجهات الشبكة الخاصة بالأجهزة الظاهرية التي تريد إدارتها لمجموعة أمان التطبيقات.
لإنشاء مجموعة أمان تطبيقات جديدة بالاسم ERP-DB-SERVERS-ASG، شغِّل الأمر التالي في Cloud Shell:
az network asg create \ --resource-group $rg \ --name ERP-DB-SERVERS-ASGلربط 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لتحديث قاعدة 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 المحدثة
للاتصال بجهاز AppServer الظاهري، شغِّل الأمر التالي في Cloud Shell. تحقق مما إذا كان AppServer يمكنه الاتصال بـ DataServer عبر HTTP.
ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.
كما في السابق، ينبغي أن تتضمن الاستجابة الرسالة
200 OK. يمكن أن تستغرق إعدادات مجموعة أمان التطبيقات دقيقة أو دقيقتين حتى يتم تفعيلها. إذا لم تتلق الرسالة 200 OK في البداية، فانتظر دقيقة وحاول مرة أخرى.للاتصال بجهاز DataServer، شغِّل الأمر التالي في Cloud Shell. تحقق مما إذا كان DataServer يمكنه الاتصال بـ DataServer عبر HTTP.
ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'أدخل كلمة المرور التي استخدمتها عند إنشاء الجهاز الظاهري.
وكما في السابق، لا ينبغي أن ينجح هذا، لأنك منعت الوصول عبر المنفذ 80. بعد عدة دقائق، ينبغي أن تحصل على الرسالة
Connection timed out. لإيقاف الأمر قبل انتهاء المهلة، اضغط على Ctrl+C.
لقد تأكدت الآن من أن قاعدة مجموعة أمان الشبكة الخاصة بك تعمل باستخدام مجموعة أمان التطبيقات، بنفس الطريقة التي تستخدم بها عنوان IP المصدر. إذا أردنا إضافة خوادم بيانات إضافية، فيمكنك التأكد من أن لديها أمان الشبكة المناسب بسهولة عن طريق إضافة الخوادم الجديدة إلى ERP-DB-SERVERS-ASG.
هل تحتاج إلى مساعدة؟ راجع دليل استكشاف الأخطاء وإصلاحها الذي نقدمه أو يمكنك توفير ملاحظات معينة عبر الإبلاغ عن مشكلة.