Configuración de reglas de firewall de Windows con PowerShell

Este artículo brinda los conceptos básicos sobre cómo administrar la configuración y las reglas del Firewall de Windows Defender integrado con seguridad avanzada usando PowerShell. Consideraremos cómo habilitar / deshabilitar el firewall para diferentes perfiles de red, crear o eliminar reglas de firewall y escribir un pequeño script PS para obtener una tabla conveniente que muestre el conjunto actual de reglas de firewall activas.

Puede administrar la configuración del Firewall de Windows desde la consola gráfica: Panel de control -> Sistema y seguridad -> Firewall de Windows Defender. Sin embargo, a partir de Windows 8.1 (Windows Server 2012 R2) puede utilizar el NetSecurity Módulo de PowerShell para administrar el firewall.

Anteriormente, el siguiente comando se usaba para administrar las reglas y configuraciones del Firewall de Windows: netsh advfirewall firewall

Hay 85 comandos disponibles en el módulo NetSecurity en Windows 10. Puede mostrar la lista completa:

Get-Command -Module NetSecurity

powershell NetSecurity en Windows 10 para administrar el firewall avanzado de Windows Defender

¿Cómo administrar los perfiles de red del Firewall de Windows desde PowerShell?

Hay tres tipos de perfiles de red en el Firewall de Windows:

  • Dominio – se aplica a las computadoras en un dominio de Active Directory
  • Privado – redes domésticas o corporativas
  • Público – redes públicas

Ubicación de red del Firewall de Windows Defender (perfiles)

Cada perfil de red (ubicación) puede diferir según el conjunto de reglas de firewall utilizadas. De forma predeterminada, todas las interfaces de red de una computadora están protegidas por el firewall y se les aplican los tres tipos de perfiles.

Para habilitar los tres perfiles de red: Dominio, Público y Privado, use este comando:

Set-NetFirewallProfile -All -Enabled True

O establezca el perfil específico en su lugar Todas:

Set-NetFirewallProfile -Profile Public -Enabled True

Para deshabilitar el firewall para las tres ubicaciones de red, use el comando:

Set-NetFirewallProfile -All -Enabled False

Con el cmdlet Set-NetFirewallProfile, puede cambiar las opciones de perfil (una acción predeterminada, registro, una ruta y un tamaño de un archivo de registro, configuración de notificaciones, etc.).

Es posible que sepa que en las versiones modernas del sistema operativo, el Firewall de Windows está habilitado para todos los perfiles. Todas las conexiones salientes están permitidas y las entrantes están bloqueadas (excepto las permitidas) en la configuración del perfil.

Cambiemos la acción predeterminada del perfil público para bloquear todas las conexiones entrantes.

Set-NetFirewallProfile –Name Public –DefaultInboundAction Block

Puede mostrar la configuración del perfil actual de la siguiente manera:

Get-NetFirewallProfile -Name Public

Set-NetFirewallProfile

Si administra la configuración del Firewall de Windows mediante GPO, puede mostrar la configuración del perfil resultante actual de la siguiente manera:

Get-NetFirewallProfile -policystore activestore

Asegúrese de que todas las configuraciones del firewall se apliquen a todas las interfaces de red de la computadora.

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

Si todas las interfaces están protegidas, el comando devolverá lo siguiente:

DisabledInterfaceAliases : {NotConfigured}

Get-NetFirewallProfile

Puede deshabilitar el perfil de interfaz específico (para mostrar la lista de nombres de interfaz, use Get-NetIPInterface):

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

Como puede ver, el perfil público ya no se aplica a Ethernet0:

DisabledInterfaceAliases : {Ethernet0}

deshabilitar la ubicación pública para la interfaz ehernet0

Puede configurar las opciones de registro de la conexión de red a nivel de perfil. De forma predeterminada, los registros del Firewall de Windows se almacenan en% systemroot% system32 LogFiles Firewall y el tamaño del archivo es de 4 MB. Puede habilitar todos los registros de conexión y cambiar el tamaño máximo de archivo:

Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName ‘%systemroot%system32LogFilesFirewallpfirewall.log’

¿Cómo crear, editar o eliminar reglas de firewall de Windows con PowerShell?

Hay 9 cmdlets para administrar sus reglas de firewall:

  • New-NetFirewallRule
  • Copy-NetFirewallRule
  • Disable-NetFirewallRule
  • Enable-NetFirewallRule
  • Get-NetFirewallRule
  • Remove-NetFirewallRule
  • Renombrar NetFirewallRule
  • Set-NetFirewallRule
  • Show-NetFirewallRule

Consideremos algunos ejemplos simples de cómo abrir puertos en el Firewall de Windows.

Por ejemplo, si desea permitir conexiones TCP entrantes a los puertos 80 y 443 para perfiles de dominio y privados, use este comando:

New-NetFirewallRule -DisplayName 'HTTP-Inbound' -Profile @('Domain', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('80', '443')

New-NetFirewallRule crea una nueva regla de firewall con powershell

Puede permitir o bloquear el acceso a la red para una aplicación. Por ejemplo, desea bloquear las conexiones salientes para Firefox:

New-NetFirewallRule -Program “C:Program Files (x86)Mozilla Firefoxfirefox.exe” -Action Block -Profile Domain, Private -DisplayName “Block Firefox browser” -Description “Block Firefox browser” -Direction Outbound

Para permitir la conexión RDP entrante en el puerto 3389 desde una sola dirección IP:

New-NetFirewallRule -DisplayName "AllowRDP" –RemoteAddress 192.168.2.200 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow

Para permitir el ping (ICMP) para direcciones de la subred o rango de IP especificados, use estos comandos:

$ips = @("192.168.2.15-192.168.2.40", "192.168.100.15-192.168.100.200", ”10.1.0.0/16”)
New-NetFirewallRule -DisplayName "Allow inbound ICMPv4" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -RemoteAddress $ips -Action Allow
New-NetFirewallRule -DisplayName "Allow inbound ICMPv6" -Direction Inbound -Protocol ICMPv6 -IcmpType 8 -RemoteAddress $ips -Action Allow

En el artículo anterior, mostramos cómo bloquear el acceso al sitio tanto por dirección IP como por nombre DNS de dominio / sitio usando PowerShell.

Para editar una regla de firewall existente, se usa el cmdlet Set-NetFirewallRule. Por ejemplo, para permitir conexiones entrantes desde la dirección IP especificada para la regla creada anteriormente:

Get-NetFirewallrule -DisplayName 'HTTP-Inbound' | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.10

Si desea agregar varias direcciones IP a una regla de firewall, use este script:

$ips = @("192.168.2.15", "192.168.2.17",”192.168.100.15”)
Get-NetFirewallrule -DisplayName 'WEB-Inbound'|Set-NetFirewallRule -RemoteAddress $ips

Para mostrar todas las direcciones IP en una regla de firewall:

Get-NetFirewallrule -DisplayName 'Allow inbound ICMPv4'|Get-NetFirewallAddressFilter

Get-NetFirewallAddressFilter ver direcciones IP en la regla de firewall

Puede habilitar / deshabilitar las reglas de firewall usando Disable-NetFirewallRule y Enable-NetFirewallRule cmdlets.

Disable-NetFirewallRule –DisplayName 'WEB-Inbound'

Para permitir ICMP (ping), ejecute este comando:

Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In

Para quitar una regla de firewall, se usa el cmdlet Remove-NetFirewallRule.

Listado de reglas de Firewall de Windows con PowerShell

Puede mostrar la lista de reglas de firewall activas para su tráfico entrante de la siguiente manera:

Get-NetFirewallRule | where {($_.enabled -eq $True) -and ($_.Direction -eq "Inbound")} |ft

Si desea mostrar la lista de reglas de bloqueo de salida:

Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound

Para mostrar el nombre de una aplicación en una regla:

Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound | %{$_.Name; $_ | Get-NetFirewallApplicationFilter}

Get-NetFirewallrule: ver las propiedades de la regla de firewall

Como puede ver, el cmdlet Get-NetFirewallRule no muestra los puertos de red ni las direcciones IP para sus reglas de firewall. Para mostrar la información detallada sobre las conexiones entrantes (salientes) permitidas de una manera más conveniente mostrando los números de puerto, use el siguiente script de PowerShell:

Get-NetFirewallRule -Action Allow -Enabled True -Direction Inbound |
Format-Table -Property Name,
@{Name="Protocol";Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}},
@{Name="LocalPort";Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}},
@{Name="RemotePort";Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}},
@{Name="RemoteAddress";Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},
Enabled,Profile,Direction,Action

Use PowerShell para enumerar las reglas de firewall con números de puerto

PowerShell ofrece amplias oportunidades para administrar las reglas del Firewall de Windows desde el símbolo del sistema. Puede ejecutar automáticamente scripts de PowerShell para abrir / cerrar puertos si ocurren ciertos eventos. En el siguiente artículo, consideraremos una solución simple basada en PowerShell y Windows Firewall para bloquear automáticamente las direcciones IP que intentan forzar contraseñas de forma remota a través de RDP en su servidor VDS de Windows.

Artículos Interesantes