Powershell: compruebe si el Firewall está habilitado (no los perfiles)

Powershell: compruebe si el Firewall está habilitado (no los perfiles)

Me siento un poco incómodo con la forma en que Windows 10 muestra el estado del Firewall. Estoy intentando auditar mis dispositivos con Windows 10 y Server 2016 para obtener la siguiente información:

  1. ¿Está habilitado el Firewall de Windows? [NO FUNCIONA]
  2. ¿Están habilitados los 3 perfiles? [LABORAL]
  3. ¿Hay habilitado un firewall de terceros? [LABORAL]

Desde esta pantalla parece que todo está habilitado y en buen estado: Perfiles FW saludables

Sin embargo, cuando subo un nivel, este es el mensaje que veo (al hacer clic en "Activar" no se hace nada): WF desactivado debido a BitDefender

Si reviso las claves de registro aquí para los tres perfiles, puedo ver que están todos habilitados: "HKLM:\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy"sin embargo, en realidad no están "habilitados" porque el Firewall de Windows está deshabilitado.

Este pequeño fragmento detecta firewalls de terceros en el dispositivo:

$firewalls= @(Get-WmiObject -Namespace $securityCenterNS -class FirewallProduct -ErrorAction Stop)

if($firewalls.Count -eq 0){

    Write-Output "No third party firewall installed."

}else{ 

    $firewalls | Foreach-Object {                       
        [int]$productState=$_.ProductState
        $hexString=[System.Convert]::toString($productState,16).padleft(6,'0')
        $provider=$hexString.substring(0,2)
        $realTimeProtec=$hexString.substring(2,2)
        $definition=$hexString.substring(4,2)

        "Product Name : {0}."     -f $_.displayName
        "Service Type : {0}."     -f $SecurityProvider[[String]$provider]
        "State        : {0}.`n`n" -f $RealTimeBehavior[[String]$realTimeProtec]
    }
}

<# OUTPUT:
Product Name : Bitdefender Firewall
Service Type : AntiVirus
State        : ON
#>

Pregunta: ¿Cómo puedo saber si un Firewall de Windows (no sólo sus perfiles) está realmente habilitado o deshabilitado? ¿Hay algún valor particular que necesito encontrar en el registro? ¿Hay algún comando a continuación que me diga rápidamente si el FW está realmente activado o no?

Comandos de firewall

Respuesta1

Elfirewall de Windowsse instala en el sistema operativo como un servicio. Para saber si está habilitado o deshabilitado globalmente, deberá confirmar si su estado es "en ejecución" o "detenido".

Potencia Shell

$FWService = (Get-Service | ?{$_.Name -eq "mpssvc"});
$FWService | %{
    If($_.Status -eq "Running"){
        Write-Host "The $($_.DisplayName) service is running." -Foregroundcolor Green
        }Else{
        Write-Host "The $($_.DisplayName) service is stopped." -Foregroundcolor Red
        }
    };

Además, segúnPerfiles de firewall de Windowsse afirma que. . .

  • Windows Firewall ofrece tres perfiles de firewall: dominio, privado y público. El perfil de dominio se aplica a redes donde el sistema host puede autenticarse en un controlador de dominio. El perfil privado es un perfil asignado por el usuario y se utiliza para designar redes privadas o domésticas. Por último, el perfil predeterminado es el perfil público, que se utiliza para designar redes públicas como puntos de acceso Wi-Fi en cafeterías, aeropuertos y otros lugares.

Esto significa que el Firewall de Windows también se puede deshabilitar o habilitar en estos tres niveles de perfil y, por lo tanto, para confirmar si está habilitado o deshabilitado aquí, deberá verificar el estado de estos perfiles.

Potencia Shell

$FWProfiles = (Get-NetFirewallProfile);
Write-Host "Windows Firewall Profile Statuses" -Foregroundcolor Yellow;
$FWProfiles | %{
    If($_.Enabled -eq 1){
        Write-Host "The Windows Firewall $($_.Name) profile is enabled"  -Foregroundcolor Green
        }Else{
        Write-Host "The Windows Firewall $($_.Name) profile is disabled" -Foregroundcolor Red
        } 
    };

Recursos adicionales

información relacionada