![Powershell: Verifique se o Firewall está habilitado (não os perfis)](https://rvso.com/image/1604268/Powershell%3A%20Verifique%20se%20o%20Firewall%20est%C3%A1%20habilitado%20(n%C3%A3o%20os%20perfis).png)
Estou um pouco desconfortável com a forma como o Windows 10 exibe o status do Firewall. Estou tentando auditar meus dispositivos Windows 10 e Server 2016 para obter as seguintes informações:
- O Firewall do Windows está habilitado? [NÃO ESTÁ FUNCIONANDO]
- Todos os 3 perfis estão habilitados? [TRABALHANDO]
- Existe um Firewall de terceiros habilitado? [TRABALHANDO]
Nesta tela parece que tudo está habilitado e íntegro: Perfis de firmware saudáveis
No entanto, quando subo um nível, esta é a mensagem que vejo (clicar em 'Ativar' não faz nada): WF desativado devido ao BitDefender
Se eu verificar aqui as chaves de registro dos três perfis, posso ver que todos estão habilitados: "HKLM:\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy"
mas na verdade não estão 'habilitados' porque o Firewall do Windows está desabilitado.
Este pequeno trecho detecta firewalls de terceiros no 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
#>
Pergunta: Como posso saber se um Firewall do Windows (não apenas seus perfis) está realmente habilitado ou desabilitado? Existe um valor específico que preciso encontrar no registro? Existe um comando abaixo que me diga rapidamente se o FW está realmente ativado ou não?
Responder1
OFirewall do Windowsé instalado no sistema operacional como um serviço. Para saber se está ativado ou desativado globalmente, você precisa confirmar se seu status é "em execução" ou "parado" ou não.
PowerShell
$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
}
};
Além disso, conformePerfis do Firewall do WindowsÉ afirmado que. . .
O Firewall do Windows oferece três perfis de firewall: domínio, privado e público. O perfil de domínio se aplica a redes nas quais o sistema host pode autenticar-se em um controlador de domínio. O perfil privado é um perfil atribuído pelo usuário e é usado para designar redes privadas ou domésticas. Por último, o perfil padrão é o perfil público, que é usado para designar redes públicas, como pontos de acesso Wi-Fi em cafeterias, aeroportos e outros locais.
Isso significa que o Firewall do Windows também pode ser desabilitado ou habilitado nesses três níveis de perfil e, portanto, para confirmar se está habilitado ou desabilitado aqui, você precisará verificar o status desses perfis.
Powershell
$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
}
};