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 mediante 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 de 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 usar el módulo integrado de PowerShell NetSecurity para administrar el firewall.
Anteriormente, el siguiente comando se usaba para administrar las reglas y la configuración del Firewall de Windows:
netsh advfirewall firewallHay 85 comandos disponibles en el módulo NetSecurity en Windows 10. Puede visualizar la lista completa:
Get-Command -Module NetSecurity¿Cómo administrar los perfiles de red de 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
Network Location Awareness (NLA) mantiene la información sobre los tipos de red en su base de datos. Puede cambiar su perfil de red (ubicación) si se ha detectado incorrectamente.
Cada perfil de red (ubicación) puede diferir según el conjunto de reglas de firewall utilizadas. De manera 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 TrueO configure el perfil específico en lugar de Todos:
Set-NetFirewallProfile -Profile Public -Enabled TruePara 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 para el perfil público para bloquear todas las conexiones entrantes.
Set-NetFirewallProfile -Name Public -DefaultInboundAction BlockPuede mostrar la configuración del perfil actual de la siguiente manera:
Get-NetFirewallProfile -Name PublicSi administra la configuración de Firewall de Windows mediante GPO, puede mostrar la configuración de perfil resultante actual de la siguiente manera:
Get-NetFirewallProfile -policystore activestoreAsegúrese de que todas las configuraciones del firewall se apliquen a todas las interfaces de red de la computadora.
Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliasesSi todas las interfaces están protegidas, el comando devolverá lo siguiente:
DisabledInterfaceAliases : {NotConfigured}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}Puede configurar las opciones de registro de conexión de red a nivel de perfil. De manera predeterminada, los registros de 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%\system32\LogFiles\Firewall\pfirewall.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
- Rename-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 Privado, use este comando:
New-NetFirewallRule -DisplayName 'HTTP-Inbound' -Profile @('Domain', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('80', '443')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 Firefox\firefox.exe” -Action Block -Profile Domain, Private -DisplayName “Block Firefox browser” -Description “Block Firefox browser” -Direction OutboundPara 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 AllowPara permitir el ping (ICMP) para las direcciones de la subred o rango de IP especificado, 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 AllowEn el artículo anterior mostramos cómo bloquear el acceso al sitio tanto por dirección IP como por un 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.10Si 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 $ipsPara mostrar todas las direcciones IP en una regla de firewall:
Get-NetFirewallrule -DisplayName 'Allow inbound ICMPv4'|Get-NetFirewallAddressFilterPuede habilitar o deshabilitar las reglas de firewall mediante los cmdlets Disable-NetFirewallRule y Enable-NetFirewallRule.
Disable-NetFirewallRule -DisplayName 'WEB-Inbound'Para permitir ICMP (ping), ejecute este comando:
Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-InPara 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")} |ftSi desea mostrar la lista de reglas de bloqueo de salida:
Get-NetFirewallRule -Action Block -Enabled True -Direction OutboundPara mostrar el nombre de una aplicación en una regla:
Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound | %{$_.Name; $_ | Get-NetFirewallApplicationFilter}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,ActionPowerShell brinda amplias oportunidades para administrar las reglas de 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 próximo artículo, consideraremos una solución simple basada en PowerShell y Firewall de Windows para bloquear automáticamente las direcciones IP que intentan forzar contraseñas de forma remota a través de RDP en su servidor Windows VDS.








