En el artículo anterior hicimos una migración del plugin Lockifi a su versión para OS X totalmente funcional. Al hacer la migración observamos que sería muy sencillo para cualquier usuario doméstico utilizar una Raspberry Pi y poder utilizarla como punto de acceso WiFi conectada al router, por lo que el WiFi del router lo deshabilitariamos. Nuestra Raspberry estaría ejecutando nuestro plugin y gestionando de forma sencillo cuando el punto de acceso debe estar arriba o abajo. Para llevar a cabo esta implementación, ¿Qué necesitamos?
Como vais a ver no será difícil poder implementar esto en cualquier entorno. Los requisitos son bastante obvios y son los siguientes:
Lo primero es convertir nuestra Raspberry en un punto de acceso WiFi. hay que tener en cuenta que utilizaremos la Raspberry como punto de acceso y haremos forwarding a los paquetes que lleguen por dicha interfaz. El forwarding se realizará por el cable Ethernet que el dispositivo tendrá enchufado. Este cable Ethernet estará conectado entre la Raspberry y el router de casa.
Lo primero es instalar, en caso de que sea necesario, el driver del adaptador Wireless. Esto dependerá del modelo de adaptador utilizado. Una vez que vemos que ejecutando ifconfig o iwconfig obtenemos información del adaptador podemos continuar. La instalación de hostapd y dnsmasq es importante. El primero será el que "levante" el punto de acceso, mientras que el segundo se encargará de proporcionar dirección IP a los clientes que se conecten a la WiFi mediante DHCP y proporcionar también un servidor DNS a los clientes conectados. Para instalarlos debemos ejecutar:
auto [interfaz]
iface [interfaz] inet static
address 10.0.0.1
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
gateway 10.0.0.1
Respecto al fichero /etc/hostapd/hostapd.conf debemos configurar lo siguiente:
interface=[interfaz WiFi]
ssid=freewifi
channel=[número canal]
driver=[driver de nuestro adaptador]
Como vais a ver no será difícil poder implementar esto en cualquier entorno. Los requisitos son bastante obvios y son los siguientes:
- Raspberry Pi.
- Adaptador WiFi. En la nueva Raspberry Pi 3 ya viene el adaptador integrado. Es vital que el adaptador utilizado sea compatible.
- Distribución Linux para la Raspberry. En esta implementación se ha utilizado una versión de Kali Linux para Raspberry, pero valdría, por ejemplo, con una Raspbian.
- Nuestro plugin Lockifi OS X creado en el anterior artículo. El plugin sufrirá una ligera modificación.
Lo primero es convertir nuestra Raspberry en un punto de acceso WiFi. hay que tener en cuenta que utilizaremos la Raspberry como punto de acceso y haremos forwarding a los paquetes que lleguen por dicha interfaz. El forwarding se realizará por el cable Ethernet que el dispositivo tendrá enchufado. Este cable Ethernet estará conectado entre la Raspberry y el router de casa.
Lo primero es instalar, en caso de que sea necesario, el driver del adaptador Wireless. Esto dependerá del modelo de adaptador utilizado. Una vez que vemos que ejecutando ifconfig o iwconfig obtenemos información del adaptador podemos continuar. La instalación de hostapd y dnsmasq es importante. El primero será el que "levante" el punto de acceso, mientras que el segundo se encargará de proporcionar dirección IP a los clientes que se conecten a la WiFi mediante DHCP y proporcionar también un servidor DNS a los clientes conectados. Para instalarlos debemos ejecutar:
- apt-get install dnsmasq.
- apt-get install hostapd.
auto [interfaz]
iface [interfaz] inet static
address 10.0.0.1
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
gateway 10.0.0.1
Respecto al fichero /etc/hostapd/hostapd.conf debemos configurar lo siguiente:
interface=[interfaz WiFi]
ssid=freewifi
channel=[número canal]
driver=[driver de nuestro adaptador]
Si queremos fortificar la red WiFi podremos configurar WPA2 en ese mismo fichero. Ahora crearemos un script denominado run.sh, el cual se encargará de ejecutar todo lo necesario para "levantar" el punto de acceso en el arranque y configurar el forwarding entre interfaces. Las instrucciones necesarias son las siguientes:
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
/etc/init.d/hostapd start
/etc/init.d/dnsmasq start
ruby [directorio ssh.rb]
Si escaneamos las redes WiFi con nuestro iPhone podremos observar una red denominada freewifi, tal y como se puede ver en la imagen.
Figura 1: Punto de acceso disponible desde la Raspberry Pi |
Paso 1: Modificando el programa Ruby
Ahora tenemos que modificar la aplicación que hicimos para gestionar la WiFi desde OS X. El cambio será sencillo, ya no tenemos que entrar por SSH al router. Solamente tendremos que indicar en nuestro código que cuando Latch esté cerrado se pare el servicio hostapd y cuando Latch esté abierto el servicio hostapd arranque. El algoritmo utilizado es realmente sencillo:
Mientras true
Compruebo estado de Latch
Si Latch está Abierto
Indico que está abierto
Levanto hostapd
Si no
Indico que se cerrará
Apago hostapd
Fin Si
Fin Mientras
Figura 2: Snippet de código del nuevo ssh.rb corriendo en Raspberry Pi |
Paso 2: Comprobar funcionalidad
Con todo preparado ejecutamos el script run.sh sobre la Raspberry, si no lo configuramos para arrancar en el arranque del sistema operativo. A los pocos segundo veremos que podemos conectarnos a la WiFi configurada. Abriremos Latch con el objetivo de que el programa escrito en Ruby verifique que el punto de acceso debe estar levantado.
Figura 3: Lockifi OS X Raspberry abierto |
Viendo la salida del programa se observa como nos indica "Open". Cuando pasen 20 segundos, esto es totalmente configurable, se volverá a preguntar si Latch está abierto o no. En el caso de que esté cerrado se ejecutará la instrucción service hostapd stop, con el objetivo de "tirar" la red WiFi creada con el servicio.
Figura 4: Comprobación del estado |
Ahora conectamos un dispositivo móvil o equipo a la red WiFi, pero decidimos cerrar el Latch. Cuando el programa despierte de la función sleep se encontrará con que Latch fue cerrado, por lo que nos mostrará el mensaje "No Open" y ejecutará la instrucción para parar el servicio de hostapd.
Figura 5: Deteniendo el servicio del punto de acceso WiFi |
Figura 6: WiFi apagada |
Es fácil entender el potencial que tiene esto. Otra opción sería integrar Latch en routers con OpenWRT con el que ya se hizo una primera integración. De esta forma no tendríamos que tener un punto de acceso aparte. Sea como sea, el potencial y la imaginación dependerá de vosotros. Cada vez hay más aplicaciones y usos de Latch en el mundo IoT y alineado en todo momento con la seguridad de nuestra información.
Figura 7: Artículo sobre la integración de Latch en OpenWRT |
Por último, ¿Cómo evitar el polling? Para evitar estar constantemente realizando consultas a Latch podríamos utilizar la técnica de esperar un paquete en un puerto concreto de nuestra Raspberry. En otras palabras, nuestra Raspberry podría tener a la escucha en la interfaz Ethernet un servicio en un puerto X. El objetivo es que cuando se reciba un paquete en dicho puerto se invoque la ejecución, de una sola iteración, de nuestro programa Ruby. Éste consultará el estado de Latch y en función del on/off se realizará una u otra operación. Para más información sobre este tipo de soluciones se puede consultar el artículo "Modo Paranoia: Port-Knocking y Latch para fortificar tus sistemas".
Si tienes más ideas sobre integraciones con Latch, no dudes en participar con ellas en la sección Latch de nuestra comunidad de Eleven Paths - donde también puedes poner Latch a tu cuenta-.
No hay comentarios:
Publicar un comentario