PowerShell: Comment controller le Firewall de Win7

mai 9, 2012
Ce post à pour but de vous expliquer comment configurez le Firewall de Windows 7 au travers de PowerShell.
Ce sera assez court et bref mais utile Sourire

 

1. De quoi a t’on besoin?

Il nous faut un point d’entrée nous permettant d’interagir avec le Firewall de Windows 7. Pour ce faire, nous allons passer par quelques objets COM issus de la dll suivante HNetCfg

Les 2 objets que nous allons utilisés dans nos exemples sont:

  • HNetCfg.FwPolicy2: Permet l’accès au Client Firewall
  • HNetCfg.FWRule: Permet la création de nouvelles règles

2. Généralisation sur les constantes:

Il existe un ensemble de constante utilisées lors de la configuration de certains paramètres. Je vous en liste une partie

#IP Protocol
$NET_FW_IP_PROTOCOL_ICMPv4 = 1
$NET_FW_IP_PROTOCOL_IGMP = 2
$NET_FW_IP_PROTOCOL_TCP = 6
$NET_FW_IP_PROTOCOL_UDP = 17
$NET_FW_IP_PROTOCOL_IPv6 = 41
$NET_FW_IP_PROTOCOL_IPv6ROUTE = 43
$NET_FW_IP_PROTOCOL_IPv6FRAG = 44
$NET_FW_IP_PROTOCOL_GRE = 47
$NET_FW_IP_PROTOCOL_ICMPv6 = 58
$NET_FW_IP_PROTOCOL_IPv6NONXT = 59
$NET_FW_IP_PROTOCOL_IPv6OPTS = 60
$NET_FW_IP_PROTOCOL_VRRP = 112
$NET_FW_IP_PROTOCOL_PGM = 113
$NET_FW_IP_PROTOCOL_L2TP = 115

#FW Scope
$NET_FW_SCOPE_ALL = 0
$NET_FW_SCOPE_LOCAL_SUBNET = 1
#$NET_FW_SCOPE_REMOTE_SUBNET = 2

#FW Profiles
$NET_FW_PROFILE2_DOMAIN = 1
$NET_FW_PROFILE2_PRIVATE = 2
$NET_FW_PROFILE2_PUBLIC = 4
$NET_FW_PROFILE2_ALL = 7

#FW Action
$NET_FW_ACTION_BLOCK = 0
$NET_FW_ACTION_ALLOW = 1

#FW Rule Direction
$NET_FW_RULE_DIR_IN = 1
$NET_FW_RULE_DIR_OUT = 2

3. Comment accéder au client Firewall?

Il vous suffit d’instancier l’objet Com suivant: HNetCfg.FwPolicy2 qui permet un contrôle du client Firewall.

#Instance FW Policy Manager
$fwPolicy2 = New-Object -ComObject HNetCfg.FwPolicy2
$fwPolicy2.Rules.count

La ligne suivante nous donne le nombre de règles définies au niveau du Firewall (IN et OUT).

4. Comment créer une nouvelle règle?

Nous allons instancier un autre objet Com: HNetCfg.FWRule qui, lui, est responsable de la création de nouvelles règles.

#New Rule
$fwRule = New-Object -ComObject HNetCfg.FWRule
$fwRule.Name = "HTTP Block processing via PowerShell"
$fwRule.Description = "Wifi HotSpot Specefic rule"
$fwRule.Protocol = $NET_FW_IP_PROTOCOL_TCP
$fwRule.RemotePorts = "80,443"
$fwRule.Action = $NET_FW_ACTION_ALLOW
$fwRule.Direction = $NET_FW_RULE_DIR_OUT
$fwRule.Profiles = $NET_FW_PROFILE2_PUBLIC
$fwRule.Enabled = $true

$fwPolicy2.Rules.Add($fwRule)

La dernière ligne ajoute l’objet créé au niveau du firewall.

5. Comment récupérer et gérer les règles existantes?

Voici un petit exemple qui active ou désactive une règle en fonction de son état.

foreach($oRule in $fwPolicy2.Rules){
    if($oRule.Name.StartsWith("HTTP Block")){
        if($oRule.Enabled){
            $oRule.Enabled = $false
            Write-Host "Rule is disable"
        }else{
            $oRule.Enabled = $true
            Write-Host "Rule is enable"
        }
    }
}

6. Sources:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366459(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366415(v=vs.85).aspx

Enjoy !!!

Badack

It's only fair to share...Share on Facebook

Leave a Reply