💻​ EdgeRouter X: VLAN para IoT

La idea principal de este articulo es sacar de nuestra red local todo aquel dispositivo IoT y meterlo en una VLAN. ¿Por qué? Por seguridad. Hoy en día muchos dispositivos IoT son como cajas negras, sabemos que funcionan, pero no como. Al no tener control sobre ellos no podemos actualizarlos en caso de que tengan fallos de seguridad gordos, exponiendo al resto de dispositivos de la red a que puedan ser comprometidos. Por eso, lo mejor es sacarlos de nuestra red principal y aislarlos en una red propia.

Para esto crearemos una VLAN donde meteremos todos los dispositivos IoT, aislándolos y dejando que solamente puedan acceder a internet y a aquellos servicios de nuestra red principal que queramos.

Aquí encontraras los pasos para montar dicha VLAN en un router EdgeRouterX de Ubiquiti. Y también como aislar y habilitar el acceso a varios servicios de nuestra red privada mediante reglas de Firewall.

Los pasos que se explican a continuación están basados en una red que puede diferir de la que tú tienes montada. Si sigues al pie de la letra todos los pasos, pueden no coincidir con la configuración de tu red y dejarla inservible. Adapta en todo momento lo que a continuación se expone para que cuadre con tu red.

Preparativos

Antes de nada, hay que tener claro cuál es nuestro escenario actual, y como vamos a implantar nuestra VLAN IoT en él. He aquí un diagrama con la red que tengo junto a la VLAN que montaremos.

er-x_crear_vlan_diagrama.png

Partimos de un router que ha sido configurado mediante el asistente (Wizard) incorporado en el propio router, y asi poder conectarse a Internet mediante PPPoE, quedando sus interfaces de la siguiente manera.

er-x_crear_vlan_0.png

Al estar tratando con redes privadas, trabajaremos con las redes definidas en RFC1918. En este caso vamos a utilizar la red 10.0.0.0/24 para nuestra VLAN IoT. La cual tendrá estas características:

Crear la VLAN IoT

Ahora que ya hemos finalizado con los preparativos, nos dirigimos a la página principal del router EdgeRouter X y pulsamos en Add Interface y después en Add VLAN.

er-x_crear_vlan_1.png

Esta acción nos mostrara un formulario donde tendremos que meter los datos de nuestra VLAN IoT.

er-x_crear_vlan_2.png

Clicamos en Save para guardar y una vez guardada, podremos ver como se ha agregado a la lista de VLANes pulsando en VLAN.

er-x_crear_vlan_3.png

Ahora toca fijar la VLAN a la interfaz eth3. En la página principal pulsamos en ALL y después filtramos la interfaz que buscamos realizando una búsqueda con el texto switch0. Una vez listada la interfaz switch0, pulsamos en Actions y después en Config, como aparece en al siguiente imagen.

er-x_crear_vlan_5.png

En la pestaña Vlan podremos ver las interfaces físicas de las que consta switch0. Activamos la opción VLAN Aware, y se desplegaran las opciones VLAN de cada una.

er-x_crear_vlan_6.png

Debajo de eth3, en el recuadro pvid, deberemos meter el ID de nuestra VLAN, en este caso 101. Y guardar pulsando en Save.

er-x_crear_vlan_7.png

Con esto concluimos la creación y configuración de la VLAN sobre el puerto eth3 del router.

Establecer un DHCP para la VLAN IoT

Ahora que tenemos la VLAN en marcha en el puerto eth3, nos falta poner un servicio DHCP que reparta direcciones IP del rango 10.0.0.0/24 a todo dispositivo que se conecte. Siguiendo los pasos para crear un DHCP desde cero, tendremos que definir el servicio de la siguiente manera.

er-x_crear_vlan_4.png

Para terminar con el DHCP pulsamos en Save. Ahora ya no tenemos que preocuparnos de poner direcciones IP manualmente a los dispositivos que conectemos a eth3, es decir, a nuestra VLAN.

Firewall

Aquí viene la parte más difícil. Si anteriormente no te has peleado con un Firewall algunos conceptos te serán extraños, pero intentare explicar cada paso con algún ejemplo, haciéndolo mas fácil de entender.

La idea principal de todo este montaje es aislar los dispositivos IoT en una VLAN y controlas su tráfico. Esto lo haremos mediante reglas de Firewall. Como durante todo el proceso vamos a tratar con rangos de redes privadas (RFC1918), es recomendable crear un grupo con todas ellas y así reducir el número de reglas. De esta manera ahorraremos tiempo aplicando reglas a este grupo en vez de crear una regla por cada rango de red.

Crear grupo de redes

Para crear el grupo, entramos en Firewall/NAT > Firewall/NAT Groups > + Add Groups.

er-x_crear_vlan_9.png

Nombramos al grupo como Rangos_RFC1918, seleccionamos el tipo como Network Group y pulsamos en Save.

er-x_crear_vlan_10.png

Una vez guardado aparecerá en la lista de grupos, solo falta agregarle los rangos RFC1918. Entramos en Actions > Config del grupo.

er-x_crear_vlan_11.png

En la ventana habrá que ir metiendo los rangos uno a uno pulsando el botón + Add New y al final, guardar haciendo clic en Save.

er-x_crear_vlan_12.png

Ahora toca crear las reglas, pero antes es recomendable repasar un poco su funcionamiento, ya que es un poco confuso, y es mejor entender lo que estamos haciendo que hacerlo por que sí.

er-x_crear_vlan_firewall.png

Las reglas son las encargadas de controlar el tráfico y podríamos agruparlas en 3 grupos dependiendo de su flujo.

Ya sé que es un poco confuso, pero en la práctica le pillaremos el truquillo.

Crear Rulesets o Grupo de reglas

Entramos en Firewall/NAT > Firewall Policies > + Add Ruleset.

er-x_crear_vlan_8.png

Vamos a empezar con las reglas IN, osea, las regalas que regirán el tráfico que sale de nuestra VLAN hacia el router.

er-x_crear_vlan_13.png

Le damos a Save para guardar el Ruleset. Ahora aparecerá en el listado junto a los demás. Pulsamos en Actions de IoT_IN y después en Configuration.

er-x_crear_vlan_14.png

Antes de empezar a definir las reglas hay que indicar a que interfaz van a asignarse y en qué dirección del tráfico se aplicaran. Entramos en la pestaña Interfaces y seleccionamos switch0.101 y la dirección in.

er-x_crear_vlan_15.png

A continuación entramos en la pestaña Rules y pulsamos en Add New Rule.

er-x_crear_vlan_16.png

Ahora ya podemos definir nuestra primera regla. Vamos a decirle al Firewall que acepte cualquier respuesta a una petición de establecer comunicación desde fuera de la VLAN. Por ejemplo, si desde un ordenador de la red LAN (192.168.1.0/24) intentamos comunicarse con un dispositivo de la VLAN IoT (Router > VLAN IoT), la comunicación entrara sin restricciones, pero al responder a esta solicitud es cuando esta regla entra en juego (Router < VLAN IoT). Vamos a definir que en caso de que surjan este tipo de comunicaciones, la comunicación se acepte si solamente dicha petición viene desde algún equipo que este en una red del grupo RFC1918 que creamos antes.

En la pestaña Basic metemos un texto de descripción, seleccionamos Accept y All protocols.

er-x_crear_vlan_17.png

En la pestaña a Advanced seleccionamos Established y Related.

er-x_crear_vlan_18.png

Y en la pestaña Source seleccionamos el grupo de redes que creamos antes, Rangos_RFC1918. Para finalizar pulsamos en Save.

er-x_crear_vlan_19.png

¿Qué pasa si queremos acceder a algún servicio que esta fuera de la VLAN? Por ejemplo, en caso de querer que nuestros dispositivos IoT se conecten a un Broker MQTT que está en 192.168.1.4 y a la escucha en el puerto 1886, deberemos de hacer lo siguiente.

Volvemos a la pestaña Rules y pulsamos en Add New Rule.

er-x_crear_vlan_16.png

Escribimos una pequeña descripción y seleccionamos la acción Accept y los protocolos Both TCP and UDP.

er-x_crear_vlan_20.png

Vamos a la pestaña Destination y metemos la IP y el puerto de nuestro Broker MQTT y guardamos pulsando en Save.

er-x_crear_vlan_21.png

Tendríamos que seguir los mismos pasos en caso de querer dar acceso a otros servicios. Como pueden ser Pi-Hole, Plex, InfluxDB, Home-Assistant etc. pero especificando la *IP y el puerto especifico del servicio.

Y por último vamos a limitar cualquier acceso desde la VLAN hacia cualquier red privada (RFC1918). Puede que penséis que es contradictorio con lo que hemos hecho hasta ahora, pero tiene su sentido, ya que las reglas se aplican por orden. Me explico.

Las reglas del Firewall se aplican sobre el tráfico de manera ordenada. Imagina que llega un paquete de información desde la VLAN IoT al puerto eth3 (switch0.101). La primera regla que aplicara el Firewall es la que definimos por defecto cuando creamos el Ruleset o grupo de reglas, es decir, aceptar toda comunicación saliente desde la VLAN. Aplicando esta regla el paquete pasaría sin problema, pero como tenemos más de una regla, estas se irán aplicando de manera ordenada. En nuestro caso hemos definido otra regla en la que si el tráfico es parte de una comunicación Established o Related la dejaría pasar, pero en caso de no ser así, esta regla no se aplicaría, dejando paso a la siguiente regla. Tercera regla, si coincide que va al 192.168.1.4 y justo al puerto 1886 (Broker MQTT), lo dejara pasar, pero en caso de no coincidir esta regla tampoco se aplicaría. Entonces es cuando entra esta última regla, la más restrictiva. En caso de no haber aplicado las reglas anteriores y aun asi el paquete de comunicación quiera acceder a alguna de nuestras redes privadas, le cortaremos el paso.

Puara crear esta última regla, volvemos a la pestaña Rules y pulsamos en Add New Rule. Metemos una descripción y seleccionamos Drop como acción y All protocols.

er-x_crear_vlan_22.png

En la pestaña Destination seleccionamos el grupo de redes privadas Rangos_RFC1918 y guardamos con Save.

er-x_crear_vlan_23.png

Con esto ya tenemos todas nuestras reglas IN creadas y bien ordenadas, desde las más permisivas a las más restrictivas. Es posible reordenarlas arrastrando unas sobre otras, pero en el orden que las hemos creado están bien. Pulsamos en Save Rule Order para gurdar y con esto finalizamos el conjunto de reglas IN.

er-x_crear_vlan_24.png

Ahora toca definir las reglas LOCAL. Estas filtraran todo el tráfico que surja entre los dispositivos dentro de la VLAN IoT. Como puede ser las peticiones de DHCP hacia el router o la comunicación entre dispositivos.

Para ello lo que vamos a hacer es que toda comunicación sea denegada por defecto, pudiendo poner excepciones. Una puede ser el habilitar que los dispositivos puedan realizar peticiones de DHCP al router, ya que este tiene una interfaz en esta misma VLAN como puerto de enlace (Gateway) con la IP 10.0.0.254/24.

De la misma manera de antes, entramos en Firewall/NAT > Firewall Policies > + Add Ruleset.

er-x_crear_vlan_8.png

Nombramos el Ruleset como IoT_LOCAL junto a una pequeña descripción y por defecto seleccionamos la acción Drop.

er-x_crear_vlan_25.png

En el listado de Rulesets pulsamos en el botón Actions correspondiente a IoT_LOCAL, y después en Configuration

er-x_crear_vlan_26.png

Lo primero es indicar a que interfaz queremos aplicar estas reglas y en que dirección. Pulsamos sobre Interfaces y seleccionamos la interfaz switch0.101 y la dirección local.

er-x_crear_vlan_31.png

A continuación, entramos en la pestaña Rules y pulsamos en Add New Rule.

er-x_crear_vlan_27.png

Con esta regla lo que vamos a habilitar es que los dispositivos de la VLAN puedan solicitar una IP al servicio DHCP que pusimos antes. Vamos a la pestaña Basic y después de poner una pequeña descripción, seleccionamos la acción Accept y UDP en Protocol.

er-x_crear_vlan_28.png

Solo nos falta decirle el puerto UDP del servicio DHCP, que es el 67, en la pestaña Destination y guardar pulsando en Save.

er-x_crear_vlan_29.png

Para terminar con las reglas LOCAL clicamos sobre Save Rule Order.

er-x_crear_vlan_30.png

Con esto concluimos con todas las reglas del Firewall.

Conclusión

Con todo esto montado, nos aseguramos de que cualquier dispositivo conectado a esta VLAN quedara aislado del resto de dispositivos de la misma. Pudiendo comunicarse mediante internet con el mundo y con aquellos servicios de nuestra red privada que nosotros validemos.

Recordar que los pasos aquí expuestos son orientativos. Recomiendo su lectura y compresión antes de aplicarlo sobre un entorno de producción.


Fuentes:

  1. https://xdeb.org/post/2020/02/28/unifi-edgerouter-guest-iot-vlan/

  2. https://www.youtube.com/watch?v=6ElI8QeYbZQ