Network Security Groups

Podemos considerar los Network Security Groups como una línea de defensa en la seguridad de nuestros recursos en Azure.

Se considera un firewall de capa 4 porque puede filtrar por direcciones IP origen y destino, por puertos origen y destino y por protocolo (TCP/UDP), pero no por contenido. Puede aplicarse en 2 niveles:

  • vNIC: Sólo se recomienda en casos específicos en los que una máquina requiere una configuración diferente al resto de la subred. También se puede aplicar para máquinas Multi-hommed (varias vNICs).
  • Subnet: Es el método recomendado y todas las máquinas que se encuentran conectadas a una misma subred estarán sujetas a las mismas restricciones.

Un recurso al que podemos asociar un NSG durante su creación es una máquina virtual. El asistente de creación de la máquina virtual nos permite elegir entre dos tipos de NSG, básico o avanzado:

En un NSG básico podemos seleccionar los puertos que queremos abrir de forma pública:

Mientras que en el modo avanzado se creará el objeto para el NSG y después podremos configurarlo:

Cuando finaliza la creación de la máquina virtual podemos acceder a las opciones de configuración del NSG:

Este NSG dependerá del sistema operativo de la máquina que hemos creado. En este caso, al ser una máquina virtual Windows Server 2016 se ha creado de forma automática una regla entrante (inbound) que permite el acceso vía Escritorio Remoto (RDP – 3389). Si creamos una máquina virtual Linux, la regla que se crea por defecto permite el acceso a la máquina vía SSH (22).

La regla entrante con prioridad 65000 permite que las máquinas que se encuentren en la misma VNet puedan comunicarse entre sí. La regla entrante de prioridad 65001 permite el acceso a la máquina desde un NLB (Network Load Balancer), aunque no lo hemos creado en este ejemplo.

Por último, nos encontramos con una regla entrante con prioridad 65500 que bloquea cualquier otro tráfico que no haya sido permitido de forma explícita en una regla con un valor de prioridad inferior.

En cuanto a las reglas salientes (outbound), está permitido el tráfico desde la máquina virtual a cualquier otra máquina en la misma VNet y también desde la máquina virtual hacia Internet.

En cualquier momento podemos crear nuevas reglas, tanto entrantes como salientes. Por ejemplo, para crear una nueva regla entrante que permita el acceso a la máquina virtual en el puerto 80 (HTTP):

Al crear la regla podemos elegir el modo básico o avanzado:

En el modo avanzado podemos seleccionar como origen Any, direcciones IP, Security Tag o Application Security Group. El objeto Security Tag puede ser cualquiera de las etiquetas que están creadas en Azure, como Internet, VirtualNetwork, AzureLoadBalancer, AzureTrafficManager y muchos más que veremos en otros posts. Del mismo modo, también podemos seleccionar un puerto de origen, aunque no es habitual. En el destino podemos seleccionar direcciones IP, VirtualNetwork o Application Security Group, así como puerto de destino y protocolo (UDP, TCP, ambos). La acción para la regla puede ser Allow o Deny:

  • En el modo básico sólo podemos elegir en el destino el servicio (HTTP, SSH, …) y puertos de destino en el caso de que en servicio de destino elijamos Custom:

Tanto en el modo básico como en el avanzado asignamos una prioridad a la regla. Cuando llega un paquete IP al NSG se aplican las reglas en orden creciente de prioridad. La primera regla cuyas condiciones se cumplan aplicará la acción y el resto de reglas no se aplicarán a ese paquete. Por ejemplo, en el siguiente conjunto de reglas:

  1. Si llega un paquete dirigido al puerto 80 y con IP de destino 10.0.0.10, se permite la entrada. En caso contrario, se pasa a la siguiente regla.
  2. Si el paquete va dirigido al puerto 3389 (RDP), se le permite la entrada. En caso contrario, se pasa a la siguiente regla.
  3. Si el paquete viene desde la misma VNet en la que se encuentra la máquina virtual, se permite la entrada. En caso contrario, se pasa a la siguiente regla.
  4. Si el paquete viene de un NLB, se le permite la entrada. En caso contrario se pasa a la siguiente regla.
  5. Si el paquete no cumple ninguna condición de las reglas anteriores, se deniega el acceso.

Como ya hemos dicho, un NSG puede aplicarse a una tarjeta de red de una máquina virtual o a una subnet. Podemos comprobar el ámbito en el que se ha aplicado la regla en:

O para subnets:

En este ejemplo vemos que sólo se está aplicando a la tarjeta de red asociada a la IP privada 10.0.0.4. Si asociamos el NSG a una subred, se aplicarán las mismas reglas a todas las máquinas virtuales que estén conectadas a esa subred.

Como una máquina virtual podría verse afectada por varios NSG aplicados a diferentes niveles (a una tarjeta de red y también a una subred), podemos utilizar la opción “Effective security rules” para conocer cuáles son las reglas combinadas que de forma efectiva actúan sobre la máquina virtual: