Sécuriser les réseaux Azure avec NSGs : Tutoriel étape par étape

Les groupes de sécurité réseau Azure ou NSG Azure vous permettent de filtrer le trafic réseau à la fois entrant et sortant, à partir d’une ou plusieurs ressources Azure. Si vous avez jamais besoin d’empêcher l’accès à une ressource Azure, vous devez comprendre comment les NSG fonctionnent.

Dans cet article, vous allez apprendre le but du NSG Azure et comment les configurer avec le langage de script PowerShell.

Prérequis

  • Une ressource Azure à cibler. Ce tutoriel utilisera un abonnement pay-as-you-go et une machine virtuelle Azure Windows Server 2019.
  • PowerShell 7+. Les versions antérieures de PowerShell peuvent fonctionner, mais ce tutoriel utilise PowerShell 7.0.1 pour la configuration.
  • Le module PowerShell Az d’Azure

Comprendre les NSG Azure

Pensez à un NSG Azure comme un pare-feu. Un pare-feu se compose de règles définissant les actions à prendre sur le trafic entrant et sortant appelées ensembles de règles. Les pare-feu sont généralement livrés avec des ensembles de règles par défaut qui dictent ce qui peut et ne peut pas traverser le pare-feu ; les NSG Azure ont des caractéristiques similaires.

Contrairement aux pare-feu traditionnels, les NSG Azure disposent également d’un concept cloud appelé étiquettes de service. Les étiquettes de service sont la manière d’Azure d’abstraire les plages d’adresses pour les rendre plus faciles à gérer.

Passons brièvement en revue chacun de ces sujets importants.

Utilisation des étiquettes de service pour simplifier la configuration des règles

Dans les services cloud, les adresses IP et les plages peuvent souvent changer. Cela rend difficile la maintenance des ensembles de règles de plage d’adresses Azure définis manuellement. Heureusement, Azure définit de nombreuses étiquettes de service différentes que votre règle NSG peut cibler.

Les étiquettes de service sont un concept qui utilise toujours la liste d’adresses la plus récente. Les étiquettes de service sont un moyen d’attribuer des espaces réservés à des ensembles de plages d’adresses pour une gestion plus facile.

Azure service tags in the Azure portal

Soyez conscient des ensembles de règles par défaut

Lorsque vous créez et appliquez une NSG Azure, vous devez d’abord connaître les règles que ces NSG appliquent automatiquement. Ces ensembles de règles par défaut sont immuables et sont créés pour le trafic entrant et sortant.

Chaque règle dans un ensemble de règles NSG Azure a une priorité. La priorité dicte l’ordre d’opération ou quelles règles prennent le pas sur d’autres. Par exemple, si une règle avec une priorité de 65000 existe et bloque tout le trafic entrant, et que vous créez une règle avec une priorité de 64999 qui autorise le port 80, la NSG Azure bloquera tout le trafic à l’exception du port 80.

Default Azure NSG rule priorities

Les règles par défaut ne peuvent pas être modifiées, mais vous pouvez les outrepasser en utilisant une règle de priorité supérieure comme indiqué ci-dessus. Chacune de ces règles s’applique à tous les protocoles tels que TCP, UDP et ICMP.

Assurez-vous que vos règles utilisent un numéro inférieur à 65500 pour outrepasser les règles par défaut !

Lorsque vous créez un NSG Azure, vous verrez différentes règles par défaut :

Règles d’entrée

  • AllowVNetInBound – Cette règle d’entrée contient toutes les plages d’adresses IP définies pour le réseau virtuel et tous les espaces d’adresses connectés sur site. De plus, cette règle contient les réseaux virtuels interconnectés, les réseaux virtuels connectés à une passerelle de réseau virtuel, l’adresse IP virtuelle de l’hôte et les préfixes d’adresse utilisés sur les routes définies par l’utilisateur. Cette règle est définie avec une priorité de 65000.
  • AllowAzureLoadBalancerInBound – La balise de service AzureLoadBalancer se traduit par l’adresse IP virtuelle de l’hôte, 168.63.129.16, où la sonde de santé Azure prend son origine. Le trafic réel ne passe pas par cet endroit, et si vous n’utilisez pas l’équilibrage de charge Azure, cette règle peut être outrepassée. L’adresse IP virtuelle de l’hôte existe dans toutes les régions spécifiquement pour fournir des services d’infrastructure essentiels tels que DHCP, DNS, IMDS et la surveillance de l’état. Cette règle est définie avec une priorité de 65001.
  • DenyAllInbound – Définie comme dernière règle, en utilisant la priorité 65500, cette règle interdit tout trafic entrant non explicitement autorisé.

Règles de sortie

  • AllowVNetOutBound – Ceci contient toutes les plages d’adresses IP définies pour le réseau virtuel, toutes les espaces d’adresses sur site connectées, les réseaux virtuels interconnectés, les réseaux virtuels connectés à une passerelle de réseau virtuel, l’adresse IP virtuelle de l’hôte, et tous les préfixes d’adresse utilisés sur les itinéraires définis par l’utilisateur. Cette règle est définie avec une priorité de 65000.
  • AllowInternetOutBound – Espace d’adresses IP en dehors du réseau virtuel et accessible par Internet public. Inclut la plage d’adresses de l’espace d’adresses IP public appartenant à Azure. Cette règle est définie avec une priorité de 65001.
  • DenyAllOutBound – Comme dans le jeu de règles d’entrée, cette règle est définie comme la dernière règle, en utilisant une priorité de 65500. Cette règle sortante refusera tout le trafic non explicitement autorisé.

Création de NSGs Azure avec PowerShell

Assez de discours, passons aux choses sérieuses et commençons à créer des NSGs Azure avec PowerShell ! En supposant que vous êtes dans votre console PowerShell et authentifié, continuez à lire.

Lié : Connect-AzAccount : Votre passerelle vers Azure avec PowerShell

Pour créer un NSG Azure avec PowerShell, vous avez besoin d’une commande ; New-AzNetworkSecurityGroup. Pour créer un NSG avec cette commande, fournissez-lui le nom, le nom du groupe de ressources sous lequel créer le NSG, et l’emplacement.

L’exemple de code ci-dessous utilise la cmdlet New-AzNetworkSecurityGroup pour créer un NSG appelé NSG-MyVM dans le groupe de ressources Articles situé dans le centre de données Azure eastus.

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

$NSG = New-AzNetworkSecurityGroup @Params

Création de règles NSG Azure avec PowerShell

Une fois que vous avez le NSG, l’ensemble de règles par défaut ne suffit probablement pas. Vous devrez créer vos propres règles.

Configuration d’une règle d’entrée pour le protocole Bureau à distance

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.

Pour ajouter une nouvelle règle d’entrée à un NSG existant, vous devez suivre trois étapes:

  1. Exécutez la commande Get-AzNetworkSecurityGroup pour récupérer le NSG existant.
  2. Exécutez la commande Add-AzNetworkSecurityRuleConfig pour créer la règle.
  3. Exécutez la commande Set-AzNetworkSecurityGroup pour appliquer cette règle au NSG.

L’exemple de code ci-dessous utilise la commande Get-AzNetworkSecurityGroup pour récupérer un NSG existant. Ensuite, une règle est définie à l’aide de Add-AzNetworkSecurityRuleConfig, qui est ensuite appliquée au NSG existant à l’aide de la cmdlet 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

Le paramètre Priorité détermine quand la règle est évaluée, la valeur de 200 est proche du haut car 4096 est la règle de priorité la plus basse.

Souvent, le trafic sortant n’est pas bloqué car il peut être difficile de connaître tous les ports possibles qu’une application peut utiliser. Heureusement, vous pouvez trouver certaines recommandations expertes de filtrage sortant de l’Institut SANS, une organisation largement reconnue pour les normes de sécurité de l’information.

Pour mettre en œuvre les recommandations de SANS, nous pouvons utiliser les mêmes trois étapes fournies ci-dessus, mais cette fois créer une règle avec plusieurs ports et avec une Direction sortante au lieu de la direction entrante.

  • MS RPC – ports TCP et UDP 135
  • NetBIOS/IP – ports TCP et UDP 137-139
  • SMB/IP – port TCP 445
  • Protocole de transfert de fichiers trivial (TFTP) – port UDP 69
  • Syslog – port UDP 514
  • Protocole simple de gestion du réseau (SNMP) – ports UDP 161-162

Le code ci-dessous récupère une règle NSG existante à l’aide de la cmdlet Get-AzNetworkSecurityGroup. Une règle sortante est définie à l’aide de Add-AzNetworkSecurityRuleConfig et appliquée via la 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

Bien sûr, certains de ces ports sont précieux et nécessaires, en fonction des services que vous proposez. Il est très probable que vous deviez personnaliser cette liste en fonction des besoins de votre application, qui sont généralement fournis par le fournisseur ou en utilisant un outil pour trouver les ports ouverts comme netstat.

Lié : Trouver les ports avec Netstat et PowerShell

Configuration d’un NSG Azure pour un sous-réseau spécifique

Il se peut que vous ayez segmenté votre espace de réseau virtuel via des sous-réseaux. Pour obtenir une granularité plus fine, vous pouvez appliquer les NSG à un sous-réseau spécifique afin de contrôler de manière granulaire le trafic dans ce sous-réseau.

Le code ci-dessous recherche un préfixe d’adresse complet et applique un NSG à celui-ci.

# Récupérer un réseau virtuel existant
$VNet = Get-AzVirtualNetwork -Name 'Articles-vnet' -ResourceGroupName 'Articles'
# Récupérer un NSG existant
$NSG  = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

# Sélectionner le premier sous-réseau en utilisant la notation de tableau et le premier enregistrement situé à l'indice 0
$Params = @{
    'VirtualNetwork'       = $VNet
    'Name'                 = ($VNet.Subnets[0]).Name
    'AddressPrefix'        = ($VNet.Subnets[0]).AddressPrefix
    'NetworkSecurityGroup' = $NSG
}

# Appliquer la configuration mise à jour à la configuration du sous-réseau, puis appliquer le changement au VNet
Set-AzVirtualNetworkSubnetConfig @Params
Set-AzVirtualNetwork -VirtualNetwork $VNet

Ensuite, apprenez comment utiliser les interfaces réseau pour segmenter davantage et limiter les NSG uniquement à ce qui peut être nécessaire, comme une interface réseau.

Application d’un NSG Azure à une interface réseau.

Similairement à la façon dont fonctionnent les sous-réseaux, vous pouvez appliquer des règles NSG directement à une interface réseau. Ce niveau de granularité est généralement inutile, mais lorsque vous avez plusieurs interfaces réseau par machine virtuelle, il peut être judicieux d’appliquer des ensembles de règles différents à chaque interface NIC selon les besoins.

De la même manière que la limitation de sous-réseau est définie, vous pouvez appliquer des règles à une interface NIC individuelle. Dans ce cas, vous utilisez la commande Get-AzNetworkInterface pour récupérer une interface NIC spécifique sur la machine virtuelle donnée. Cela aura pour effet d’attribuer l’ensemble NSG précédemment créé à la propriété NetworkSecurityGroup.

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

Et en ce qui concerne le diagnostic et l’analyse du trafic à travers un NSG ? Continuez à lire pour en savoir plus sur les journaux de flux NSG et comment les utiliser!

Débogage et résolution des problèmes avec les journaux de flux NSG

Tout au long de la création et de l’utilisation d’un NSG, vous pouvez constater que vous avez besoin d’un débogage supplémentaire pour résoudre un problème de règle cassée ou analyser le trafic. Les journaux de flux sont une fonctionnalité de l’Azure Network Watcher qui enregistre des informations sur le trafic IP passant par un NSG.

Une fois que l’Azure Network Watcher capture le trafic réseau, il stocke ces données dans un compte de stockage Azure. À l’aide de PowerShell, vous pouvez configurer les journaux de flux NSG Azure pour analyser ce compte de stockage Azure et déboguer et résoudre plus facilement ce qui se passe.

Articles connexes : Comment télécharger et installer l’outil AzCopy

L’activation des journaux de flux NSG consiste en trois étapes approximatives en PowerShell :

  1. Enregistrez le fournisseur Microsoft.Insights.
  2. Créez un Espace de travail Operational Insights pour stocker les données.
  3. Activez le journal de flux NSG avec la commande Set-AzNetworkWatcherConfigFlowLog.

Pour faciliter la configuration des journaux de flux Azure NSG, le code PowerShell ci-dessous simplifiera les différentes étapes nécessaires. Ce code crée notamment un Espace de travail Operational Insights et associe une configuration de journal de flux à la souscription, à l’espace de travail et au NSG appropriés.

$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

Les journaux de flux contiennent de nombreuses propriétés différentes, comme c’est typique dans les journaux de pare-feu. Cela inclut des propriétés telles que l’adresse IP source et de destination, les ports, les protocoles et les horodatages. Les journaux des versions 1 et 2 présentent une grande différence, à savoir que la version 2 comprend le concept d’état de flux. Cela marque la continuation et la terminaison d’un flux ainsi que des informations sur la bande passante du trafic.

Étapes suivantes

Les NSG Azure sont des outils puissants pour limiter et auditer le trafic vers une ressource. Utilisés efficacement, vous pouvez sécuriser correctement vos ressources et votre infrastructure. Avec les capacités d’audit grâce aux journaux de flux NSG et la possibilité de limiter les NSG aux sous-réseaux ou aux adaptateurs réseau, vous disposez de la flexibilité nécessaire pour définir des règles selon les besoins et vérifier que tout le trafic est conforme aux attentes.

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