![Powershell: compruebe si el Firewall está habilitado (no los perfiles)](https://rvso.com/image/1604268/Powershell%3A%20compruebe%20si%20el%20Firewall%20est%C3%A1%20habilitado%20(no%20los%20perfiles).png)
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:
- ¿Está habilitado el Firewall de Windows? [NO FUNCIONA]
- ¿Están habilitados los 3 perfiles? [LABORAL]
- ¿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?
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
}
};