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.

Router virtual con Vyatta y III: configuración

En este último post veremos como configurar nuestro Vyatta para que funcione como un router NAT entre nuestra red interna y la red pública.

Vyatta tiene un modo edición donde podremos configurar los parámetros del router, para entrar en este modo, hay que teclear configure, para salir del modo de edición teclearemos exit. Es muy importante tener en cuenta que para cargar las configuraciones que escribamos, habrá que teclear commit una vez realizada la configuración. Además antes de salir del modo de edición tenemos que guardar la configuración haciendo save.

En primer lugar, configuraremos las interfícies de red, para ver las interfícies que tenemos creadas:

# show interfaces

post4-01

Para configurar un adaptador utilizaremos el siguiente comando:

# set interfaces ethernet ethX address IP/máscara

# commit

post4-02

Observamos ahora como las interfícies han quedado correctamente configuradas:

post4-03Configuraremos ahora la puerta de enlace por defecto, que será donde se enviarán los paquetes con destino al exterior de la red:

# set system gateway-address IP de la puerta de enlace

Configuramos también el DNS forwarding, de manera que los clientes utilicen directamente como servidor de nombres nuestra puerta de enlace, siendo ésta la que  dirija las peticiones al servidor de nombres, usando un cache para ahorrar consultas ya realizadas.

# set system name-server IP del servidor de nombres

# set service dns forwarding cache-size 500 

# set service dns forwarding listen-on eth1

# set service dns forwarding system

post4-04Finalmente, configuraremos el servicio de NAT, que traducirá las direcciones privadas de nuestra red interna mediante IP masquerade, de forma que toda la red saldrá al exterior o red pública con la IP externa del router. Como únicamente queremos salir hacia el exterior, el NAT traduce direcciones internas pero no al revés.

# set nat source rule 1 outbound-interface eth0

# set nat source rule 1 source address 192.168.3.0/24

# set nat source rule 1 translation address masquerade

# commit

# save

post4-05Ya tenemos, nuestro router en funcionamiento. En posts siguientes iremos ampliando sus funciones con firewall, proxy, etc.

Router virtual con Vyatta II: Instalación Vyatta

En la primera entrada de la serie, vimos como crear la máquina virtual sobre HyperV. En esta nueva entrega, procederemos a instalar Vytta 6.5 Community.

Abrimos el Administrador de HyperV y seleccionamos la máquina virtual que creamos anteriormente y clicando sobre el botón derecho, elegimos la opción Conectar, esto nos abrirá una ventana con la virtual:

post3_01

A continuación iniciaremos la máquina virtual, pulsando sobre el botón Iniciar:

post3_02

Arrancará la máquina con la ISO del sistema que funciona en modo live y nos pedirá login y passord para entrar al sistema, las credenciales iniciales son vyatta, tanto para el login como para la password.

Para instalar el sistema de forma permanente en un disco (en nuestro caso en la máquina virtual), utilizaremos el comando:

vyatta@vyatta:~$ install image

Se inicia el asistente, elegimos Yes a si queremos continuar, en la selección de la unidad donde instalar el sistema, seleccionamos las opciones per defecto: Auto, sda y elegimos Yes cuando nos pregunta si queremos eliminar los datos existentes de sda

post3_07

Seguidamente, nos pregunta qué tamaños de partición utilizaremos, en nuestro caso la totalidad del disco y qué imagen del sistema copiaremos, elegimos la opción per defecto:

post3_11Por último, nos pide cambiar la contraseña para el usuario Vyatta, no podemos poner la existente, así que elegimos otra (siempre la podremos cambiar posteriormente) y configurar el sistema de arranque Grub, como solo tenemos la unidad sda, pulsamos Return.

Ya tenemos, el sistema instalado, únicamente queda reiniciar el sistema, para ello teclearemos el comado reboot.

En el siguiente post, procederemos a configurar el router para que funcione como puerta de enlace entre una red interna y nuestra red corporativa.