تأمين شبكات Azure بواسطة NSGs: دليل تحليلي خطوة بخطوة

مجموعات أمان الشبكة في Azure أو Azure NSGs تسمح لك بتصفية حركة المرور في الشبكة سواءً الواردة أو الصادرة من مصادر Azure واحدة أو أكثر. إذا كنت تحتاج أبدًا إلى منع الوصول إلى مورد Azure، يجب عليك أن تفهم كيفية عمل NSGs.

في هذه المقالة، ستتعلم الغرض من Azure NSG وكيفية إعدادها باستخدام لغة البرمجة PowerShell.

المتطلبات الأساسية

  • مورد Azure لاستهدافه. ستستخدم هذا البرنامج التعليمي اشتراكًا بنظام الدفع حسب الاستخدام وآلة افتراضية Azure تعمل بنظام Windows Server 2019.
  • PowerShell 7+. قد يعمل إصدار سابق من PowerShell ولكن هذا البرنامج التعليمي يستخدم PowerShell 7.0.1 للتكوين.
  • وحدة PowerShell Azure Az

فهم Azure NSGs

فكر في Azure NSG كجدار نار. يتكون جدار الحماية من قواعد تحدد الإجراءات المتخذة على حركة المرور الواردة والصادرة وتسمى مجموعات القواعد. عادةً ما يأتي جدار الحماية مع مجموعات قواعد افتراضية تحدد ما يمكن وما لا يمكن أن يمر عبر الجدار الناري؛ Azure NSGs لديها نفس المبدأ.

على عكس جدران الحماية التقليدية ، تحتوي Azure NSGs أيضًا على مفهوم سحابي يسمى علامات الخدمة. علامات الخدمة هي طريقة Azure لتجريد مجموعات عناوين IP لتسهيل إدارتها.

دعنا نغطي بإيجاز كل هذه الموضوعات المهمة.

استخدام علامات الخدمة لتبسيط تكوين القواعد

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

علامات الخدمة هي مفهوم يستخدم دائمًا أحدث قائمة عناوين. علامات الخدمة هي طريقة لتعيين عناوين نطاقات مجموعات لتسهيل الإدارة.

Azure service tags in the Azure portal

كن على علم بمجموعات القواعد الافتراضية

عند إنشاء وتطبيق Azure NSG ، يجب أن تعرف أولا عن القواعد التي تطبقها تلك NSGs تلقائيًا. تلك القواعد الافتراضية لا يمكن تغييرها وتم إنشاؤها للحركة الواردة والصادرة.

لكل قاعدة في مجموعة قواعد NSG في Azure أولوية. تحدد الأولوية ترتيب التشغيل أو القواعد التي تستبدل الأخرى. على سبيل المثال ، إذا كانت هناك قاعدة بأولوية 65000 تحظر جميع حركة المرور الواردة وأنشئت قاعدة بأولوية 64999 تسمح بالمنفذ 80 ، ستحظر NSG في Azure جميع حركة المرور باستثناء المنفذ 80.

Default Azure NSG rule priorities

لا يمكن تغيير قواعد الإعداد الافتراضية ولكن يمكنك استبدالها باستخدام قاعدة ذات أولوية أعلى كما هو موضح أعلاه. تنطبق كل من هذه القواعد على جميع البروتوكولات مثل TCP و UDP و ICMP.

تأكد من أن قواعدك تستخدم رقمًا أقل من 65500 لاستبدال القواعد الافتراضية!

عند إنشاء NSG في Azure ، سترى مجموعة متنوعة من القواعد الافتراضية:

قواعد الوارد

  • AllowVNetInBound – تحتوي هذه القاعدة الواردة على جميع نطاقات عناوين IP المحددة للشبكة الافتراضية وجميع مساحات العناوين المتصلة في الموقع. بالإضافة إلى ذلك ، تحتوي هذه القاعدة على شبكات افتراضية متصلة ببوابة شبكة افتراضية ، وعنوان IP افتراضي للمضيف ، وأي بادئات عناوين تستخدم في مسارات محددة بواسطة المستخدم. تم تعيين هذه القاعدة باستخدام أولوية 65000.
  • AllowAzureLoadBalancerInBound – يترجم وسم الخدمة AzureLoadBalancer إلى عنوان IP افتراضي للمضيف ، 168.63.129.16 حيث ينشأ استطلاع الصحة الخاص بـ Azure. المرور الفعلي للحركة لا يحدث من خلال هنا ، وإذا لم تستخدم توازن الحمل في Azure ، فيمكن استبدال هذه القاعدة. يوجد عنوان IP افتراضي للمضيف في جميع المناطق بهدف توفير خدمات البنية التحتية الأساسية مثل DHCP و DNS و IMDS ورصد الصحة. تم تعيين هذه القاعدة باستخدام أولوية 65001.
  • DenyAllInbound – يتم تعيين هذه القاعدة كأخر قاعدة ، باستخدام أولوية 65500 ، وترفض جميع حركة المرور الوارد غير المسموح بها صراحة.

قواعد الصادر

  • AllowVNetOutBound – يحتوي على جميع نطاقات عناوين IP المحددة للشبكة الافتراضية، جميع مساحات عناوين المواقع المتصلة على الأرض، الشبكات الافتراضية المقترنة، الشبكات الافتراضية المتصلة ببوابة الشبكة الافتراضية، عنوان IP الافتراضي الخاص بالمضيف، وأي بادئات عناوين تستخدم في مسارات المستخدم المحددة. تم تعيين هذه القاعدة بأولوية 65000.
  • AllowInternetOutBound – مساحة عناوين IP خارج الشبكة الافتراضية والتي يمكن الوصول إليها عبر الإنترنت العام. تشمل نطاق عناوين مساحة عناوين IP العامة المملوكة بواسطة Azure. تم تعيين هذه القاعدة بأولوية 65001.
  • DenyAllOutBound – على غرار مجموعة قواعد الوصول الواردة، يتم تعيين هذه القاعدة كآخر قاعدة، باستخدام أولوية 65500. ستمنع هذه القاعدة الصادرة كل حركة المرور غير المسموح بها بوضوح.

إنشاء NSGs في Azure باستخدام PowerShell

لا تكثر الحديث، دعنا نبدأ في إنشاء بعض NSGs في Azure باستخدام PowerShell! نفترض أنك في واجهة سطر الأوامر الخاصة بـ PowerShell ومصادق عليه، استمر في القراءة.

ذات صلة: Connect-AzAccount: بوابتك إلى Azure باستخدام PowerShell

لإنشاء NSG في Azure باستخدام PowerShell، تحتاج إلى أمر واحد؛ New-AzNetworkSecurityGroup. لإنشاء NSG باستخدام هذا الأمر، قم بتوفير اسم الNSG واسم مجموعة الموارد لإنشاء NSG تحتها، والموقع.

مثال الكود أدناه يستخدم الأمر New-AzNetworkSecurityGroup لإنشاء NSG يسمى NSG-MyVM في مجموعة موارد المقالات الموجودة في مركز بيانات Azure الواقع في eastus.

$Params = @{
  'Name'              = 'NSG-MyVM'
  'ResourceGroupName' = 'Articles' 
  'Location'          = 'centralus'
}

$NSG = New-AzNetworkSecurityGroup @Params

إنشاء قواعد NSG في Azure باستخدام PowerShell

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

تكوين قاعدة واردة لبروتوكول Remote Desktop

A common administrative task is the need to create an inbound rule for the Remote Desktop Protocol (RDP). In the tutorial’s example, perhaps it’s going to be applied to a Windows Server Azure VM and you need to access the VM via RDP. In that case, you need to open up port 3389 inbound.

لإضافة قاعدة واردة جديدة إلى NSG الموجودة ، يلزم ثلاث خطوات:

  1. تشغيل الأمر Get-AzNetworkSecurityGroup لاسترداد NSG الموجودة.
  2. تشغيل الأمر Add-AzNetworkSecurityRuleConfig لإنشاء القاعدة.
  3. تشغيل الأمر Set-AzNetworkSecurityGroup لتطبيق تلك القاعدة على NSG.

مثال الكود أدناه يستخدم Get-AzNetworkSecurityGroup لاسترداد NSG موجود. بعد ذلك ، يتم تعريف قاعدة باستخدام Add-AzNetworkSecurityRuleConfig ، والتي يتم تطبيقها على NSG الموجود باستخدام أمر Set-AzNetworkSecurityGroup.

$NSG = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

$Params = @{
  'Name'                     = 'allowRDP'
  'NetworkSecurityGroup'     = $NSG
  'Protocol'                 = 'TCP'
  'Direction'                = 'Inbound'
  'Priority'                 = 200
  'SourceAddressPrefix'      = 'my.ip.address'
  'SourcePortRange'          = '*'
  'DestinationAddressPrefix' = '*'
  'DestinationPortRange'     = 3389
  'Access'                   = 'Allow'
}

Add-AzNetworkSecurityRuleConfig @Params | Set-AzNetworkSecurityGroup

يحدد المعلمة “الأولوية” متى يتم تقييم القاعدة ، وقيمة “200” تكون قريبة من الأعلى حيث تكون “4096” هي أدنى قاعدة أولوية.

غالبًا ما لا يتم حظر حركة المرور الصادرة لأنه يمكن أن يكون من الصعب معرفة جميع المنافذ الممكنة التي قد يحتاجها التطبيق. لحسن الحظ ، يمكنك العثور على بعض توصيات فلترة الخروج المتخصصة من معهد SANS ، وهو منظمة موثوق بها على نطاق واسع لمعايير أمان المعلومات.

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

  • MS RPC – منفذ TCP و UDP 135
  • NetBIOS/IP – منافذ TCP و UDP 137-139
  • SMB/IP – منفذ TCP 445
  • بروتوكول نقل الملفات البسيط (TFTP) – منفذ UDP 69
  • Syslog – منفذ UDP 514
  • بروتوكول إدارة الشبكة البسيط (SNMP) – منافذ UDP 161-162

الكود أدناه يسترد قاعدة NSG الموجودة باستخدام cmdlet Get-AzNetworkSecurityGroup. تم تعريف قاعدة صادرة باستخدام Add-AzNetworkSecurityRuleConfig وتطبيقها باستخدام cmdlet Set-AzNetworkSecurityGroup.

$NSG = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

$Params = @{
  'Name'                     = 'DenySANSOutBound'
  'NetworkSecurityGroup'     = $NSG
  'Protocol'                 = '*'
  'Direction'                = 'Outbound'
  'Priority'                 = 4000
  'SourceAddressPrefix'      = '*'
  'SourcePortRange'          = '*'
  'DestinationAddressPrefix' = 'Internet'
  'DestinationPortRange'     = @('135', '137','139','445','69','514','161','162')
  'Access'                   = 'Deny'
}

Add-AzNetworkSecurityRuleConfig @Params | Set-AzNetworkSecurityGroup

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

ذات الصلة: العثور على المنافذ باستخدام Netstat وPowerShell

تكوين NSG في Azure لمجال فرعي محدد

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

الكود أدناه يجد بادئة العنوان بأكمله ويطبق NSG عليها.

# استرداد شبكة افتراضية موجودة
$VNet = Get-AzVirtualNetwork -Name 'Articles-vnet' -ResourceGroupName 'Articles'
# استرداد NSG موجود
$NSG  = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

# تحديد النطاق الفرعي الأول باستخدام ترقيم المصفوفة والسجل الأول الموجود في الفهرس 0
$Params = @{
    'VirtualNetwork'       = $VNet
    'Name'                 = ($VNet.Subnets[0]).Name
    'AddressPrefix'        = ($VNet.Subnets[0]).AddressPrefix
    'NetworkSecurityGroup' = $NSG
}

# تطبيق التكوين المحدث على تكوين النطاق الفرعي ثم تطبيق التغيير على الشبكة الافتراضية
Set-AzVirtualNetworkSubnetConfig @Params
Set-AzVirtualNetwork -VirtualNetwork $VNet

بعد ذلك، تعرف على كيفية استخدام واجهات الشبكة لتقسيم NSG وتقييدها فقط على ما قد يكون مطلوبًا، مثل واجهة الشبكة.

تطبيق NSG في Azure على واجهة الشبكة

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

بشكل مشابه لكيفية تحديد الشبكة الفرعية ، يمكنك تطبيق القواعد على وحدة تحكم الشبكة الفردية. في هذه الحالة ، تستخدم أمر cmdlet Get-AzNetworkInterface لاسترداد وحدة تحكم الشبكة الفردية المحددة في الجهاز الافتراضي المعطى. سيكون لديك NSG الذي تم إنشاؤه مسبقًا في خاصية NetworkSecurityGroup.

$NSG = Get-AzNetworkSecurityGroup -Name "MyVM-nsg" -ResourceGroupName "Articles"
$NIC = Get-AzNetworkInterface -name "MyVM-vm-nic"
 
$NIC.NetworkSecurityGroup = $NSG
$NIC | Set-AzNetworkInterface

ماذا عن تشخيص وتحليل حركة المرور من خلال NSG؟ استمر في القراءة لمعرفة المزيد حول سجلات تدفق NSG وكيفية استخدامها!

تصحيح الأخطاء وحل المشكلات باستخدام سجلات تدفق NSG

خلال إنشاء NSG واستخدامه ، قد تجد أنك بحاجة إلى تصحيح أخطاء إضافية لحل مشكلة قاعدة مكسورة أو تحليل حركة المرور. سجلات التدفق هي ميزة في Azure Network Watcher تسجل معلومات حول حركة IP التي تمر عبر NSG.

بمجرد أن يلتقط Azure Network Watcher حركة الشبكة ، فإنه يخزن تلك البيانات في حساب تخزين Azure. باستخدام PowerShell ، يمكنك تكوين سجلات تدفق Azure NSG لتحليل ذلك الحساب تخزين Azure وتصحيح الأخطاء وتحليل المشكلة بشكل أفضل.

ذات صلة: كيفية تنزيل وتثبيت أداة AzCopy

تمكين سجلات تدفق NSG يتألف من ثلاث خطوات تقريبية في PowerShell:

  1. سجّل موفر الـ Microsoft.Insights.
  2. أنشئ مساحة عمل لـ Operational Insights لتخزين البيانات.
  3. قم بتمكين سجل تدفق NSG باستخدام الأمر Set-AzNetworkWatcherConfigFlowLog.

لتسهيل تكوين سجلات تدفق Azure NSG، يقدم الكود التالي تبسيطًا للخطوات المطلوبة. يقوم هذا الكود بإنشاء مساحة عمل لـ Operational Insights ويربط تكوين سجل تدفق بالاشتراك والمساحة العمل الصحيحة و NSG.

$resourceGroupName = '<some resource group name>'
$NetworkWatcher = Get-AzNetworkWatcher -Name '<some name>' -ResourceGroupName $resourceGroupName
$NSG            = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName $resourceGroupName
$StorageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name '<storage account name>'
$Subscription   = Get-AzSubscription -SubscriptionName '<your subscription name>'

$Workspace = New-AzOperationalInsightsWorkspace -Location 'centralus' -Name "DefaultWorkspace-$($NSG.Name)-Articles" -Sku 'Standard' -ResourceGroupName $resourceGroupName

$Params = @{
  'NetworkWatcher'         = $NetworkWatcher
  'TargetResourceId'       = $NSG.Id
  'StorageAccountId'       = $StorageAccount.Id
  'EnableFlowLog'          = $True
  'FormatType'             = 'JSON'
  'FormatVersion'          = 2
  'EnableTrafficAnalytics' = $True
  'WorkspaceResourceId'    = $Workspace.ResourceId
  'WorkspaceGUID'          = $Workspace.CustomerId
  'WorkspaceLocation'      = 'centralus'
}

Set-AzNetworkWatcherConfigFlowLog @Params

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

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

تعتبر NSGs الخاصة بـ Azure أدوات قوية لتقييد وتدقيق حركة المرور إلى الموارد. عند استخدامها بشكل فعال، يمكنك تأمين مواردك وبنيتك التحتية بشكل صحيح. من خلال قدرات التدقيق من خلال سجلات تدفق NSG والقدرة على تحديد نطاق NSG للأقسام الفرعية أو بطاقات الشبكة، يمكنك الحصول على المرونة اللازمة لتحديد القواعد حسب الحاجة والتحقق من أن جميع حركة المرور على ما يرام.

Source:
https://adamtheautomator.com/azure-nsg/