Objetivos
Material requerido.
Un PC con Windows, claro!! |
¿Por qué necesitamos un firewall?
Windows incluye, de serie, un Firewall activo que te impedirá acceder a tu Mosquitto desde fuera de tu PC, lo que le convertiría en un servidor muy pobre, por lo que necesitamos abrir el puerto 1880 en el Firewall y permitir acceso general. Pero quizás convenga empezar hablando de lo que es un Firewall y lo que no, porque es una palabra que se repite mucho en las pelis, pero no hay mucha gente que haya tocado uno y por eso, como siempre, conviene empezar por el principio, para que puedas entender lo que vamos a hacer a continuación.
Las redes TCPIP se desarrollaron para que pudiera conectarse cualquier nodo con otro cualquiera de la red y en particular para que los paquetes TCPIP pudieran enrutarse sin demasiadas restricciones (Para saltar una red a otra). Cuando tiempo después, en los años 90, la industria buscaba un protocolo que permitiera lanzar internet, el TCPIP venció rápidamente a todos los demás contendientes porque era un protocolo diseñado para eso (Aunque aún no existía Internet)
Este es buen momento para hablar de algunos conceptos básicos, no demasiado bien comprendidos, que son imprescindible para entender las comunicaciones TCPIP y como no, los Firewall
Bien, una vez descrito lo de arriba, ya podemos decir que la mayor ventaja del TCPIP, que era escalable y que conectaba sin restricciones dos nodos cualesquiera de la red mundial, se convirtió en su mayor debilidad, porque el mundo está lleno de hijos de mala madre dispuestos a colarse en tu equipo, para hacer cualquier disparate, como robarte, secuestrar tus datos, etc., etc. y TCPIP les brinda un camino ideal para ello.
Por eso, era necesario disponer de procedimientos que limitasen el acceso a nuestros equipos, a todas esas ratas inmundas que tanto abundan por la red (Son pocos, pero muy activos) y los Firewalls son una de esas armas defensivas. Un Firewall básicamente, es un sistema de control de acceso a través de una puerta (Electrónica) de acuerdo a unas ciertas reglas, que permitan o impidan cruzar a paquetes TCPIP no autorizados.
Normalmente, en las empresas es un equipo intermedio por el que pasan a su través, todos los paquetes entrantes y salientes de Internet, y decide sobre la marcha si permite o deniega el tránsito de esos paquetes de forma transparente para los usuarios. Para esto aplica un conjunto de reglas definido por el administrador del sistema, a todos y cada uno de los paquetes en tránsito, decidiendo si permite el paso o les cierra la puerta.
Un Firewall decide si permite el paso en función básicamente de la información de transporte de cada paquete, como IP de origen, IP destino, Puerto TCPIP, etc., pero no puede decidir en función del contenido del paquete, en contra de la opinión generalizada. Por ejemplo, un Firewall puro no puede bloquear un paquete porque contenga virus, no dispone de esa capacidad, (Aunque nada nos impide instalar un antivirus tras el FW y antes de llegar a la red general)
Por eso, cuando veamos las reglas que vamos a aplicar, hablaremos de direcciones y redes TCPIP o subredes, así como definiremos reglas de entrada (Quien puede venir de fuera) y reglas de salida (A quien permito que salga de mi red interior para ir a donde. Los malos no solo están fuera)
Un caso particular pero muy habitual cuando se monta un FireWall, es montar además una red desmilitarizada o DMZ, de modo que montamos dos redes distintas, una interior con nuestros usuarios y servidores sensibles, y otra red diferente más expuesta, pero con los servidores de acceso público como la página web de la firma o los servidores de correo.
De este modo podemos especificar reglas distintas para cada una de ellas y niveles diferentes de seguridad. Típicamente, cuando montamos un servidor TCPIP (HTTP Web, SMTP mail, FTP, o broker MQTT) necesito definir un puerto de acceso para llegar al server y por eso tendremos que autorizar a nuestro FW mediante reglas de entrada, quien puede llegar al servidor, y también si permitimos que nuestro servidor contacte con algún nodo en el exterior (Reglas de salida).
En el caso de Windows (O Linux) , y gracias a la potencia de los últimos procesadores, tenemos una combinación curiosa de servidor y de estación de trabajo, con lo que el propio FW está integrado en el sistema operativo de nuestro equipo. A pesar de que el modelo conceptual que hemos expuesto más arriba es distinto del caso de una estación con FW incorporado, las capacidades y las reglas que vamos a implementar son las mismas.
Vamos pues a ver, como podemos administrar nuestro Firewall local en Windows y vamos a abrir el puerto 1883, que es el puerto TCPIP que nuestro Broker MQTT utiliza por defecto. Para ello escribe en la ventana inferior de búsqueda: “Firewall”
Abriendo un puerto en el Firewall Windows
Vamos pues a ver, como podemos administrar nuestro Firewall local en Windows y vamos a necesitar abrir el puerto 1883, que es el puerto TCPIP que nuestro Broker MQTT utiliza por defecto. Para ello, lo más cómodo para abrir la configuración del Firewall Windows es que vayas a la ventana de búsquedas, junto al botón de inicio de Windows y escribas “firewall”
Pincha en la primera opción: Firewall de Windows defender y llegarás a esta pantalla, pincha en configuración avanzada:
Te aparecerá esto, donde podremos administrar las reglas de paso:
Queremos permitir a los clientes del MQTT, que vendrán por el puerto 1883, acceder a nuestro broker Mosquitto por lo que tenemos que crear una regla de entrada que se lo permita. Pincha por tanto en reglas de entrada (Inbound rules) y luego a la derecha en nueva regla:
Vale, nos preguntará por la naturaleza de la regla de entrada. En nuestro caso será puerto ya que queremos permitir a los que busquen el MQTT en la 1883:
Pulsa el botón de Siguiente y elige que nuestra regla se aplica al protocolo TCP y al puerto 1883. Pulsa Siguiente:
Llegamos a otra pantalla donde permitiremos esta conexión:
Ahora nos pregunta si deseamos permitir el paso a nuestra red doméstica, o subred corporativa o a todo quisqui venga de donde venga. Si deseas que se puedan conectar desde internet, tienes que activar la casilla de público (Esto tiene un cierto peligro y además tendrás que abrir un puerto en tu router de acceso: Port Forwarding). Si te basta con los de tu red puedes negar el acceso publico desmarcando esa casilla:
Y por último nos pide un nombre descriptivo para identificar la regla:
Dando a intro habrás acabado y ya verás en las reglas de entrada a MQTT:
¡¡Pero aún no has acabado!!. Con esta regla permitimos que los nodos publiquen en Mosquitto, ya que el firewall les permitirá entrar. Pero Mosquitto deberá contactar en el exterior con los suscriptores y para eso tienes que autorizar una regla de salida, que está debajo de las reglas de entrada en la pantalla superior
No vamos a repetir el proceso aquí porque es exactamente igual que la regla de entrada y lo puedes hacer tú mismo. Pero al finalizar podrás conectar a tu broker MQTT desde el exterior o desde otro PC. Puedes hacer la prueba con el MQTT Explorer, por ejemplo.
Configurando la variable Path
La variable de sistema path contiene las ubicaciones de programas ejecutables, donde buscará los comandos que no encuentre en el directorio actual, de una sesión PowerShell o CMD. Por eso es buena política incluir el directorio de instalación de Mosquitto en el path para que podamos ejecutar comandos MQTT desde cualquier directorio en un momento dado.
Aunque esto no es estrictamente necesario, nos evitará tener que ir al directorio de Mosquitto cuando queramos ejecutar cualquier comando y es una práctica que conviene seguir. Para eso, de nuevo, escribimos path en la ventana de búsqueda de Windows:
Te saldrá el panel de abajo, a la izquierda. Elije la primera opción, Editar las Variables de entorno del sistema, y luego busca en la parte de variables del sistema el botón editar:
Cuando lo pinches veras:
Pincha el botón de Nuevo (Nuevo ruta que vamos a añadir) y si has hecho la instalación por efecto tendrás a mosquitto en:
“C:\Program Files\mosquitto”
tienes que escribir esa ruta en la línea en blanco que aparece y dar a aceptar, con lo que verás que ahora ya está incluido el camino de Mosquitto en tu path de sistema.
Por último, a lo largo de estos tutoriales vamos a ir configurando varios programas en la Raspberry Pi y Windows, tales como MQTT Broker (Listo) pero también otros programas que iremos viendo como Influx DB, Telegraf, Grafana y Nodered. Varios de ellos van a necesitar que abramos puertos en el firewall de Windows y quizás también, configurar variables de entorno para trabajar con ellos.
En Linux / Raspberry, los paquetes de instalación nos harán buena parte del trabajo, pero por defecto el Firewall de Linux, iptables, no viene activo por defecto por lo que podemos ahorrarnos esa parte del trabajo. Pero si utilizas Windows para acceder a los servidores que tienes en Raspberry o en Windows necesitaras abrir puertos. Lo mismo te ocurrirá si vas a poner los servidores en Raspberry y permites el acceso desde internet. Tendrás que configurar iptables (Probablemente con ufw) para evitar que te la líen.