Como saber as portas atualmente abertas no Firewall do Windows?

5

No Windows XP e no Windows Server 2003, posso saber as portas atualmente abertas no Firewall do Windows usando o seguinte comando:

netsh firewall show state

No entanto, no Windows 7 e no Hyper-V Server 2008 R2, quando dou esse comando, ele diz:

No ports are currently open on all network interfaces.

IMPORTANT: Command executed successfully.
However, "netsh firewall" is deprecated;
use "netsh advfirewall firewall" instead.

Aparentemente, há portas abertas porque serviços como NetBIOS NS, Área de Trabalho Remota e administração remota do Hyper-V estão funcionando.

Eu tentei alguns comandos show 'netsh advfirewall', mas não consegui descobrir quais portas são permitidas pelo Firewall do Windows.

Conhecendo as portas atualmente abertas, posso ter certeza de que estou permitindo o tráfego necessário e suficiente para passar, nem mais nem menos.

Passar por todo o conjunto de regras avançadas de firewall é tão entediante e propenso a erros.

Existe um comando no Windows 7 e no Windows Server 2008 para fazer isso de forma eficiente?

    
por QIU Quan 11.01.2011 / 12:59

1 resposta

2

O motivo pelo qual você não pode obter os mesmos resultados usando os mesmos comandos é que as regras de firewall do Win7 podem ser específicas para um aplicativo individual e configuradas por tipo de rede (Particular, Domínio, Público), protocolo, porta etc. O Powershell deve dar a você uma maneira muito melhor de consultar essas informações e classificá-las. Aqui está um script rápido que eu tenho que despejar minha configuração, quando eu precisar.

Function Get-EnabledRules
{
    Param($profile)
    $rules = (New-Object -comObject HNetCfg.FwPolicy2).rules
    $rules = $rules | where-object {$_.Enabled -eq $true}
    $rules = $rules | where-object {$_.Profiles -bAND $profile}
    $rules
}

$networkListManager = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}"))
 $connections = $networkListManager.GetNetworkConnections()
[int[] ] $connTypes = @()
$connTypes = ($connections | % {$_.GetNetwork().GetCategory()})
#$connTypes += 1
Write-Host $connTypes

$connTypes | ForEach-Object {Get-EnabledRules -profile $_ | sort localports,Protocol | format-table -wrap -autosize -property Name, @{Label="Action"; expression={$_.action}}, @{Label="Protocol"; expression={$_.protocol}}, localPorts,applicationname}

Muito disso foi baseado em este post no MSDN

    
por 13.01.2011 / 00:30