Gérer le Pare-Feu en PowerShell

Module Progression
0% Terminé

Depuis Windows Server 2012 et Windows 8, Microsoft a intégré à PowerShell des commandes qui permettent de gérer le Pare-feu Windows. Ces commandes arrivent pour remplacer « netsh firewall » et « netsh advfirewall », comme le précise Microsoft :

« In future versions of Windows, Microsoft might remove the Netsh functionality for Windows Firewall with Advanced Security. »

I. Rappel sur les profils du Pare-feu

Windows intègre trois profils différents pour son Pare-feu.

cours-windows-core-21

L’avantage de ces profils, c’est qu’il est possible de créer des règles qui s’appliquent spécifiquement à certains profils, les profils quant à eux s’appliquent directement sur la connexion réseau. Par exemple, avoir un niveau de protection optimal lorsque l’on se connecte à un réseau « Public » et autoriser les connexions Bureau à distance sur sa machine lorsque l’on se trouve sur un réseau « Domaine ».

Avec ce système de profils, le Pare-feu de Windows est flexible et permet de gérer différents niveaux de sécurité. Ceci permet d’imaginer divers scénarios de protection.

Dans le cadre de ce cours, la connectivité du serveur est de type « Réseau avec domaine » puisqu’il est intégré au sein du domaine « it-connect.fr » et qu’il est connecté sur ce réseau.

II. Les commandes PowerShell dédiées au Pare-feu

Rapidement avant de commencer à manipuler, voici un résumé des commandes PowerShell disponible pour le Pare-feu. Sur le TechNet de Microsoft, vous trouverez une aide détaillée pour chaque commande (ou au sein de l’aide PowerShell intégrée à la console).

Liste des commandes PowerShell dédiées au pare-feu
Liste des commandes PowerShell dédiées au pare-feu

III. Le Pare-feu est-il actif ?

Pour se mettre dans l’ambiance, on va voir si le Pare-feu est actif ou inactif sur les différents profils.

Pour cela, on utilise la commande « Get-NetFirewallProfile » et pour avoir une vue synthétique, on affichera seulement les valeurs des propriétés « Name » et « Enabled ». Voici la commande :

Get-NetFirewallProfile | ft Name,Enabled

On remarque que le Pare-feu est actif sur l’ensemble des profils, ce qui est un comportement normal puisqu’il est actif par défaut sous Windows.

Le pare-feu est-il actif ?
Le pare-feu est-il actif ?

IV. Activer ou désactiver le Pare-feu sur un profil

Il est à noter que c’est déconseillé de désactiver le pare-feu, il vaut mieux faire l’effort de la configurer pour laisser passer les flux que l’on souhaite. Cependant, lors d’une phase test ou de façon temporaire, ce n’est pas gênant.

Dans les commandes PowerShell, il faudra préciser le profil sur lequel s’applique la commande, voici les valeurs à utiliser pour chacun des profils :

- Réseaux avec domaine : Domain
- Réseaux privés : Private
- Réseaux publics ou invités : Public
- Tous les profils : *

Pour désactiver le pare-feu sur tous les profils, on utilise la commande suivante :

Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

Vérifiez ceci par vous-même que le Pare-feu est bien désactivé sur tous les profils avec la commande que l’on a vue juste avant (cela permettra de s’entraîner).

Plutôt que de devoir saisir les trois noms de profils lorsque l’on souhaite cibler tous les profils, indiquez plutôt un astérisque « * », ce sera plus simple. On essaie cela immédiatement en réactivant le Pare-feu sur tous les profils :

Set-NetFirewallProfile -Profile * -Enabled True

Voici une copie d’écran qui résume les opérations que l’on vient d’effectuer :

Activer ou désactiver le pare-feu avec Set-NetFirewallProfile
Activer ou désactiver le pare-feu avec Set-NetFirewallProfile

V. Les groupes de règles prédéfinies

Pour simplifier le travail des administrateurs, Windows intègre un ensemble de groupes comprenant des règles prédéfinies. Ainsi, si l’on décide d’autoriser le groupe « Bureau à distance » cela implique la création d’une règle qui autorisera le trafic TCP sur le port 3389, cela évite à l’administrateur de rechercher lui-même les ports correspondant à un service particulier. Pratique, vous ne trouvez pas ?

Bien entendu, dans des cas plus spécifiques et des applications tierces, il faudra mettre passer par la création de règles manuelles.

Pour lister les groupes de règles prédéfinies disponibles, saisissez la suite de commandes suivantes :

$rules=Get-NetFirewallRule
$DisplayGroups=foreach ($rule in $rules){$rule.displaygroup}
$DisplayGroups | Select-Object -Unique

On récupère les informations d’un « Get-NetFirewallRule » et on affiche une seule fois chaque groupe de règles différent.

Lister les groupes de règles prédéfinies - Get-NetFirewallRule
Lister les groupes de règles prédéfinies - Get-NetFirewallRule

Windows gère bien ces groupes et il active ces règles prédéfinies selon l’état d’un service. Par exemple, si l’on active le Bureau à distance, il activera automatiquement les règles correspondantes pour que l’on puisse se connecter en RDP à son serveur. Si ce n’est pas le cas, il faudra effectuer l’opération manuellement.

Lorsque l’on créera une règle dans le Pare-feu, basée sur un groupe, on utilisera ce type de commande (exemple pour autoriser le Bureau à distance sur le profil domaine) :

New-NetFirewallRule –DisplayName "Autoriser le Bureau à distance (RDP)" -Group "Bureau à distance" -Profile Domain -Enabled True -Action Allow

C’est par l’intermédiaire de l’option « -Group » que l’on indiquera le groupe de règles que l’on souhaite utiliser (reprenez le nom affiché lors du listing, rappelez-vous ce que l’on a fait précédemment).

Créer une règle avec New-NetFirewallRule
Créer une règle avec New-NetFirewallRule

VI. Créer sa propre règle dans le Pare-feu

Maintenant, nous allons voir comment créer une règle personnalisée dans le Pare-feu Windows. L’objectif sera d’autoriser les connexions à destination du port 5900, en TCP, pour permettre les connexions à distance via VNC, à destination de l’IP « 192.168.1.20 » du serveur, sur le profil domaine.

New-NetFirewallRule –Name "VNC01" -DisplayName "Autoriser VNC (5900)" -Profile Domain -Enabled True -Protocol TCP -LocalPort 5900 -Action Allow -LocalAddress 192.168.1.20

Voici un descriptif sur les paramètres utilisés :

Nom du paramètre Utilisation
DisplayName Nom d’affichage de la règle
Name Nom de la règle, doit être unique, s’il n’est pas précisé, un identifiant est généré (voir copie-écran ci-dessous)
Profile Profil(s) sur le(s)quel(s) s’applique cette règle
Enabled Activer (true) ou désactiver (false) la règle
Protocol Spécifier TCP ou UDP, ceci est obligatoire si l’on souhaite préciser un port spécifique
LocalPort Port local visé (par le client)
Action Autoriser (allow) ou bloquer (block)
LocalAddress Spécifier l’adresse IP locale sur laquelle la règle s’applique, utile si le serveur dispose de plusieurs cartes réseaux (plusieurs adresses IP)

cours-windows-core-27

De nombreux autres paramètres sont également disponibles et peuvent être utilisés pour des règles encore plus fines (et complexes), voici les principaux :

Nom du paramètre Utilisation
PolicyStore Indiquer dans quel magasin de règles on souhaite ajouter la règle (par défaut : PersistentStore). Soit PersistentStore pour ajouter la règle dans le magasin des règles statiques, soit ActiveStore qui correspond aux règles appliquées actuellement et qui représente la somme des règles provenant de GPOs et celles du PersistentStore.
GPOSession Charger une GPO pour récupérer les règles à créer.
Platform Spécifier la version de Windows concernée par la règle
Direction Spécifier si la règle s'applique sur le trafic entrant (inbound) ou le trafic sortant (outbound)
RemoteAddress Adresse IP distante sur laquelle s'applique la règle, peut être intéressant pour autoriser l'accès pour une adresse IP précise (et inversement)
Program Appliquer la règle sur une application spécifique, par exemple, l'accès sur le port 80 à destination du serveur web apache, pour ne pas autoriser la connexion en 80 sur une autre application.
Service Le même principe que pour les programmes, mais applicable à un service.

Retrouvez le détail de tous ces paramètres sur la page suivante : TechNet New-NetFirewallRule

VII. Activer ou désactiver une règle existante

Précédemment, nous avons créé une règle nommée « VNC01 » qui et permet d’accéder en VNC sur notre serveur. Désormais, on souhaite désactiver cette règle, car finalement on préfère l’utilisation du Bureau à distance… On va seulement la désactiver et non la supprimer pour ne pas avoir à la recréer ultérieurement si besoin.

Le commandlet « Set-NetFirewallRule » permet de modifier une règle existante. Pour passer une règle sur l’état désactivé, voici ce que l’on utilisera comme commande :

Set-NetFirewallRule -Name VNC01 -Enabled false

Il suffit de spécifier le nom de la règle (Name) et de passer le statut Enabled sur false. Pour vérifier que la règle est bien désactivée, on va tout simplement récupérer la valeur du champ « Enabled » pour la règle « VNC01 », comme ceci :

(Get-NetFirewallRule -Name VNC01).Enabled

La commande doit retourner « False », si c’est bien le cas, je vous félicite ! 🙂

Exemple de désactivation d'une règle
Exemple de désactivation d'une règle

VIII. Supprimer une règle existante

Le temps passe et j’aimerais faire du tri dans mes règles de Pare-feu. Je remarque qu’il y a une règle nommée « VNC01 », qui est désactivée (rappelez-vous l’étape précédente) et que je n’utilise pas depuis longtemps, je décide de la supprimer.

Pour réaliser une suppression, on s’appuie sur le commandlet « Remove-NetFirewallFilter » suivi du nom de la règle à supprimer :

Remove-NetFirewallRule -Name VNC01

On peut vérifier que la règle est bien supprimée en la recherchant dans les règles, comme ceci :

Get-NetFirewallRule -Name VNC01

« Oups » ! PowerShell nous retourne un message d’erreur, mais rassurez-vous c’est normal, car la règle n’existe plus, vous avez bien fait votre travail.

Supprimer une règle avec Remove-NetFirewallRule
Supprimer une règle avec Remove-NetFirewallRule

IX. Conclusion

Au sein de ce chapitre, nous avons vu comment utiliser le Pare-feu Windows, ce qui vous permettra de sécuriser votre serveur au niveau des flux entrants et des flux sortants autorisés. Pensez à consulter les articles du TechNet pour obtenir de l’aide sur l’utilisation des paramètres spécifiques et des commandes que nous n’avons pas vues dans ce chapitre (cela serait beaucoup trop conséquent).

Dans le cadre d’une situation en entreprise, vous pouvez créer un script d’auto-configuration du Pare-feu contenant directement toutes les règles à créer. Il suffira de l’exécuter sur le serveur. Par ailleurs, vous pouvez passer par les stratégies de groupe.

Article Technet sur l’ensemble des commandes : PowerShell et Pare-feu – Technet

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian B.

Consultant chez Délibérata le jour, blogueur pour IT-Connect la nuit, je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian a publié 2698 articlesVoir toutes les publications de cet auteur