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.
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.
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.
- INTERNET: El puerto eth4 será nuestra WAN para conectarnos a internet.
- switch0: Agrupa las interfaces restantes (eth0, eth1, eth2, eth3) montando un switch con ellas.
- Red: El switch alberga la red 192.168.1.0/24 que llamaremos LAN.
- IP: El router toma la IP 192.168.1.254, siendo esta la puerta de enlace o gateway para comunicarse con Internet.
- DHCP: Sirve IPs del rango 192.168.1.100 hasta la 253 a todo dispositivo que esté conectado al switch0.
- eth1: A esta interfaz estará conectado un ordenador que brindara los siguientes servicios:
- MQTT broker.
- Plex.
- InfluxDB.
- PiHole.
- etc…
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:
- Interfaz de red: Como se puede ver en el diagrama, nuestra VLAN IoT colgara únicamente desde la interfaz eth3 del router. Aquí podremos poner un switch y así conectar vuestros dispositivos por cable, o como es mi caso, conectar un punto de acceso WiFi.
- VLAN ID: 101.
- Red: 10.0.0.0/24.
- IP: 10.0.0.254/24 siendo esta la puerta de enlace de la VLAN.
- Servicio DHCP: Servirá IPs empezando desde 10.0.0.1 hasta 10.0.0.253.
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
.
Esta acción nos mostrara un formulario donde tendremos que meter los datos de nuestra VLAN IoT.
- VLAN ID: Metemos el numero 101 . Este puede ser cualquier un numero entre 0 y 4094.
- Interface: Seleccionamos switch0. Más adelante asignaremos la VLAN solamente al eth3 como definimos en los preparativos y en el diagrama.
- Descripción: Algo que nos describa el porqué de esta VLAN. En nuestro caso IoT.
- MTU: Esto no lo tocamos, está bien como esta.
- Address: Seleccionamos Manually define IP address y en el recuadro que nos aparecerá más abajo, metemos la IP 10.0.0.254/24. Esta será la puerta de enlace de nuestras VLAN.
Clicamos en Save para guardar y una vez guardada, podremos ver como se ha agregado a la lista de VLANes pulsando en VLAN.
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.
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.
Debajo de eth3, en el recuadro pvid, deberemos meter el ID de nuestra VLAN, en este caso 101. Y guardar pulsando en Save.
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.
-
DHCP Name: Recomiendo poner el mismo nombre que la VLAN para evitar confusiones. Ten en cuenta que no puedes utilizar espacios.
-
Subnet: muy importante que pongamos la misma que definimos para la VLAN IoT.
-
Range Start: La primera dirección IP del el rango a servir.
-
Range Stop: La ultima dirección IP a repartir.
-
DNS 1: DNS primario. Si tienes montado algun Pi-Hole puedes ponerlo aquí.
-
DNS 2: DNS secundario para que en caso de que el primario deje de funcionar o este inaccesible, tire de este.
-
Unifi Controller: En caso de que tengamos uno y deseemos poder gestionar el servicio desde el mismo, deberemos poner su dirección IP.
-
Enable: marcamos esta opción para que una vez que se cree se ponga en activo.
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.
Nombramos al grupo como Rangos_RFC1918, seleccionamos el tipo como Network Group y pulsamos en Save.
Una vez guardado aparecerá en la lista de grupos, solo falta agregarle los rangos RFC1918. Entramos en Actions > Config del grupo.
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.
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í.
Las reglas son las encargadas de controlar el tráfico y podríamos agruparlas en 3 grupos dependiendo de su flujo.
-
IN: Es el tráfico que entra en la interfaz desde los dispositivos de la VLAN. Trafico con origen en algún dispositivo de la VLAN, con destino al router/LAN/Internet. Es decir, el tráfico que entra a la interfaz virtual de nuestra VLAN, switch0.101, que a su vez la hemos asociado al puerto eth3.
-
OUT: Trafico que sale del router hacia la interfaz virtual switch0.101, que en si es en dirección a nuestra VLAN. Podríamos decir que es la dirección opuesta al trafico IN.
-
LOCAL: Es el tráfico interno de la VLAN. Esto es, la comunicación entre dispositivos dentro de la VLAN.
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.
Vamos a empezar con las reglas IN, osea, las regalas que regirán el tráfico que sale de nuestra VLAN hacia el router.
- NAME: Llamaremos al conjunto de reglas como IoT_IN.
- Description: Le damos un nombre descriptivo.
- Default action: Por defecto aceptaremos que todo el tráfico sea aceptado en esa dirección. Seleccionamos Accept.
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.
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.
A continuación entramos en la pestaña Rules y pulsamos en Add New Rule.
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.
En la pestaña a Advanced seleccionamos Established y Related.
Y en la pestaña Source seleccionamos el grupo de redes que creamos antes, Rangos_RFC1918. Para finalizar pulsamos en Save.
¿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.
Escribimos una pequeña descripción y seleccionamos la acción Accept y los protocolos Both TCP and UDP.
Vamos a la pestaña Destination y metemos la IP y el puerto de nuestro Broker MQTT y guardamos pulsando en Save.
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.
En la pestaña Destination seleccionamos el grupo de redes privadas Rangos_RFC1918 y guardamos con Save.
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.
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.
Nombramos el Ruleset como IoT_LOCAL junto a una pequeña descripción y por defecto seleccionamos la acción Drop.
En el listado de Rulesets pulsamos en el botón Actions correspondiente a IoT_LOCAL, y después en Configuration
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.
A continuación, entramos en la pestaña Rules y pulsamos en Add New Rule.
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.
Solo nos falta decirle el puerto UDP del servicio DHCP, que es el 67, en la pestaña Destination y guardar pulsando en Save.
Para terminar con las reglas LOCAL clicamos sobre Save Rule Order.
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.
Fuentes: