66 - Vigila tu red con la Raspberry

66 - Vigila tu red con la Raspberry

Existen diferentes medios para proteger tu red y evitar intrusos. En este podcast te cuento como hacer que sea la Raspberry la que vigila tu red local.

1:25
-3:15

Tienes muchas opciones opciones para proteger tu red local del acceso de extraños. Además de establecer una contraseña lo suficientemente segura, puedes restringir el acceso por la dirección MAC. Sin embargo, ya que tienes la Raspberry Pi, puedes darle alguna utilidad adicional. Sea que la tienes en un cajón mordiendo el polvo, o bien, que la estás utilizando para tener tu propia nube privada, es posible darle mas vida. Tu Raspberry vigila tu red.

Con lo que vas a escuchar en los próximos minutos, no vas a poder impedir el acceso a tu red local. Sin embargo, puedes saber si entra alguien nuevo a tu red. También te voy a contar como puedes hacer para que cuando un conocido entra y sale de tu red.

En pocas palabras, después de escuchar este podcast y descargar los archivos necesarios vas a estar al tanto de quien entra y sale de tu red, y por ende de tu casa o de la oficina.

Vigilar tu red local con tu Raspberry

Vigila tu red con la Raspberry

Antes de meternos en faena

Noticias

Por supuesto, no podía dejar pasar una noticia como el lanzamiento de una nueva versión de Ubuntu. En este caso, se trata de una versión con soporte de 9 meses, pero que ya te puedan dar una idea de lo que será la próxima LTS, aunque todavía queda una versión de soporte corto.

Lo cierto, es que quiero entrar en detalles, porque quiero dejar para el podcast del próximo lunes, un repaso completo para esta nueva versión, así como el típico, que hacer nada mas instalar Ubuntu, pero con sorpresa…

Lo que he escrito esta semana

Esta semana he escrito dos artículos, el primero referente a como activar la tecla de composición en Ubuntu. Esta opción te va a resultar realmente interesante si utilizas con frecuencia caracteres como ©, ®, , y muchos mas. La cuestión es que es muy fácil de poner en uso, si lo conoces, y te va a ahorrar mucho, pero que mucho tiempo.

El segundo de los artículos es sobre como realizar una copia de seguridad de tu base de datos MariaDB de forma completamente desatendida o casi. Quiero decir, que no será completamente desatendida, por que en el caso de que se produzca cualquier error, te enviará un mensaje de Telegram, por ejemplo.

Al turrón…

Una vez que te he contado lo que nos ha traído de bueno esta semana, vamos al turrón…

¿Que necesitas para vigilar tu red local con tu Raspberry?

En realidad vas a necesitar muy poco para poder monitorizar tu red local y estar al tanto de lo que en ella sucede. En particular,

  • Tu Raspberry, esto, ya te lo podía imaginar.
  • Una red local que vigilar (esto también te lo podías imaginar)
  • Una cuenta de Telegram. En particular necesitarás crear un bot. Este bot, será el encargado de avisarte en caso de que suceda cualquier cosa en tu red local.

Telegram como servicio

Como he comentado en el punto anterior, vas a utilizar Telegram como medio para que te avise cada vez que se produzca un evento en tu red local. Así el script vigila tu red y Telegram se encarga de avisarte ante cualquier evento. Para ello es necesario que crees un bot. Esto es tan sencillo como seguir los pasos indicados en el tutorial sobre crear tu propio bot de Telegram.

De este primer paso es fundamental que te quedes con el TOKEN, que vamos a utilizar en los siguientes pasos.

Una vez creado el bot te Telegram, te recomiendo que crees un canal en Telegram. Este va a ser el lugar donde el bot te irá informando de lo que suceda.

Una vez creado el canal, añade a tu nuevo bot al canal, con permisos de administrador. Hecho esto, necesitarás saber el número de identificación del canal. Para ello, el primer paso es que escribas algo en tu canal, una frase o lo que consideres. Después, abre tu navegador y dirígete a https://api.telegram.org/bot<TOKEN>/getUpdates/, sustituyendo <TOKEN>, por el token obtenido en el apartado anterior.

Aquí encontrarás un json parecido al que muestro a continuación,

    ok": true,
    "result": [
        {
            "update_id": 123456789,
            "channel_post": {
                "message_id": 1,
                "chat": {
                    "id": -1234567890123,
                    "title": "Un canal",
                    "type": "channel"
                },
                "date": 1556000291,
                "text": "texto de ejemplo"
            }
        }
    ]
}

Con esto ya tienes el número del canal correspondiente a chat->id.

Un script que vigila tu red local

Para comprobar lo que sucede en tu red, puedes hacerlo con un sencillo script en Python que esté continuamente monitorizando lo que allí sucede. Otra opción es lanzar una tarea de cron que cada cierto tiempo ejecute el script. Yo finalmente me he decantado por utilizar un timer tal y como explico en el capítulo de Systemd Timer del tutorial sobre como trabajar con Systemd.

Antes que nada indicar que para este script estoy utilizando systemctl en modo de usuario. No necesitarás de esta manera ganar derechos de administrador para trabajar con tu sistema de vigilancia. Algo que es muy de agradecer. Por lo menos así lo veo yo.

Para esta operación tienes que crear dos archivos vigilante.service y vigilante.timer. El primero es el que se encargará de llamar al script en Python, mientras que el segundo es el que programa la ejecución cada 5 minutos. Aunque tu puedes indicar mas o menos tiempo.

Respecto al tiempo entre ejecuciones, creo que 5 minutos es mas que considerable, puesto que dependiendo de la red, puede tardar mas o menos en ejecutarse. Así por ejemplo, en una red con pocos dispositivos puede tardar apenas 10 segundos, mientras que si hay mas dispositivos puede tardar algo mas. Eso si, la primera ejecución, dado que te mandará un mensaje por dispositivo, puede tardar bastante mas. Así, en dos redes distintas que he probado, la primera ejecución duró apenas 20 segundos, con poco mas de 5 dispositivos, mientras que la otra red se llevó mas de 80 segundos, pero esta red seguro superaba los 30 dispositivos.

El script en Python

Todo funciona utilizando un sencillo script en Python, como he mencionado anteriormente. Este script utiliza un módulo llamado multiprocessing que permite llevar varias operaciones de forma concurrente a la vez.

En particular, la gracia de utilizar este módulo, es que te va a permitir explorar toda tu red, de forma rápida. Al final, este script, lo que hace es un ping a cada uno de los host de nuestra red.

Una vez hecho ping, utiliza arp para obtener la dirección MAC de cada una de las IP donde se ha obtenido respuesta. Los datos obtenidos los guarda en un archivo json, escribiendo cada 5 minutos en él. Además de guardar la dirección MAC también guarda dos datos,

  • La última vez que vió esa dirección MAC en nuestra red
  • Si el dispositivo con esa dirección MAC está o no está en nuestra red.

Nuevo dispositivo

Cada vez que durante el barrido encuentre un nuevo dispositivo lo guardará en el archivo json indicado anteriormente. De esta manera pasará a ser un dispositivo reconocido. Además te mandará un mensaje de Telegram indicándote que ha encontrado un nuevo dispositivo.

Dentro o fuera

Para determinar si un dispositivo, está dentro de nuestra red o fuera de ella, lo que realiza es una simple comprobación. Comprueba el tiempo que ha transcurrido desde que un dispositivo fue visto por última vez. Si este tiempo es superior a media hora, indicará que está fuera y te mandará un mensaje de Telegram. En otro caso no hará nada.

Por otro lado, si el dispositivo estaba fuera, y durante el barrido vuelve a encontrarlo, cambiará el estado a dentro y te mandará un mensaje, indicándote que el dispositivo a regresado.

Instalación

La instalación de este script que vigila tu red, es muy fácil. Tan solo tienes que hacer un clone del repositorio. Para ello, ejecuta la siguiente línea en un terminal,

cd ~
git clone https://github.com/atareao/vigilante.git

El siguiente paso es crear un archivo llamado keys.json con el siguiente contenido,

{"token": "<TOKEN>", "channel_id": "<CHANNEL_ID>"}

Que son los datos que habrás obtenido previamente. Con esto ya podrás ejecutar directamente el script para ver su funcionamiento. Para ello, tienes que ejecutar la siguiente línea,

python3 /home/pi/vigilante/vigilante.py

Por último, en el caso de que tu usuario no sea pi tendrás que modificar lel archivo vigilante.service para que la ruta sea la correcta, dado que yo he supuesto que lo tendrás en la ruta /home/pi/vigilante/. Esto es sencillo.

Concluidos estos pasos, tan solo tienes que ejecutar el script install_vigilante.sh,

./install_vigilante.sh

Una vez instalado, puedes utilizar los scripts start.sh y stop.sh para iniciar y detener la vigilancia.

Observaciones

Indicar que el proceso de instalación, de este sistema que vigila tu red, lo que hace es, por un lado crear la ruta ~/.config/systemd/user y por otro lado, copiar los archivo vigilante.service y vigilante.timer en ese directorio.

Mientras que los archivos start.sh y stop.sh lo que hacen es ejecutar las siguientes instrucciones,

systemctl --user start vigilante.timer

y

systemctl --user stop vigilante.timer

He utilizado estos scripts para que te resulte mas cómodo. Esto lo encontrarás especialmente útil para el caso de que no estés familiarizado con el Systemd.

Conclusiones

Como ves es relativamente sencillo. Con unas pocas líneas de código te has construido tu propio vigilante. Un sistema sencillo que vigila tu red. Ahora solo tienes que ajustar algunos parámetros para que el resultado sea óptimo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *