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.
Y utilizo la dirección estática facilitada por el programa que en mi caso es correcta, dándole a "yes".
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.
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.
A continuación te pedirá que le confirmes el puerto que vas a utilizar por lo que si es correcto le damos al "yes".
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.
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.
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.
La instalación ya está completa. Reiniciamos el sistema.
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.
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.
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.
- 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.
$ sudo
apt-get install ffmpeg libmariadb3 libpq5 libmicrohttpd12
$ 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.
Al entrar al programa, este nos dirá que no hemos configurado ninguna cámara que añadamos una.
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)
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.
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.
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"
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 cuarta hace referencia al texto que se muestra junto a la imagen captada.
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.
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.
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.
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.
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.
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:
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