Get-NetFirewallRule: auditar regras do firewall do Windows

Get-NetFirewallRule: auditar regras do firewall do Windows

O Firewall do Windows costuma ficar ligado e esquecido. Cada instalador que "pede permissão" cria uma regra, e anos depois a máquina tem centenas de exceções que ninguém revisou. Pelo painel gráfico, ler isso é sofrimento. Pelo PowerShell, o Get-NetFirewallRule transforma a lista inteira em objetos que você filtra e exporta em segundos.

O que é o Get-NetFirewallRule

O Get-NetFirewallRule faz parte do módulo NetSecurity, que já vem no Windows 10, Windows 11 e Windows Server. Ele lê as regras do Firewall do Windows com Segurança Avançada e devolve cada uma com propriedades como DisplayName, Enabled, Direction, Action e Profile. A documentação oficial está na Microsoft Learn.

Um detalhe que pega muita gente: a regra em si não mostra porta nem programa. Esses dados ficam em "filtros" separados, que você consulta com cmdlets próprios. Vamos usar os dois.

Listando as regras de entrada habilitadas

Abra o PowerShell como administrador:

Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow |
  Select-Object DisplayName, Profile |
  Sort-Object DisplayName

Isso lista só o que importa para superfície de ataque: regras que permitem conexão de entrada e estão ativas. Regras de saída e regras de bloqueio ficam para depois.

Como ver a porta e o programa de cada regra?

Combine a regra com os filtros: Get-NetFirewallPortFilter mostra protocolo e porta, e Get-NetFirewallApplicationFilter mostra o executável. Os filtros aceitam a regra pelo pipeline.

Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow | ForEach-Object {
    $porta = $_ | Get-NetFirewallPortFilter
    $app   = $_ | Get-NetFirewallApplicationFilter
    [pscustomobject]@{
        Regra     = $_.DisplayName
        Protocolo = $porta.Protocol
        PortaLocal = $porta.LocalPort
        Programa  = $app.Program
    }
} | Format-Table -AutoSize

Em uma máquina doméstica, o resultado costuma incluir regras de Compartilhamento de Arquivos, Descoberta de Rede, Área de Trabalho Remota e programas como navegadores e jogos. Cada linha é uma porta que alguém na mesma rede pode tentar alcançar.

Sinais de regra suspeita

Sem tentar adivinhar malware pelo nome, estes padrões justificam uma olhada mais atenta:

  • Programa em pasta de usuário — regra de entrada apontando para AppData, Temp ou Downloads
  • Porta alta sem dono conhecido — qualquer porta local que você não consegue ligar a um software instalado
  • Perfil "Any" ou "Public" — regra de entrada liberada em redes públicas (cafés, aeroportos)
  • Nome genérico ou vazio — regras chamadas "Allow", "Rule1" ou semelhantes

Para filtrar o primeiro caso:

Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow |
  Where-Object { ($_ | Get-NetFirewallApplicationFilter).Program -like "*\Users\*" } |
  Select-Object DisplayName, Profile

Achou algo estranho? Antes de apagar, desabilite e observe se algo quebra. Dá para desfazer com um comando:

Disable-NetFirewallRule -DisplayName "Nome da regra"

Só use Remove-NetFirewallRule depois de ter certeza. E confirme se a regra veio de uma política de grupo (GPO) em ambiente corporativo, porque ela pode voltar sozinha.

Conferindo os perfis e o log do firewall

O firewall tem três perfis: Domínio, Particular e Público. Verifique se todos estão ligados e qual é a ação padrão de entrada:

Get-NetFirewallProfile |
  Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundAction

O esperado em uma estação de trabalho é Enabled: True e DefaultInboundAction: Block nos três. Se algum perfil aparece desligado, alguém (ou algo) mexeu — e vale cruzar com o que a auditoria de logs com PowerShell registrou.

O log de conexões bloqueadas vem desligado por padrão. Para ativar:

Set-NetFirewallProfile -Profile Domain,Private,Public -LogBlocked True -LogMaxSizeKilobytes 16384

O arquivo fica, por padrão, em %systemroot%\system32\LogFiles\Firewall\pfirewall.log. Com ele, você enxerga quem está batendo em portas fechadas — informação útil depois de proteger o RDP contra força bruta.

Exportando um relatório para comparar depois

Auditoria sem registro não serve de nada na segunda vez. Salve um CSV hoje e compare no mês que vem:

$hoje = Get-Date -Format "yyyy-MM-dd"
Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow |
  Select-Object DisplayName, Profile, Direction, Action |
  Export-Csv "$env:USERPROFILE\Desktop\firewall-$hoje.csv" -NoTypeInformation -Encoding UTF8

Na próxima rodada, Compare-Object entre os dois CSVs mostra exatamente quais regras apareceram ou sumiram.

Regra sem porta aberta não vale nada sozinha

Uma regra de entrada só importa se existe um programa escutando naquela porta. Por isso, cruze a lista do firewall com o que está realmente aberto, usando o Get-NetTCPConnection, e com os executáveis dos serviços do Windows. Quem usa Linux faz o mesmo raciocínio com o UFW no Ubuntu.

A lição maior: firewall é política, não produto. A regra mais perigosa é a que você criou "só para testar" e nunca removeu. Reserve dez minutos por mês para rodar este relatório. Se quiser aprofundar a parte de portas, comece pelo post sobre portas abertas no Windows.

Comentários