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:
- 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.
Paso 0: Empezando con hostapd y dnsmasq
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.
Una vez instalado ambas aplicaciones y sus dependencias debemos configurar una dirección
IP estática para el punto de acceso. Para este caso hemos utilizado la dirección IP
10.0.0.1. Esta configuración se lleva a cabo dentro de la
Raspberry en el fichero
/etc/network/interfaces. La configuración del fichero es la siguiente:
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 |
Cuando se detecte que
Latch está cerrado se nos mostrará un mensaje en el dispositivo móvil indicando que hubo un intento de acceso. Esto quiere decir que se ha comprobado el estado de
Latch y éste estaba cerrado. La acción a realizar es clara, detener el servicio. Esto puede ser similar a salir de casa y decidir apagar la
WiFi, para que solo pudiéramos conectarnos por cable. Al final es similar a minimizar el nivel de exposición de nuestra red
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.
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-.