miércoles, 1 de septiembre de 2021

Sistema de Seguridad con una VPN y MotionEye



Sistema de Seguridad con un VPN y MotionEye

Cuando nos vamos de casa es interesante contar con un sistema de videovigilancia de nuestro hogar, que nos avise si entra algún intruso y nos permita ver lo que ocurre dentro. Si además estamos de vacaciones y necesitamos conectarnos a la red wifi de un hotel o de cualquier sitio público es muy útil conectarnos a través de nuestra propia vpn que nos garantice nuestra privacidad al navegar por internet a través de una conexión privada en el que los datos viajan codificados y utilizando el servidor de nuestra casa.


Instalación y Configuración de una VPN.


Requisitos previos:


IMPORTANTE: Lo primero de todo es conseguir un nombre de Dominio que apunte hasta nuestro servidor que es la rapsberry pi. Ya que normalmente nuestra dirección ip pública no suele ser fija sino que suele cambiar con el tiempo (DNS Dinámica) necesitamos que la VPN sepa donde encontrarnos en la red. Para conseguir y configurar una, sigue este enlace.

También necesitaremos una dirección de red interna fija de la rapsberry ya que sino el router le ira asignando una cada vez, lo cual no nos interesa. En este enlace te pongo como poner una ip fija a la Raspberry Pi.

Una vez hecho lo anterior comencemos por instalar la red privada virtual. En nuestra Raspberry pi usaremos el programa pivpn. Podemos ver todas las opciones de instalación en la siguiente dirección web.

Tal como pone en las instrucciones de instalación abrimos una terminal del sistema y tecleamos la siguiente instrucción:


$ curl -L https://install.pivpn.io | bash


Esperamos a que se instalen los paquetes necesarios. Cuando el proceso termine, nos saldrá la pantalla de bienvenida en la que se nos informa de que podremos instalar OpenVPN o Wireguard para acceder a nuestra red privada virtual. El proceso de instalación es muy similar en ambos casos. Yo voy a utilizar Wireguard. En la pantalla que nos sale pulsamos Ok.


Pantalla de Bienvenida de Pivpn



En la siguiente pantalla el programa nos informa que tenemos que utilizar una IP estática. En los requisitos previos ya puse el enlace de como configurar una IP interna fija para la Raspberry Pi en nuestra red, lo que es una cosa sencilla. Yo ya tengo especificado una dirección IP estática (192.168.1.200) de la rapsberry en mi red con lo que me salto este paso.

pivpn necesita una dirección ip estática


Pantalla mostrando direcciones IP estáticas


Y utilizo la dirección estática facilitada por el programa  que en mi caso es correcta, dándole a "yes".


direcciones estáticas de la raspberry pi en pivpn


Necesitarás también seleccionar un usuario local. Si has creado un usuario diferente del que viene por defecto en la rapsberry, el usuario pi, aquí podrás seleccionarlo.

Seleccionar usuarios locales en pivpn


En la siguiente pantalla nos pregunta por el tipo de VPN que queremos instalar. Yo he utilizado Wireguard aunque como ya comente antes puedes optar por OpenVPN ya que los pasos de instalación son muy similares. Procedemos a la instalación.

pantalla de selección de Wireguard o OpenVPN


Se instala Wireguard y el programa nos pregunta que puerto queremos utilizar. Probablemente es una buena idea dejar el puerto predeterminado por la aplicación (el 51820) pero si quieres cambiarlo puedes especificarlo en esta pantalla. NOTA: el puerto 51820 es un puerto UDP.  

Para que el VPN funcione es muy IMPORTANTE que abras el puerto que hayas elegido en el router y lo redirijas hacia la dirección IP fija que hayas seleccionado para la PI. En cada router se hace de una forma pero normalmente hay que ir al menu del router y buscar en el menu de "puertos", abrir el puerto seleccionado con el protocolo UDP y redirigirlo a la dirección fija interna de la Raspberry. 

A continuación te pedirá que le confirmes el puerto que vas a utilizar por lo que si es correcto le damos al "yes".


Puerto a utilizar por wireguard


Siguiente pregunta. ¿Que proveedor de DNS utilizar? Como lo vamos a utilizar para conectarnos a la Pi desde fuera de casa escoge uno cualquiera, que no sea CUSTOM. Por ejemplo CLOUDFLARE no funciona mal.

selección de proveedor de DNS en pivpn


Ahora nos pide que especifiquemos la dirección de pública de nuestra Raspberry para poder conectarse con ella desde cualquier punto de la WEB. Lo normal es que nuestro proveedor de internet no nos proporcione una IP estática pública, lo normal es que está cambie con el tiempo (IP Dínámica). Al principio del manual ya expliqué como conseguir un nombre de dominio que apunte a nuestro servidor con lo que aquí hay que colocar el que hayas conseguido. Lo primero seleccionamos que queremos utilizar una DNS pública.

Public IP o DNS


En la siguiente pantalla introducimos la dirección de nuestra dns dinámica que hayamos consguido y la confirmamos.


teclear el nombre de nuestra DNS pública

En el siguiente paso se generarán las claves para nuestro servidor VPN. Para finalizar el programa nos dirá si queremos que se seleccionen las actualizaciones desatendidas, lo cual es una gran idea. 


Instalaciones desatendidas.


La instalación ya está completa. Reiniciamos el sistema.


pantalla de instalación completa.


Ahora que ya tenemos instalado correctamente Wireguard vamos a crearnos un perfil para poder utilizarlo. Para crear nuestro perfil vamos a usar de nuevo el script de PiVPN.

Ejecutaremos el siguiente comando

$ sudo pivpn add

Todo lo que vamos a necesitar es teclear un nombre para el perfil que estamos creando.  Por ejemplo yo llamaré al mio "MevoyaReir"

pi@raspberrypi:~ $ sudo pivpn add
Enter a Name for the Client: MevoyaReir
::: Client Keys generated
::: Client config generated
::: Updated server config
::: WireGuard reloaded
======================================================================
::: Done! MevoyaReir.conf successfully created!
::: MevoyaReir.conf was copied to /home/pi/configs for easy transfer.
::: Please use this profile only on one device and create additional
::: profiles for other devices. You can also use pivpn -qr
::: to generate a QR Code you can scan with the mobile app.
======================================================================

Una vez que hemos creado el perfil, este está guardado dentro del directorio que se nos especifica. Si has seguido los pasos anteriores y has usado el usuario pi, encontrarás los archivos en el siguiente directorio:  /home/pi/configs.

Podemos usar esos archivos para configurar el cliente de Wireguard. Sin embargo existe un método más cómodo para hacerlo, que es a través de un código QR.  

Para generar un código QR para nuestro perfil , necesitaremos ejecutar el siguiente comando.  Es importante que uses el nombre de perfil que hayas establecido. En mi caso el comando quedaría de la siguiente forma:

$ pivpn -qr MevoyaReir

Esta instrucción generará un código qr en la pantalla. 


logo de wireguard y código QR


Este código QR lo utilizaremos para configurar fácilmente el cliente de Wireguard ya se en un móvil Android o IOS. 

Puedes encontrar la aplicación cliente de Wireguard para IOS en la Apple App Store y para Android en la Google Play Store.

Configurar esta aplicación cliente es muy fácil ya que solo hay que seleccionar configurar el programa cliente a través del código QR, escanear el código que hemos generado antes y ya está.

Para ver si todo funciona, en el móvil desconectamos la wifi, para que no se conecte a nuestra red interna, abrimos Wireguard y seleccionamos nuestro perfil. Si todo ha ido bien podremos navegar por internet pero utilizando como servidor nuestra raspberry pi o también podemos intentar conectarnos por ssh a la dirección de la Pi. Si lo hemos conseguido ya tenemos el tunel VPN en funcionamiento.


Instalación de MotionEye.


¿Que es MotionEye? Pues es una interfaz web para un programa llamado Motion y que sirve para crear un sistema de videovigilancia de forma sencilla. No solo nos va a permitir controlar lo que pasa en nuestra casa, sino que en caso de que detecte movimiento nos puede avisar enviándonos un correo electrónico, haciendo videos o fotografías de lo que detecte la cámara que podemos almacenar en local o en una cuenta en la nube o ejecutar incluso algún script.

Para que la cosa funcione lógicamente tenemos que tener una raspberry pi y una cámara. Yo tengo esta cámara interna conectada a la una raspberry pi 4 que funciona muy bien y es bastante económica. (Siempre conectarla y desconectarla con la Pi apagada, lo digo por experiencia)

Imagen de camara para raspberry pi 4




Antes de comenzar.

  • Todos los comandos que pondremos a continuación requieren ser root, así que usa sudo antes de cada comando o bien conviértete momentáneamente en root usando sudo -i
  • Si como en mi caso usas un módulo de cámara para la Raspberry, es decir usas una cámara interna que no sea USB, asegúrate de que está activada en la aplicación de configuración. Ejecuta en un terminal sudo raspi-config y en la opción 3 (Interface Option) activa la opción 1 que corresponde al módulo de la cámara.
activar cámara en raspi-config


  • A la fecha en la que estoy escribiendo esto, MotionEye está escrito en python 2 (ojo con esto) con lo que necesitarás al menos la versión 2.7.

Comenzamos.

    1.- Instala ffmpeg y otras dependencias de Motion.

$ sudo apt-get install ffmpeg libmariadb3 libpq5 libmicrohttpd12

    2.- Instala Motion.

$ sudo wget https://github.com/Motion-Project/motion/releases/download/release-4.2.2/pi_buster_motion_4.2.2-1_armhf.deb
$ sudo dpkg -i pi_buster_motion_4.2.2-1_armhf.deb

    3.- Instala las dependencias desde los repositorios.

$ sudo apt-get install python-pip python-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libz-dev

    4.- Instala MotionEye.

$ sudo pip install motioneye

IMPORTANTE. Usamos pip y no pip3 porque MotionEye funciona con la versión 2.7 de python. 

5.- Preparamos el directorio de configuración:

$ sudo mkdir -p /etc/motioneye
$ sudo cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf


6.- Preparamos el directorio para los videos y capturas.

$ sudo mkdir -p /var/lib/motioneye


7.- Creamos un script para que el programa se inicie cuando arranque la Pi y se nos inicie el servidor de MotionEye.

$ sudo cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable motioneye
$ sudo systemctl start motioneye

Reiniciamos la Raspberry.


8.- Para actualizar a una versión más reciente de MotionEye, solo hay que teclear:

$ sudo pip install motioneye --upgrade
$ sudo systemctl restart motioneye


Accediendo a la pantalla de inicio.


Una vez que ya tenemos todo instalado para poder acceder a MotionEye, el servidor del programa debería estar ejecutándose en la Pi y escuchando las peticiones que se hagan en el puerto 8765. Para acceder ve a tu navegador y teclea la siguiente dirección:

http://[tu_ip]:8765/

Remplazando [tu_ip] con la dirección fija que configuramos al principio para la Raspberry Pi en nuestra red. Al comenzar no hay configurada ninguna contraseña, ni usuario con lo que usamos como nombre de usuario "admin" y dejamos la contraseña vacía.


Pantalla de login de Motion


Al entrar al programa, este nos dirá que no hemos configurado ninguna cámara que añadamos una. 

Página principal de Motion


Aquí el modelo a elegir dependerá si tu cámara es usb, o como en mi caso un módulo interno. (mmal service 16.1)

Añadir una camara a Motion


y ya está, tenemos la cámara agregada y funcionando. Nos queda configurar las opciones y ver como conectarnos desde afuera.


Opciones de configuración de Motion


Opciones de Configuración.

Conectarnos desde fuera de donde tenemos instalada la o las cámaras (porque se pueden tener varias configuradas) es muy sencillo. Yo lo voy a ver desde el internet del móvil que suele ser lo que tenemos más a mano. Para ello abro la aplicación de Wireguard (o OpenVpn depende de cual hayas instalado) y le damos a conectar. Es importante que antes hayamos abierto el puerto UDP en nuestro router y este redirigido a la dirección estática de la Raspberry.

Si todo esta correcto el programa nos dirá que la conexión se ha realizado correctamente. Y es como si estuviéramos conectados dentro de nuestra red. Solo tenemos que acceder desde un navegador a la dirección de la pi y poner el puerto que hayamos elegido, tal como hicimos antes.

La primera opción que tenemos es "General Settings" o Configuración General. 

Opciones generales de configuración


Como siempre que tenemos algo asomado a internet es buena idea es cambiar tanto el nombre del administrador ("admin username") como su contraseña (Admin Password) y también el nombre y la contraseña del usuario normal ("Surveillance Username") que puede usar la aplicación y su contraseña ("Surveillance Password").


En segundo lugar tenemos las opciones de la cámara "Video Device"

Opciones de video


No hay mucho que comentar sobres estas opciones. Puedes modificar el nombre de la cámara, la resolución el número de frames que se capturan por segundo o como en mi caso girar la imagen 180 grados ya que si no lo veía al revés por la forma que tengo conectada la cámara.

La tercera opción se refiere a las opciones para guardar los archivos de imagen o video, básicamente el directorio y el porcentaje de disco usado.

File Storage Options.


La cuarta hace referencia al texto que se muestra junto a la imagen captada. 

Text Overlay Options

Según lo tengo a la izquierda abajo aparece el nombre de la cámara, abajo a la derecha la hora y el tamaño con el que queremos que se vea.

La quinta opción hace referencia a las propiedades del streaming del video de nuestra cámara.

video streaming option


Entre otras opciones encontramos: la tasa de frames del video en streaming (a más frames mejor calidad de imagen pero más consumo de recursos), la calidad de los videos etc.

La opción sexta se refiere a las características de las capturas de imágenes que hagamos con nuestra cámara. El programa se puede configurar para que se hagan automáticamente al detectar movimiento o nosotros mismos desde la interfaz podemos realizarlas.

Still Image Options.


La primera fila sirve para configurar el nombre del archivo con el que se guardarán las capturas.

En la segunda podemos elegir la calidad de la imagen. Seguidamente podemos configurar el modo en el que se realizarán las capturas. En mi caso está configurado para que estas se realicen cuando se detecte movimiento. 

Podemos establecer con "Preserve Picture" el tiempo de almacenamiento en el disco duro. En mi caso no se borran si quiero borrarlas lo tengo que hacer manualmente.

Finalmente también tengo puesto que pueda hacer capturas manuales a través de la interfaz de la aplicación.


La Séptima es muy parecida a la anterior solo que es para establecer las características de los videos que grabemos. 

Opciones de video de Motion

Solamente comento que en mi configuración el tamaño máximo del video lo tengo en cero segundos porque me interesa que cuando se detecte movimiento no se grabe video me basta con que haga unas capturas de imágenes y me mande un email como veremos luego.


La octava opción es la más interesante. Hace referencia a los parámetros que utiliza el programa para determinar cuando existe movimiento. Para que te hagas una idea, Motion va haciendo continuas capturas de pantalla, una detrás de la otra que va analizando. Si de un frame a otro hay una variación significativa en los pixeles que componen la imagen es de suponer que hay movimiento. Imagina una pared blanca. Si la tenemos enfocada de frente todos los pixeles de la imagen son blancos. Si en ese momento pasa alguien corriendo en ese fotograma ya no todos los pixeles serán blancos, algunos corresponderán a la persona que pasa, con lo que el programa es como detecta el movimiento.

Motion Detection Option


Así es como yo lo tengo configurado, más o menos en automático. Lo suyo es que lo pruebes y vayas ajustando los parámetros poco a poco para que la detección no sea demasiado sensible y te detecte falsos positivos pero tampoco tan lasa que no detecte ninguno.


La novena opción es también muy interesante. Hace referencia a que queremos que el programa haga si detecta movimiento. A mi lo que me interesa es que me envíe un correo electrónico con unas pocas imágenes de lo que esta pasando, pero también puedes establecer que se ejecuten comandos para por ejemplo encender las luces de la casa si detecta movimiento o hacer sonar una alarma o lo que se te ocurra.

Motion Notifications Options


En email addresses ponemos el correo al que queremos que nos manden el mensaje, y en smtp account el correo desde que lo enviamos. Yo aquí utilizo un correo de gmail que tengo para estos menesteres. Para que funcione con gmail hay que desactivar dentro de las opciones del correo de gmail esta opción y dejarla como se ve en la imagen:

Acceso de terceros a la cuenta de gmail desactivada

 ya que si la activas gmail no te dejará enviar el correo desde la aplicación por cuestiones de seguridad.

Y la ultima opción es cuando queremos que funcione el programa para lo cual tenemos una pequeña agenda por si queremos que funciones solo determinados dias. 

Y con esto ya lo tendriamos todo. Tenemos una conexión vpn protegida que nos sirve para acceder a nuestra cámara desde cualquier lugar  y ver lo que ocurre donde la hayamos puesto. Además no tenemos que estar pendientes de estar conectándonos continuamente ya que en caso de que detecte un intruso nos avisará.


No hay comentarios:

Publicar un comentario