Cómo controlar las reglas del firewall de Windows mediante PowerShell

Este artículo profundiza en la administración del Firewall de Windows Defender mediante PowerShell, lo cual puede parecer un poco intimidante al principio, especialmente si estás acostumbrado a la interfaz gráfica o a los comandos clásicos. Pero, sinceramente, una vez que le coges el truco, es una forma práctica de automatizar tareas como activar o desactivar el firewall, crear reglas o restablecer configuraciones sin tener que navegar por cientos de menús. A veces, el firewall no funciona correctamente después de actualizaciones o cambios en la red, y usar PowerShell directamente puede ahorrarte mucho tiempo y frustraciones. Verás cómo alternar perfiles, crear reglas para puertos o aplicaciones e incluso solucionar problemas de ejecución interna.

Cómo reparar la configuración del Firewall de Windows con PowerShell

Cómo habilitar o deshabilitar el Firewall de Windows Defender

La mayoría de las configuraciones nuevas tienen el firewall habilitado por defecto, pero a veces conviene desactivarlo por completo, por ejemplo, para realizar pruebas o una solución rápida (no se recomienda a largo plazo, por supuesto).Puedes comprobar el estado del perfil ejecutando:

Get-NetFirewallProfile | Format-Table Name, Enabled

Esto muestra los tres tipos de red (Dominio, Privada, Pública) y si están activados o desactivados. Si la situación no es la adecuada o necesitas desactivarlos por completo, usa:

Set-NetFirewallProfile -All -Enabled False

O bien, apunte a uno específico:

Set-NetFirewallProfile -Profile Public -Enabled False

Esto desactivará el firewall de tu red pública, lo cual puede ser útil si estás solucionando problemas con algo que no se conecta. Pero ten cuidado: desactivarlo no es la mejor idea a menos que estés completamente seguro de la seguridad. En algunas configuraciones, hacer esto y luego reiniciar o volver a habilitar Windows no tiene ningún problema.

Cómo cambiar los perfiles de red y la configuración de registro

Si Windows no detecta la red correctamente (por ejemplo, la considera pública cuando estás en casa), puedes configurar el perfil manualmente o comprobar qué está activo con Get-NetConnectionProfile. Para cambiar el perfil, ejecuta:

Set-NetConnectionProfile -InterfaceAlias "Ethernet0" -NetworkCategory Private

Reemplace “Ethernet0” con su alias de interfaz de red actual, que puede encontrar ejecutando:

Get-NetAdapter | Select Name, InterfaceAlias

También podría ser útil aumentar el registro del firewall para una mejor resolución de problemas. Por ejemplo:

Set-NetFirewallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName "$env:SystemRoot\System32\LogFiles\Firewall\pfirewall.log"

Esto permite que Windows mantenga un registro más detallado, lo cual resulta útil para averiguar por qué se bloquean ciertas conexiones. No sé por qué funciona, pero suele ayudar a detectar lo que sucede en segundo plano.

Cómo crear reglas de firewall en Windows con PowerShell

Si personaliza su configuración, abre puertos o bloquea aplicaciones específicas, PowerShell ofrece varios comandos. El más sencillo es New-NetFirewallRule. Por ejemplo, para permitir el tráfico entrante HTTP y HTTPS:

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

¿Quieres bloquear el acceso saliente a un programa como Firefox? Aquí te explicamos cómo:

New-NetFirewallRule -Program "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -Action Block -Profile Domain, Private -DisplayName "Block Firefox" -Direction Outbound

O restringir RDP a una IP específica (porque, por supuesto, eso suele ser necesario en configuraciones seguras):

New-NetFirewallRule -DisplayName "Allow RDP from Office" -RemoteAddress 192.168.2.200 -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow

¿Quieres algo más sofisticado? Crea reglas para solicitudes de eco ICMP (pings) desde ciertos rangos de IP para comprobar la estabilidad de la red.

$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

Y, si hay una lista de IP larga, simplemente sáquela de un archivo de texto:

$ips=Get-Content C:\temp\ip.txt

Luego actualice la dirección remota de la regla:

Get-NetFirewallRule -DisplayName 'Allow RDP' | Set-NetFirewallRule -RemoteAddress $ips

Cabe mencionar que editar reglas también es sencillo. Simplemente obtenga las existentes con Get-NetFirewallRule y conéctelas a Set-NetFirewallRule para ajustar las direcciones o puertos remotos.

Creación de reglas para múltiples IP o personalización de las existentes

Se pueden agregar varias IP a la vez con un script. Por ejemplo, para agregar varias a una regla existente:

$ips = @("192.168.2.15", "192.168.2.17", "192.168.100.15")
$current_ips = (Get-NetFirewallRule -DisplayName 'HTTP-Inbound' | Get-NetFirewallAddressFilter).RemoteAddress
$current_ips += $ips
Set-NetFirewallRule -DisplayName 'HTTP-Inbound' -RemoteAddress $current_ips

¿Quieres obtener la lista de todas las IP de una regla? Simplemente:

Get-NetFirewallRule -DisplayName 'Http_inbound' | Get-NetFirewallAddressFilter

Y si necesitas eliminar una IP de una regla (algo molesto pero factible), aquí tienes un truco rápido:

$removeip = "192.168.100.5"
$current_ips = (Get-NetFirewallRule -DisplayName 'HTTP-Inbound' | Get-NetFirewallAddressFilter).RemoteAddress
$filterIP = $current_ips | Where-Object { $_ -ne $removeip }
Set-NetFirewallRule -DisplayName 'HTTP-Inbound' -RemoteAddress $filterIP

Habilitar, deshabilitar o eliminar reglas rápidamente

Si una determinada regla no funciona correctamente o quieres probar un cambio rápido, ejecuta:

Disable-NetFirewallRule -DisplayName 'HTTP-Inbound'

Para volver a encenderlo:

Enable-NetFirewallRule -DisplayName 'HTTP-Inbound'

Y si necesitas eliminar una regla por completo:

Remove-NetFirewallRule -DisplayName 'HTTP-Inbound'

Para un restablecimiento completo (por ejemplo, si las cosas se complicaron), puede restablecer todas las reglas a los valores predeterminados con:

netsh advfirewall reset

o

(New-Object -ComObject HNetCfg. FwPolicy2).RestoreLocalFirewallDefaults()

Ten en cuenta que esto también borra tus reglas personalizadas. Es mejor exportarlas con antelación si estás modificando configuraciones sensibles.

netsh advfirewall export "C:\Backup\firewall-config.wfw"
netsh advfirewall import "C:\Backup\firewall-config.wfw"

Cómo comprobar las reglas de firewall activas con PowerShell

Si quieres ver qué reglas se están ejecutando realmente, especialmente las que permiten o bloquean el tráfico, prueba:

Get-NetFirewallRule | Where-Object { $_. Enabled -eq $true -and $_. Direction -eq 'Inbound' } | Format-Table

Solo para reglas de salida:

Get-NetFirewallRule -Action Block -Enabled $true -Direction Outbound

Y si quieres ver los detalles, incluidos los puertos y las direcciones IP, este sofisticado script te ayudará:

Get-NetFirewallRule -Action Allow -Enabled $true -Direction Inbound | Format-Table -Property Name, @{Name='Protocol';Expression={(Get-NetFirewallPortFilter -AssociatedNetFirewallRule $_).Protocol}}, @{Name='LocalPort';Expression={(Get-NetFirewallPortFilter -AssociatedNetFirewallRule $_).LocalPort}}, @{Name='RemoteAddress';Expression={(Get-NetFirewallAddressFilter -AssociatedNetFirewallRule $_).RemoteAddress}}

PowerShell realmente hace que la administración profunda del firewall sea mucho más fácil, especialmente para automatizar tareas o solucionar problemas de red.

Resumen

En resumen, administrar el Firewall de Windows Defender mediante PowerShell no es tan complicado: una vez que te familiarizas con los comandos, es más rápido que navegar por los menús. Ya sea que estés activando o desactivando perfiles, modificando reglas para puertos o aplicaciones, o restableciendo la configuración, este método te brinda mayor control y soluciones más rápidas. Recuerda: exporta siempre tus reglas antes de modificarlas y no dejes el firewall totalmente desactivado a menos que tengas una buena razón. Esperamos que esto te ayude a mantener tus firewalls seguros y tu red protegida.

Resumen

  • Compruebe el estado actual del firewall conGet-NetFirewallProfile
  • Apágalo/enciéndelo usandoSet-NetFirewallProfile
  • Crea reglas para puertos, aplicaciones o IP conNew-NetFirewallRule
  • Editar reglas mediante la canalización haciaSet-NetFirewallRule
  • Restablecer o exportar configuraciones antes de realizar cambios grandes
  • Úselo Get-NetFirewallRulepara echar un vistazo rápido a las reglas activas