VyOS: Configuración Firewall I

Como ya se explicó en otro post, con la adquisición por parte de Brocade de Vyatta, se abandonó la versión Community del popular router, naciendo VyOS como fork para del proyecto. En otros post 1,2 y 3 vimos como configurar Vyatta o a partir de ahora VyOS para funcionar como un router básico con NAT. En esta ocasión, vamos a configurar un firewall para nuestra red.

El primer paso es decidir qué infraestructura queremos implementar, en este ejemplo, el mismo que planteo en las clases, supondremos una red local (LAN) y una DMZ que deberá aceptar conexiones desde el exterior. A nivel de simulación, se plantea el siguiente modelo, donde una VM hará de equipo de la LAN, otra máquina actuará como servidor web y finalmente una tercera VM VyOS que hará la función router firewall, como podemos ver en la siguiente imagen.

2017-04-17_0938

Las dos máquinas que harán de equipo local y servidor, se configuran en el VirtualBox como red interna, de la misma manera que dos de las interfícies de la VM de VyOS. Como en el aula quiero que todos los VyOS accedan a la red local para que los alumnos puedan interactuar, la tercera interfície del VyOS la configuraremos en mode adaptador-puente, saliendo a Internet a través del router del aula.

Un tema muy importante cuando se trabaja con el firewall, es tener claro el sentido del tráfico. Esto, suele ser una fuente habitual de errores, debido a que se interpreta de forma errónea qué es tránsito de entrada o de salida.

El criterio para determinar si el tránsito es de entrada o de salida se debe mirar sobre la interfície donde se aplica el firewall, como se ve en el siguiente dibujo.

2017-04-17_0946

Así, si trabajamos sobre eth0, el tránsito de salida es el que va hacia Internet, pero si queremos aplicar el filtrado sobre eth1, esos mismos paquetes que van hacia el exterior son tránsito de entrada, puesto que entran en el router.

Una cuestión de buenas prácticas es que a la hora de dar nombre a los firewall se utilice un criterio indicando si es de entrada o salida y sobre qué interfície se aplica, por ejemplo, FW0IN indica que se aplicará sobre eth0 de entrada.

Instalación VM

Aunque en los post mencionados anteriormente ya se explicó el proceso detallado, aquí haremos un breve resumen de los pasos previos.

Crearemos una máquina virtual con tres interfícies: la primera en modo puente (eht0) y las otras dos (eth1 y eth2) en modo red interna. Le asignamos una memoria de 1024 MiB y un espacio de disco de 10 GiB. Simplemente le conectamos la ISO de vyOS que podéis descargar de aquí.

Una vez arranca el sistema, entramos user: vyos password: vyos y procederemos a instalar el el sistema mediante el comando:

install image

Seguiremos las instrucciones y al finalizar, desconectamos la ISO de la máquina virtual y la reiniciamos.

Configuración de las interfícies y del sistema

El siguiente paso será configurar las interfícies. En este ejemplo configuraré eth0 con 192.168.2.30, eth1 con 192.168.20.254 (que corresponde a la puerta de enlace de la LAN) y eth2 con 192.168.120.254 (para la puerta de enlace de la DMZ).

Para configurar vyOS hay que entrar en el modo edición con el comando configure

set interfaces ethernet eth0 address 192.168.2.20/24

set interfaces ethernet eth1 address 192.168.20.254/24

set interfaces ethernet eth2 address 192.168.120.254/24

commit

Para confirmar los cambios habrá que introducir el comando commit.

A continuación, configuraremos el sistema para que se pueda comunicar con el router que le dará acceso a Internet (en mi caso 192.168.2.254).

set system gateway-address 192.168.2.254

set system name-server 8.8.8.8

commit

Es muy importante recordar que para que los cambios sean permanentes, deberemos guardarlos antes de salir del modo edición, con el comando save.

Configuración NAT

Como queremos simular que la máquina virtual vyOS se comporte como el router-firewall de un sistema, configuraremos la traducción de direcciones (NAT) tal como sería necesario hacerlo para salir con una sola IP pública. Si quisieramos que simplemente actuara como un firewall sin NAT, tendríamos que configurar el enrutamiento.

En primer lugar configuramos el NAT de salida para permitir que tanto la LAN como la DMZ puedan conectarse al exterior.

set nat source rule 1 outbound-interface eth0

set nat source rule 1 source address 192.168.20.0/24

set nat source rule 1 translation address masquerade

set nat source rule 2 outbound-interface eth0

set nat source rule 2 source address 192.168.120.0/24

set nat source rule 2 translation address masquerade

commit

A continuación configuramos el NAT de entrada para permitir que la DMZ reciba conexiones entrantes, en este caso para el puertos 443.

set nat destination rule 1 inbound-interface eth0.

set nat destination rule 1 protocol tcp

set nat destination rule 1 destination port 443

set nat destination rule 1 translation address 192.168.120.1

commit

Guardamos las configuraciones realizadas y comprobamos el correcto funcionamiento del entorno, donde tendremos una máquina cliente con IP 192.168.20.1 y un servidor Ubuntu con Apache configurado para funcionar con https y servicio ssh instalado, con IP 192.168.120.1.

Desde el cliente y servidor se debe poder tener acceso a Internet. Por otro lado, desde otra máquina de la red 192.168.2.0/24 deberíamos poder conectarnos a nuestro servidor web introduciendo la IP del router (192.168.2.20).

Configuración firewall: ejemplos sencillos

Las reglas básicas del firewall son DROP o REJECT para descartar o rechazar un paquete o ACCEPT para dejarlo pasar. Por ejemplo podemos pensar en un primer cortafuegos que permita salir todo el tráfico hacia Internet excepto a una dirección concreta. Lo aplicaremos sobre la interfície eth0:

set firewall name FW0OUT default-action accept

set firewall name FW0OUT rule 1 action drop

set firewall name FW0OUT rule 1 destination address 136.243.172.77

commit

Si quisiéramos incluir más reglas, simplemente se irían añadiendo condiciones rule 2, rule 3, etc.

Por ejemplo, una segunda regla para impedir conexiones FTP hacia el exterior desde la DMZ y la LAN:

set firewall name FW0OUT rule 2 action reject

set firewall name FW0OUT rule 2 protocol tcp

set firewall name FW0OUT rule 2 destination port 21

commit

Ahora queda aplicar el firewall definido sobre la interface correspondiente (aquí es de mucha utilidad usar el criterio de nombre mencionado antes):

set interfaces ethernet eth0 firewall out name FW0OUT

commit

Ahora solo quedaría comprobar el funcionamiento correcto del firewall, haciendo pruebas desde los equipos virtuales.

En el siguiente post, veremos más configuraciones del firewall.

Anuncios