Descubre cómo configurar tu firewall mediante GPO script de manera sencilla para mantener tus Windows Server seguros y lanzando la configuración mediante Directivas de Grupo de AD DS.
Cuando hablamos de mantener nuestra infraestructura segura, siempre debemos tener en cuenta los servidores y por supuesto, dentro de nuestros Windows Server, debemos tener en cuenta el firewall que nos proporciona el sistema operativo del gigante de Redmond, que, si bien no es suficiente para para mantener nuestro servidor a salvo, es un punto de aseguramiento adicional.
Hacer las configuraciones a través de la consola gráfica de manera manual puede ser un auténtico quebradero de cabeza, ya que deberemos tener cuidado de replicar todos los cambios de manera manual a todos los servidores y será muy complicado mantener los servidores seguros y estandarizados.
Por eso, proponemos hacer estos cambios mediante PowerShell, que además de ser una forma rápida de hacer un despliegue único, permite crear un script que se ejecute a través de las políticas de grupo del dominio (GPO), propagando los cambios a aquellos equipos que se deseen.
Paso 0. Vista general de la consola de administración del Firewall de Windows
¿Cómo configurar el Firewall de Windows Server mediante PowerShell?
Pre-requisitos o pre-configuración
Para completar de forma satisfactoria este tutorial y poder configurar el Firewall de Windows Server mediante PowerShell se necesitará:
- Por un lado, estar dado de alta en la Plataforma Jotelulu con una organización y estar registrado en la misma tras hacer Log-in.
- Por otro lado, haber dado de alta una suscripción de Servidores
- Tener un AD DS Server dentro de la suscripción.
- Tener al menos un servidor Windows operativo dentro de la suscripción.
Paso 1. Elaboración de los Comandos de PowerShell
Lo primero que debemos hacer es diseñar y probar los comandos de PowerShell para la configuración del Firewall sobre un equipo y de esta manera no se tendrá problemas en la elaboración del script ni de los despliegues posteriores.
A continuación, se deberá acceder a la consola de PowerShell con privilegios de administrador, para lo que se deberá ir a la barra de búsqueda y escribir PowerShell (1), pudiendo seleccionar o bien Windows PowerShell, que es la opción que yo suelo usar, o Windows PowerShell ISE, que es un pequeño IDE que es ideal para hacer scripting.
Una vez seleccionada la opción que más nos satisfaga, haremos clic en botón derecho y seleccionaremos la opción de “Ejecutar como administrador” (2).
A continuación, comenzaremos con la ejecución de comandos y la elaboración de nuestras reglas, por lo que para empezar deberemos habilitar Windows Defender Firewall con seguridad avanzada, para ello se debe ejecutar el siguiente comando, que se aplicará a distintos perfiles en función de la necesidad de cada explotación:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
Los perfiles sobre los que se pueden actuar son:
- Domain: Acciones para la red del dominio.
- Public: Acciones para la red pública.
- Private: Acciones para la red privada.
En nuestro caso necesitamos que se aplique a los tres perfiles.
El siguiente punto para configurar será el comportamiento por defecto sobre el que empezaremos a dar la configuración más adaptada a nuestra explotación.
NOTA: Algunos de los comandos que vamos a ejecutar pueden cortar la conexión al servidor, ya que cortarán las comunicaciones, por lo que para mayor seguridad, es recomendable trabajar desde la consola o mediante conexión directa.
El comando a ejecutar es:
Set-NetFirewallProfile -DefaultInboundAction Block -DefaultOutboundAction Allow –NotifyOnListen True -AllowUnicastResponseToMulticast True –LogFileName %SystemRoot%\System32\LogFiles\Firewall\pfirewall.log
Donde:
- DefaultInboundAction Block: presenta la acción por defecto de cerrar todas las conexiones entrantes menos las que declaremos explícitamente.
- DefaultOutboundAction Allow: presenta la acción por defecto de abrir todas las conexiones salientes menos las que declaremos explícitamente.
- NotifyOnListen True: guarda en el log los intentos de conexión no permitidos.
- AllowUnicastResponseToMulticast True: permite respuestas de unidifusión al tráfico de multidifusión.
- LogFileName %SystemRoot%\System32\LogFiles\Firewall\pfirewall.log: declara el lugar donde se deben guardar los mensajes del log del firewall.
Una vez hecho esto, se pueden definir las distintas reglas que apliquen a nuestros firewalls.
En este caso, vamos a ver cómo podríamos configurar una regla de entrada y otra de salida, explicando cada una de las partes, para después describir una hipotética configuración que pueda usarse como ejemplo.
Para configurar una regla de entrada, tendremos que definir una estructura similar a la siguiente:
New-NetFirewallRule -DisplayName “Nombre de regla de entrada” -Direction Inbound -Program <Ruta_del_programa> -RemoteAddress <IP> -Action <Acción>
Donde:
- DisplayName: se usa para añadir nombres a las reglas y poder poder organizarlas y distinguirlas cuando tengamos muchas de ellas.
- Direction Inbound: indica que la regla es de entrada. Si se quisiera hacer de salida sería «Outbound».
- Program <Ruta_del_programa>: indicará la ruta del programa al que permite la entrada.
- RemoteAddress <IP>: representa la dirección IP de origen, siendo comúnmente rangos de IP.
- Action <Acción>: representa la acción a tomar por parte del firewall y pudiendo ser Allow (permitir) o Deny (Denegar).
Un ejemplo de implementación de entrada podría ser:
New-NetFirewallRule -DisplayName “Permitir acceso Telnet” -Direction Inbound -Program %SystemRoot%\System32\tlntsvr.exe -RemoteAddress 192.168.0.2 -Action Allow
Paso 1. Ejemplo de ejecución de creación de regla de acceso a Telnet con PowerShell
Si se necesitara hacer una modificación se podría hacer mediante el comando «Set-NetFirewallRule» de una manera similar a la del ejemplo:
Set-NetFirewallRule –DisplayName “Permitir acceso Telnet” -RemoteAddress 192.168.0.23
En caso de querer eliminar una regla podremos utilizar el comando:
Remove-NetFirewallRule –DisplayName <Nombre_de_la_regla>
Donde se usará «DisplayName <Nombre_de_la_regla>» para identificar la regla que se quiere eliminar, siendo por tanto necesario crear una buena política de nombres de reglas para el firewall.
Un ejemplo de esto sería:
Remove-NetFirewallRule –DisplayName “Permitir acceso Telnet”
Ahora vamos a suponer que lo que necesitamos es crear unas reglas que permitan lo siguiente:
- Permitir tráfico de entrada para conexiones RDP.
- Permitir tráfico de entrada para conexiones HTTP y HTTPS.
- Permitir tráfico de entrada para conexiones FTP y SFTP.
En este breve ejemplo, se necesitarán las siguientes reglas:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
Set-NetFirewallProfile -DefaultInboundAction Block -DefaultOutboundAction Allow –NotifyOnListen True -AllowUnicastResponseToMulticast True –LogFileName %SystemRoot%\System32\LogFiles\Firewall\pfirewall.log
New-NetFirewallRule -DisplayName «Allow RDP – TCP 3389» -Direction Inbound -Action Allow -EdgeTraversalPolicy Allow -Protocol TCP -LocalPort 3389
New-NetFirewallRule -DisplayName «Allow HTTP – TCP 80» -Direction Inbound -Action Allow -EdgeTraversalPolicy Allow -Protocol TCP -LocalPort 80
New-NetFirewallRule -DisplayName «Allow HTTPS – TCP 443» -Direction Inbound -Action Allow -EdgeTraversalPolicy Allow -Protocol TCP -LocalPort 443
New-NetFirewallRule -DisplayName «Allow FTP y SFTP – TCP 20,21 y 22» -Direction Inbound -EdgeTraversalPolicy Allow -Action Allow -Protocol TCP -LocalPort 20-22
Pudiendo lanzarlo desde distintas máquinas y consiguiendo de esta manera la configuración automática.
Paso 2. Convertir los distintos comandos en un pequeño script
Siendo sinceros, es un poco pretencioso llamar script (o guion) a este conjunto de comandos puestos uno detrás de otro, ya que no presenta ningún tipo de estructura de programación, pero si que hemos de reconocer, que en su simplicidad radica su potencia.
Para crear este guion de rápida ejecución, se deberán escribir todos los comandos en un fichero de texto y guardarlos con extensión “.ps1” que es la extensión de Windows PowerShell.
NOTA: Mucho cuidado con los caracteres que peguemos ya que puede haber ciertos problemas con las comillas (“”), los guiones (-) y otros caracteres.
Paso 2. Vista del fichero con los comandos de PowerShell unificados
Paso 3. Creación de la política de implementación
En este punto que ya tenemos preparado el script, vamos a crear una política para lanzar la configuración del firewall a todos los equipos que queramos configurar con esta disposición de reglas.
NOTA: En este caso se va a hacer la configuración para todo el dominio, pero se podría agregar únicamente a una OU (Unidad Organizativa) para que se aplique únicamente a este nivel.
Lo primero es lanzar la consola de administración de políticas de grupo de dominio, también llamada muchas veces “GPMC” por sus siglas en inglés y cuyo ejecutable es “GPMC.msc”. Esta consola deberá lanzarse con privilegios de administrador. Esta consola también se puede lanzar desde la sección de herramientas del Administrador del Servidor (3).
Paso 2. Lanzamos la consola de GPMC desde el menú de herramientas del administrador del servidor
Desde la consola, hacer clic en el botón derecho sobre el nombre de dominio (4) y seleccionar “Crear una GPO en este dominio y vincularlo aquí” (5).
Paso 2. Seleccionamos la opción de Crear una GPO en este dominio y vincularlo aquí
Con esto se abre una nueva ventana en la se deberá dar nombre a la nueva GPO (6).
Paso 2. Proporcionamos un nombre a la nueva GPO
Esto hace que el programa nos derive al “Administrador de directivas de grupo”, se debe buscar la GPO que acabamos de crear, hacer clic en el botón derecho (7) sobre la GPO y seleccionar la opción “Editar” (8).
Paso 2. Editamos la GPO que acabamos de crear
Con esto se mostrará el editor de la GPO, situándonos en la raíz, sin ningún elemento seleccionado.
Paso 2. Vista general del editor de GPO
En este momento se debe pensar en que tipo de implementación de GPO se quiere realizar.
Se puede optar por una de estas opciones, en función de si se trata de aplicar sobre el equipo o el usuario:
- Iniciar y apagar equipo: Para lanzar el script de PowerShell al iniciar o apagar el equipo, se debe ir a “Configuración del equipo > Directivas > Configuración de Windows > Scripts (Inicio o apagado)”.
- Iniciar y cerrar la sesión: Para lanzar el script de PowerShell al iniciar o cerrar la sesión de usuario, se debe ir a “Configuración de usuario > Directivas > Configuración de Windows > Scripts (inicio y cierre de sesión)”.
NOTA: En este caso se crea un script que se ejecute en el arranque, pero podremos hacer una configuración basada en el firewall, desplegándolo desde “Configuración del equipo > Directivas > Configuración de Windows > Configuración de seguridad > Windows Defender Firewall”.
En este caso, tiene que lanzarse sobre el servidor y durante su arranque por lo que tomaremos la primera opción, o sea “Configuración del equipo > Directivas > Configuración de Windows > Scripts (Inicio o apagado)” (9), desplegando por ello toda la ruta para a continuación seleccionar la opción “Iniciar” (10), hacer clic sobre ella con el botón derecho y seleccionar propiedades y a continuación ir a la pestaña “Scripts de PowerShell” (11).
Paso 2. Accedemos a la ruta de inicio de sesión y seleccionamos scripts de PowerShell
Llegados a este punto, se debe hacer clic en “Agregar” (12), introduciendo la ruta (13) donde se guarda el script que se ha creado en el Paso 1, guardándolo.
Paso 2. Cargamos el script de Firewall para su ejecución
En este momento ya está todo operativo, para comprobarlo se puede ir al Administrador de directivas de grupo, buscar la GPO que se ha creado al principio, ver su estado y si se puede ver vinculado el script.
Conclusiones y próximos pasos:
El proceso descrito en este tutorial, como configurar los Firewall mediante GPO script de PowerShell, permite desplegar las configuraciones de firewall deseadas de manera rápida y sencilla, pudiendo así mismo convertir el código de PowerShell en un pequeño script de rápida ejecución que se lance a los servidores que se deseen dentro de una Unidad Organizativa. Este proceso se lleva a cabo en muy pocos pasos muy sencillos tal como se ha podido ver en este tutorial.
Si se quiere ampliar la información aquí contenida, se recomienda visitar la sección de Microsoft Learn dedicada a los comandos de PowerShell para la gestión del Firewall de Windows.
Para completar esta información, recomendamos que visites los siguientes enlaces, donde podrás ver información adicional y algunos ejemplos de operativas que se pueden realizar en base a directivas de grupo, como, por ejemplo:
- Qué son y para qué sirven las GPO
- Comandos de PowerShell para gestionar GPO Script
- Como configurar una GPO para el mapeo de unidades compartidas
- Como configurar GPO para mapeo de impresoras
- Cómo desplegar un GPO Script con código de PowerShell
- Como configurar unidades personales mediante GPO script
- Cómo ocultar el acceso a una unidad de disco dentro de tu servidor a través del editor de políticas locales
¡Gracias por acompañarnos!