miércoles, mayo 07, 2008

Controlando el firewall de Windows en la Linea de comandos:netsh

Hace poco publiqué un un pequeño tutorial del firewall de Windows XP. Entre las cosas que me dejé pendientes en el post fue el manejo del firewall a través del comando netsh
netsh es un programa capaz de manejar toda la configuración de red de los sistemas Windows, incluyendo el firewall. Netsh tiene diversos contextos, cada uno de los cuales es capaz de manejar un componente del sistema de red.
Para manejar el firewall el contexto que se utiliza es firewall. Para acceder a él ejecutamos la herramienta y tecleamos firewall. En este contexto podremos ir introduciendo comandos que permiten configurar el firewall a nuestro gusto.
c:\Documents and Settings\terron>netsh
netsh>firewall netsh firewall>

Algunas definiciones

Antes de manejar el firewall de Windows, a continuación la terminología que utiliza Microsoft para el firewall:
  • Perfil: Un conjunto de parámetros de configuración. Puede ser un perfil de dominio o estándar
  • Servicio: Microsoft ha creado una serie de conjuntos de servicios determinado en el firewall. Estos servicios son ficheros e impresoras, administración remota,escritorio remoto, universal plug and play y todos. Esto nos permite especificar grupos sin necesidad de tener que saber los puertos que utilizan.
  • Alcance: A la hora de especificar qué direcciones IP se le permite el acceso a través del firewall, Microsoft permite especificar todas las direcciones (ALL), subred (SUBNET) que indica direcciones IP que pertenecen a la misma subred a la cual el ordenador está conectado, personalizada (CUSTOM) especificando la lista de direcciones que pueden acceder a través del firewall.

Obteniendo información sobre la configuración

El primer comando que puede probarse es ver cual es ver cual es la configuración actual del firewall. Para ello usamos show opmode
netsh firewall>show opmode

Configuración del perfil Dominio (actual):
-------------------------------------------------------------------
Modo funcional                                = Deshabilitar
Modo de excepción                             = Habilitar

Configuración del perfil Estándar:
-------------------------------------------------------------------
Modo funcional                                = Habilitar
Modo de excepción                             = Habilitar

Configuración del servidor de seguridad Conexión de área local:
-------------------------------------------------------------------
Modo funcional                                = Habilitar

Configuración del servidor de seguridad Conexiones de red inalámbricas:
-------------------------------------------------------------------
Modo funcional                                = Habilitar

En este listado podemos ver que está activado el perfil de dominio. Dentro de este perfil el Modo funcional implica que el firewall está desconectado. Por otra parte la política del dominio impone que no se deben estar habilitadas las excepciones. Puede verse en el gui (firewall.cpl) la configuración actual:

También vemos cual es el estado del firewall en las diferentes interfaces de red que tiene el sistema (en este caso la Interfaz de red local y una intefaz inalámbrica). Es importante saber que la información respecto a las intefaces sólo es válidad si la configuración del perfil indica que se permiten la excepciones. Sino se permiten éstas, da exactamente igual la información que aporte esta entrada o lo que se intente configurar sobre las excepciones.

También puede verse el estado general del firewall. Con este comando, además de información sobre el estado del firewall (activado, desconectado) se obtiene varios parámetros de configuración del mismo,así como los puertos que están abiertos por defecto.

netsh firewall>show state
Estado del servidor de seguridad:
-------------------------------------------------------------------
Perfil                               = Dominio
Modo funcional                       = Deshabilitar
Modo de excepción                    = Habilitar
Modo de resp. difusi¢n/multidifusi¢n = Habilitar
Modo de notificaci¢n                 = Habilitar
Versi¢n de directiva de grupo        = Firewall de Windows
Modo de administraci¢n remota        = Deshabilitar

Puertos actualmente abiertos en todas las interfaces de red:
Puerto Protocolo Versi¢n  Programa
-------------------------------------------------------------------
137    UDP       IPv4     (null)
139    TCP       IPv4     (null)
138    UDP       IPv4     (null)
3389   TCP       IPv4     (null)
445    TCP       IPv4     (null)
La información de estado del firewall es la siguiente:
OpciónDescripción
PerfilIndica el perfil de firewall que está activado. Puede ser el perfil de dominio - cuando el sistema detecta que está conectado a una red manejada a través de un dominio de Windows - o el perfil estándar, el que se usa en caso contrario.
Modo funcionalIndica si el firewall está activado o no.
Mode de excepciónIndica si están activadas las excepciones o no.
Modo de resp. difusión/multidifusión Controla si debe de responderse con el firewall activado a peticiones multicast o broadcast que lleguen al sistema.
Modo de notificación Controla las notificaciones al usuario cuando un programa intenta escuchar en un puerto determinado.
Versión de directiva de grupo Quién ha configurado el sistema.
Modo de administración remota Si se habilita esta opción permite que se abran los puertos necesarios para la administración remota del equipo (MMC,registro de eventos,...)
Por último se muestra un listado de puertos y para qué protocolos están abiertos en el firewall. Esta información puede obternse también por perfil y por interfaz de red presente en el sistema. Esta información es la que se muestra en la pestaña avanzadas de GUI del firewall:
netsh firewall>show portopening
Configuración de puerto para el perfil Dominio:
Puerto Protocolo Modo          Nombre
-------------------------------------------------------------------
139    TCP       Habilitar     Servicio de sesi¢n de NetBIOS
445    TCP       Habilitar     SMP sobre TCP
137    UDP       Habilitar     Servicio de nombres de NetBIOS
138    UDP       Habilitar     Servicio de datagramas de NetBIOS
3389   TCP       Habilitar     Escritorio remoto

Configuración de puerto para el perfil Estándar:
Puerto Protocolo Modo          Nombre
-------------------------------------------------------------------
139    TCP       Habilitar     Servicio de sesi¢n de NetBIOS
445    TCP       Habilitar     SMP sobre TCP
137    UDP       Habilitar     Servicio de nombres de NetBIOS
138    UDP       Habilitar     Servicio de datagramas de NetBIOS
3389   TCP       Habilitar     Escritorio remoto
La siguiente tabla resume todos los comandos show y que información se obtiene de su ejecución
ComandoDescripción
show allowedprogramMuestra los programas a los cuales se le permite escuchar en puertos a la espera de conexiones.
show configMuestra la configuración actual.
show currentprofileMuestra cual es el perfil actual.
show icmpsettingMuestra la información de configuración del firewall para el protocolo ICMP.
show loggingMuestra la información de configuración del registro de seguridad.
show multicastbroadcastresponseMuestra la configuración de la respuesta del firewall a las peticiones de broadcast
show notificationsMuestra cual es el estado de las notificaciones al usuario
show opmodeMuestra el modo de operación del firewall.
show serviceMuestra los servicios que están permitido escuchar.
show stateMuestra el estado del firewall.

Configurando servicios

Los servicios son lo más sencillo que se puede configurar en el firewall. Por ejemplo, si se deseara permitir en cualquier perfil el acceso al escritorio remoto sólo para las redes directamente conectadas en todo los perfiles
netsh firewall>set service mode=ENABLE type=REMOTEDESKTOP scope=SUBNET profile=ALL
Microsoft, para complicar un poco más las cosas, permite que se omita el nombre de los parámetros de configuración , con lo que la línea anterior puede también escribirse como:
netsh firewall>set service ENABLE REMOTEDESKTOP SUBNET ALL
Otro ejemplo que puede ponerse es permitir la administración remota (mmc, registro de eventos )de un equipo desde cualquier red de la RFC 1918 y que sólo se aplique en el perfil estándar:
netsh firewall>set service ENABLE REMOTEADMIN CUSTOM 192.168.0.0/16,172.16.0.0/20,10.0.0.0/8 ESTANDAR

Abriendo puertos

Ahora, si necesitamos abrir un puerto determinado, no recogido en los servicios que define Microsoft, ¿cómo debe hacerse?. Para ello se usa portopening (ya sea add - para añadir - , set - para modificar - o delete - para borrar - ). Un ejemplo sencillo: si se tiene un servidor de ssh escuchando en el puerto 22, ¿cómo podría abrirse dicho puerto?:
netsh firewall>add portopening name="Servidor SSH" protocol=TCP port=22 mode=ENABLE scope=ALL profile =ALL
Una particularidad que tiene portopening es que puede abrirse puertos en función de la interfaz de red que se desee. Por ejemplo, si sólo se quisiera activar la conexión entrante a través del puerto 22 a una interfaz, por ejemplo Conexión de área local:
netsh firewall>add portopening name="Servidor SSH" protocol=TCP port=22 mode=ENABLE scope=ALL profile=ALL interface="Conexión de área local"
Al igual que ocurre con el apartado anterior, se puede omitir el nombre de los parámetros, complicando un poco más:
netsh firewall>add portopening "Servidor SSH" TCP 22 ENABLE ALL ALL "Conexión de área local"
Para modificar los parámetros de portopening, se utiliza el comando set. Por ejemplo, si en el apartado anterior se quiere que sólo se permitan conexiones entrantes al puerto 22 desde la subred a la cual está conectada la máquina, habría que cambiar el alcance (SCOPE) de la regla:
netsh firewall>set portopening "Servidor SSH" TCP 22 ENABLE SUBNET ALL "Conexión de área local"
Si queremos borrar una regla, se utiliza delete portopening:
netsh firewall>delete portopening "Servidor SSH" TCP 22 ENABLE SUBNET ALL "Conexión de área local"

Autorizando programas a escuchar en cualquier puerto

A veces, sin embargo, no se sabe a priori cuales son los puertos que va a usar una aplicación determinada. Ésta usa puertos dinámicos que puede ser cualquiera del rango. Una aplicación clásico de este tipo es un servidor ftp, que cuando utiliza el modo pasivo abre puertos a los cuales se conectan los clientes.

Por ejemplo, si queremos añadir como excepciones un servidor ftp, situado en c:\usr\bin\ftpd

netsh firewall>set allowedprogram program="c:\usr\bin\ftpd.exe" name="Servidor FTP" mode=ENABLE scope=ALL profile=ALL
Al igual que ocurre con portopening se usa el delete allowedprogram
netsh firewall>delete allowedprogram program="c:\usr\bin\ftpd.exe"

Activar las notificaciones

Puede quererse informar al usuario cuando un programa intenta escuchar en algún puerto. En la terminología del firewall de Windows XP a estos cuadros de diálogos se les llama notificaciones. Las notificaciones pueden activarse en función del perfil que esté activo. Por ejemplo, si se desea activar las notificaciones en el perfil de dominio:
netsh firewall>set notifications mode=ENABLE profile=DOMAIN

Configurando el ICMP

ICMP es un protocolo de control, transportado por datagramas IP y utilizado par informar de condiciones excepcionales durante las comunicaciones (redes no alcanzables, saber si una máquina responde, cálculo del máximo tamaño de un datagrama). El firewall de Windows XP permite controlar que tipo de peticiones ICMP va a aceptar la máquina o que paquetes ICMP va a generar la máquina.
La siguiente tabla recoge el tipo y el significado de cada uno:
TipoDescripción
2 Específico de ICMPv6, el sistema lo genera en caso de que el paquete de datos sea mayor que la MTU del enlace que quiera atravesar.
3 El sistema genera paquetes ICMP que indican que un determinado destino no es alcanzabe.
4 El sistema genera este paquete para indicar al extremo que le está enviando tráfico que lo haga a una menor velocidad.
5 En este caso el sistema permite recibir mensajes ICMP de redirección, normalmente generados por los routers del sistema.
8 Permite las peticines de echo (generadas por la orden ping)
9 Permite recibir peticiones de solicitud de router.
11 El sistema envía mensajes ICMP en caso de que un datagrama IP que vaya a rutar su TTL alcance el valor cero.
12 El sistema genera este paquete ICMP en caso de encontrar errores en la cabecera IP de un datagrama que haya recibido.
13 Permite al sistema recibir paquetes ICMP solicitándole una marca de tiempos.
17 Permite al sistema recibir peticiones ICMP para que el sistema devuelva la máscara de la interfaz de red que recibe la petición
Por ejemplo, si se quiere usar IPv6 es importante que los paquetes que calculan cual es la máxima MTU de una ruta entre equipos pase de manera adecuada. Para ello habría que dejar pasar los paquetes de tipo 2:
netsh firewall>set icmpsetting type=2 mode=ENABLE profile=ALL
Permite especificar que interfaz puede recibir paquetes (excepto para el tipo 2), y si se especifica la interfaz, no puede especificarse el perfil.

Repuesta a multicast

Controla como el sistema responde a los paquetes dirigidos a direcciones multicast o broadcast. Si se activa, el sistema responderá a este tipo de paquetes, en caso contrario, los ignorará. Por ejemplo, si queremos activar la respuesta en el perfil actual:
netsh firewall>set multicastbroadcastresponde mode=ENABLE profile=CURRENT

Registros

Cualquier sistema de firewall debe de registrar todos los accesos no autorizados, para poder analizar posteriormente los eventos. Se puede configurar el nombre del fichero donde se almacenarán los eventos, el tamaño máximo del mismo y si se quiere registrar los paquetes que se rechacen o bien todos los intentos de conexión. Si se quiere por ejemplo, registrar sólo los paquetes que se han rechazado:
netsh firewall>set logging filelocation="c:\windows\registrofirewall.log" maxfilesize=1000 droppedpackets=ENABLE

Referencias

Technorati Tags: ,

No hay comentarios: