Cómo usar el firewall del servidor Windows

Antes de proceder directamente a la configuración del firewall, unas pocas palabras sobre su comportamiento predeterminado. A diferencia de Ubuntu, donde el firewall UFW predeterminado está inicialmente inactivo, en Windows Server el firewall está inicialmente habilitado. La siguiente lógica está implementada en su interior: bloquear todas las conexiones entrantes excepto aquellas que estén explícitamente permitidas (por ejemplo, RDP está permitido por defecto). Las conexiones salientes están permitidas, excepto aquellas que estén explícitamente prohibidas.
El firewall de Windows te permite crear varios perfiles con diferentes reglas y, si es necesario, cambiar rápidamente entre ellos. Por defecto, se crean tres perfiles:
- Perfil de dominio,
- Perfil privado,
- Perfil público.
El perfil de dominio está destinado para computadoras y servidores que operan dentro del dominio AD (Active Directory). El perfil privado es adecuado para sistemas ubicados en un segmento de red protegida. El perfil público es aplicable para trabajar en redes públicas con el nivel máximo de amenazas externas.
El administrador del sistema puede preseleccionar un conjunto de reglas para cada perfil que será más efectivo para cada uno de los escenarios mencionados. Esto ayudará a proteger el servidor de ataques simplemente cambiando el perfil del firewall. Por favor, tenga en cuenta que el conjunto de reglas para cada perfil puede ser diferente dependiendo del rol actual del servidor.
Hay varias formas de gestionar las reglas del firewall. La forma más fácil de hacerlo es utilizando la consola WF (Windows Firewall con seguridad avanzada). La gestión también es posible utilizando GPMC (Consola de Administración de Políticas de Grupo) o a través de comandos de Powershell. Empecemos con el último método.
Gestión de reglas a través de Powershell
Muchas guías sobre la configuración de un firewall utilizando Powershell incluyen los comandos netsh firewall y netsh advfirewall firewall. Ambos comandos han quedado obsoletos desde hace mucho tiempo, por lo que recomendamos utilizar un método más moderno. Powershell, a partir de la versión 5.1, tiene un módulo integrado de NetSecurity que contiene muchos cmdlets (comandos nativos de Powershell). Puedes enumerarlos utilizando el siguiente comando:
Get-Command -Module NetSecurity
Cada uno de los cmdlets enumerados te ayuda a gestionar de manera flexible todos los parámetros del firewall. Primero, veamos qué comando puedes usar para habilitar o deshabilitar el firewall:
Set-NetFirewallProfile -All -Enabled True
En este comando, el argumento -All significa aplicar todos los perfiles disponibles. En su lugar, puedes establecer un perfil específico, por ejemplo, -Profile Private. Para deshabilitar completamente el firewall, utiliza el mismo comando; sólo cambia el valor -Enabled a False:
Set-NetFirewallProfile -All -Enabled False
Cuando el firewall está habilitado, todas las reglas se aplican a todas las interfaces de red en el sistema. En este caso, es posible deshabilitar un perfil para una interfaz específica utilizando el cmdlet Set-NetFirewallProfile:
Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"
El mismo cmdlet te ayudará a cambiar otros ajustes del perfil, en particular, habilitar el registro y configurar sus parámetros, como el tamaño y la ruta al archivo de registro.
Los cmdlets con NetFirewallRule en su nombre son responsables de la gestión de las reglas del firewall. En este caso, un cmdlet separado funciona para cada acción. Por ejemplo, para crear una nueva regla, debes utilizar el comando New-NetFirewallRule, y para eliminar una regla, utiliza Remove-NetFirewallRule. Es fácil de recordar y generalmente muy lógico.
Supongamos que quieres limitar la capacidad de conectar a RDP a un servidor desde una dirección IP específica (por ejemplo, 10.0.0.2):
New-NetFirewallRule -DisplayName "AllowRDP" -RemoteAddress 10.0.0.2 -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow
¿Pero qué pasa si necesitas permitir las conexiones al servidor no desde una dirección específica, sino desde un rango de direcciones? En este caso, debes proceder de la siguiente manera: primero define una variable y asígnale los valores del rango de direcciones, y luego especifica una variable en lugar de una dirección específica. Asignaremos a la variable $allowedips el rango 10.0.0.2-10.0.0.254:
$allowedips = @("10.0.0.2-10.0.0.254")
Ahora puedes aplicar la regla:
New-NetFirewallRule -DisplayName "AllowRDP" -RemoteAddress $allowedips -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow
Imagina que no tienes un rango de direcciones, sino un registro dedicado de direcciones que necesitan tener una conexión RDP sin obstáculos al servidor. Para evitar crear reglas de una en una, puedes cargarlas en un archivo de texto (una dirección por línea) y luego poner todos los valores en una variable. Y también, como en la regla anterior, especificar esta variable como el valor -RemoteAddress. Por ejemplo, descargamos la lista de direcciones al archivo C:\Users\Administrator\Downloads\AllowedIPs.txt
Léase el fichero y coloca su contenido en la variable $allowedlist:
$allowedlist = Get-Content C:\Users\Administrator\Downloads\AllowedIPs.txt
Crear una regla:
New-NetFirewallRule -DisplayName "AllowRDP" -RemoteAddress $allowedlist -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow
Esta es una forma muy conveniente de automatizar el firewall de Windows con otros sistemas. Por ejemplo, puedes recoger automáticamente una lista de direcciones IP emitidas a usuarios legítimos y sólo permitir conexiones a sistemas corporativos desde estas direcciones. Tales soluciones facilitan mucho la vida y se gasta significativamente menos tiempo en la gestión de permisos.
Powershell tiene herramientas potentes para mostrar fácilmente los datos. Si te gustaría ver qué reglas de firewall están actualmente habilitadas para conexiones entrantes, puedes utilizar este comando:
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
Gestión de reglas a través de WF
La segunda forma de configurar el firewall es la consola estándar del firewall de Windows Defender con seguridad avanzada. Para usarla, simplemente presiona la secuencia de teclas Win + R e introduce el comando wf.msc
La ventana de la consola que se abre se puede dividir en tres secciones. La sección izquierda permite al administrador del sistema seleccionar para editar reglas de tráfico salientes o entrantes, reglas de seguridad de conexión y ajustes de monitoreo. La sección del medio mostrará las reglas o ajustes mismos. La sección derecha muestra las acciones disponibles dependiendo de qué reglas o ajustes fueron seleccionados.

Por defecto, se muestran los ajustes globales del firewall, en particular los perfiles activos y la información breve sobre la lógica actual del firewall. Si creas un conjunto de ajustes una vez, puedes clonarlo fácilmente a otro servidor o incluso aplicarlo a muchos servidores controlados a la vez, por ejemplo, dentro de un dominio. Para hacer esto, puedes usar las opciones de importación y exportación de ajustes.
Cuando haces clic en Export policy, el sistema descarga todas las reglas en un archivo especial con extensión WFW. Este archivo se puede importar en otro servidor en la misma consola. Además, las reglas de este archivo se pueden fusionar con el conjunto actual de reglas como parte de los ajustes de Política de Grupo, a través de la consola del sistema correspondiente. Pero primero, echemos un vistazo a la interfaz y creemos una única regla para el tráfico entrante.
Haz clic con el botón derecho en Inbound Rules y selecciona New Rule:

A continuación, hay 4 opciones posibles para que la regla funcione. El firewall de Windows puede configurarse para trabajar con una aplicación específica. Esto es muy conveniente cuando una aplicación puede abrir puertos aleatorios dentro de un cierto rango. Por lo tanto, en lugar de restringir el tráfico a los rangos de puerto, puedes elegir una aplicación específica y el firewall se encargará de asegurar que se cumplan las reglas aplicadas.
La segunda opción es adecuada para permitir o denegar el acceso en un puerto específico o rango de puertos. La opción más sencilla, pero no tendrá en cuenta qué aplicación usará el puerto especificado. La tercera opción (Predefinida) desbloqueará una lista desplegable con conjuntos de ajustes típicos. Esto puede ahorrar mucho tiempo al realizar tareas típicas.
Y finalmente, la última opción (Personalizada), le da al administrador la oportunidad de crear una regla arbitraria con cualquier combinación de parámetros disponibles. Sin embargo, debes tener mucho cuidado de no bloquear accidentalmente tu acceso remoto al servidor. Como ejemplo, mostraremos cómo crear una regla que permita conexiones en el puerto 7777, en el cual se está ejecutando un servicio prelanzado. Selecciona el elemento Port:

En el siguiente cuadro de diálogo, puedes seleccionar qué protocolo usará la regla, y también especificar los números de los puertos individuales y los rangos:

A continuación, debes decirle al sistema qué hacer con las conexiones que llegan a los puertos especificados anteriormente. Puedes permitir o denegar la conexión. Por separado, es posible permitir la conexión si está protegida por IPsec:

Luego necesitas seleccionar a qué perfil de seguridad se debe agregar la regla que estás creando. Puedes seleccionar uno o varios perfiles:

Queda el último paso donde puedes establecer un nombre específico y una descripción para la nueva regla, después de lo cual debes pulsar el botón Finish:

La regla creada se puede habilitar o deshabilitar en la sección derecha usando los elementos Enable Rule y Disable Rule:

Gestión de reglas a través de GPMC
Este método funciona bien si se necesita distribuir los mismos ajustes de firewall en varios servidores. En este caso, por supuesto, debes tener en cuenta que el servidor debe actuar como un controlador de dominio. Para empezar, necesitas abrir la Consola de Administración de Políticas de Grupo pulsando la combinación de teclas Win + R y entrando el comando gpmc.msc. Abre un árbol de dominio, luego haz clic con el botón derecho en Default Domain Policy > Edit

En la sección de la izquierda, selecciona Computer Configuration > Policies > Administrative Templates > Network > Network Connections > Windows Defender > Firewall > Domain profile

Establece la política Windows Defender Firewall: Proteger todas las conexiones de red en estado Enabled:

Ve a Computer Configuration > Windows Settings > Security Settings y abre las propiedades de Windows Firewall with Advanced Security:

Para cada una de las tres pestañas de perfil predeterminadas (Dominio, Privado y Público), cambia el Estado del Firewall a Activo (recomendado). Allí puedes cambiar la lógica de los perfiles a la deseada:

En el mismo cuadro de diálogo, puedes habilitar la opción de registro, que está deshabilitada por defecto. Esto te permite rastrear qué paquetes fueron rechazados por el firewall o, por ejemplo, las conexiones que fueron permitidas por las reglas del firewall y se establecieron con éxito. A menos que se especifique lo contrario, el archivo de registro se guarda aquí:
%SYSTEMROOT%\System32\logfiles\firewall\pfirewall.log

Habiendo expandido la lista de opciones disponibles en el Windows Defender Firewall with Advanced Security verás la estructura de la consola ya familiar descrita anteriormente. Aquí puedes gestionar las reglas para el tráfico entrante y saliente, así como importar y exportar reglas en formato WFW:

Ver también:
Actualizado: 28.03.2025
Publicado: 22.07.2024