NAS_Raspberry_Pi

Crea tu propia Nube Barata con Raspberry Pi – Nextcloud (Parte 3)

Añadir Seguridad y crear accesos externos a nuestra Raspberry Pi

Acceso externo y Seguridad Raspberry Pi. En este articulo le daremos prioridad a la parte de la seguridad perimetral (instalaremos software para intentar darle seguridad a esta parte importante también). Lo primero tendremos que actualizar la Raspberry Pi.

update_upgrade

Configurar Fail2ban

Configuraremos fail2ban para prevenir los ataques de fuerza bruta mediante su sistema de detección y bloqueo. Instalar fail2ban es muy sencillo, utilizaremos el siguiente comando.

fail2ban

Una vez instalado tendremos que modificar el archivo de configuración de fail2ban que esta en la siguiente ruta (de nuevo lo editaremos utilizando nano).

nano_jail

En en archivo podemos modificar el tiempo que se baneara por IP al usuario que a estado intentando entrar (bantime), que lo aumentare a media hora. La segunda opción (findtime), bloqueara esa IP durante diez minutos y la tercera (maxretry) es donde pondremos cuantos intentos de login permitiremos antes de hacer el bloqueo.

Si el usuario atacante ha fallado el inicio de sesión cinco veces (maxretry) en un periodo de diez minutos (findtime) se le bloqueara la IP durante diez miutos (bantime) que lo he aumentado a media hora aunque lo podriamos aumentar tranquilamente a una hora entera.

conf_fail2ban

Darle seguridad a la conexión SSH

SSH seguramente sea la conexión mas utilizada para conectarnos con nuestra Raspberry Pi remotamente. Personalmente lo utilizo bastante con el software Putty para conectarme desde el equipo Windows. SSH por defecto utiliza el puerto 22 nosotros esto deberiamos de modificarlo y utilizar uno que este libre. Para hacerlo nos dirigiremos a la siguiente ruta y modificar el puerto.

ssh
cambiar_puerto_ssh

También seria una buena medida bloquear el acceso de root a través de SSH. Esto se hace para no permitir que el usuario root entre a la maquina sin necesidad de contraseña. Para ello modificaremos la linea de PermitRootLogin. Deberiamos de dejarla en no. Para terminar, reiniciaremos el servicio y nos conectaremos de nuevo (con el puerto 2292) para ver efectivamente si a realizado los cambios.

reiniciar_ssh

Podríamos crear claves para la autenticación (publica y privada) pero en este articulo no entrare en ese tema. Lo dejaremos en no permitir que el usuario root haga el login sin que se le pida la contraseña y cambiaremos el puerto el 22 por el 2292.

Crear un Servidor VPN con OpenVPN

Tener un servidor VPN puede ser muy interesante para comunicarnos con la Raspberry Pi mediante un túnel privado y cifrado. Podremos conectarnos a ella desde el exterior mediante el mencionado túnel y no tener que conectarnos desde cualquier red disponible como puede ser una red Wi-Fi de un bar por ejemplo. Aun así, si te gustaría saber mas sobre las VPNs puedes ver este articulo que lo explica muy bien.

Hay varias soluciones para crear una VPN de código abierto. Para este proyecto utilizaremos OpenVPN ya que siempre lo he utilizado y me ha ido genial aunque tengo que probar WireGuard tambien a ver que tal. Utilizaremos PiVPN para facilitar la instalación del servidor VPN. Lo primero tenemos que instalar curl y PiVPN.

La instalación es muy intuitiva, no he puesto todos los pantallazos por eso, pero tenemos que tener en cuenta que podemos utilizar nuestra IP pública o crear un DNS, esto lo veremos más adelante ya que configuraremos el DNS con no-ip.

Una vez instalado todo correctamente reiniciaremos la Raspberry Pi y empezaremos con la configuración del perfil para los usuarios que puedan conectarse al servidor.

A lo largo de la instalación nos pedirá que puerto utilizara nuestra conexión (tendremos que abrir ese puerto en el router), si utilizaremos un proveedor de DNS (lo dejare en Custom) y en realidad no hay que hacer mucho mas pivpn se encarga de hacer el resto de la instalación.

Utilizare para esta prueba la conexión desde mi móvil y para eso he copiado el archivo de configuración a a la carpeta compartida que tenemos creada y la he descargado al ordenador para enviarlo al móvil. Podríamos utilizar diferentes métodos para transmitir archivos pero ya que tenemos una carpeta compartida pues la he aprovechado. Lo copiamos con un simple cp y le damos los permisos necesarios (si no no podrás descargarlo).

Una vez descargado lo copiare al móvil para comprobar si la configuración es correcta. En el móvil utilizaremos la APP de OpenVPN para cargar el archivo. Esta APP podéis descargarla a través de PlayStore. Es muy sencillo el procedimiento se le da al + y buscamos el archivo transferido desde el PC. Tendremos que meter las credenciales utilizadas en la instalación y ya estaríamos conectados a través de la VPN. Arriba a la derecha veremos VPN si realmente estamos conectado y hemos hecho bien la operación.

Una vez creada la conexión podríamos navegar sin ningún tipo de problema (bueno la velocidad según en que caso). En este caso le he hecho un test de velocidad y aquí os comparto el resultado, se puede observar que es una conexión que deja mucho que desear pero como se de que es así lo voy a dejar.

Lo que no he mencionado y es muy importante ya que si no no podremos acceder es abrir el puerto que necesitemos (el que asignemos nosotros mismos 51820 UDP es por defecto pero podemos poner el que queramos siempre que sea UDP el protocolo). Esto en el fondo es muy simple de hacer, todos los routers deberían de tener la opción de abrir puertos y crear redirecciones, tendríamos que abrir el puerto y decirle la IP del dispositivo donde se alojara la VPN. Sobre este tema hay cantidad de información en internet así que os dejo esta URL por si queréis aprender mas.

Ya nos podríamos copiar el archivo .ovpn al ordenador que necesitemos.

Activar no-ip para obtener un nombre para nuestro dominio DNS

Para obtener un nombre personalizado podéis dirigiros a la web de no-ip (hay muchísimas más opciones), crear una cuenta y utilizar los nombres gratuitos que nos ofrecen. Esto se hace porque la IP pública que tenemos es dinámica y va cambiando cada cierto tiempo. Utilizando el DNS se le asigna un nombre a esa IP y entonces no te tienes que preocupar de saber cual es tu IP. Saber el nombre utilizado en no-ip nos valdría para acceder a nuestra Raspberry Pi desde el exterior (fuera de la red local) para este ejemplo he creado froga-nextcloud.ddns.net.

 La configuración es muy fácil tendrás que poner que servicio vas a utilizar (cloud), que router tenemos y tener el puerto abierto (80 o el 443).

Una vez hecha la configuración ya podremos ver el estado que esta activo.

La única pega que tiene es que los nombres de host gratuitos vencen en 30 días y tendrás que acordarte de ir a la web y renovarlo.. Si no siempre esta la opción de pago y obtener un DNS mejorado donde dispondremos de 5 nombres y 1 certificado SSL.

Acceder a nuestra Raspberry mediante DNS

La primera vez que accedemos a la Raspberry Pi con el nombre de DNS que hemos creado nos saldrá el siguiente error o alerta avisándonos que estamos accediendo a través de un dominio del que no se confía.

Para poder quitar el Acceso a través de un dominio del que no se confía tendremos que ir al archivo de configuración llamado config.php y en principio debería de estar en /var/www/nextcloud/config/config.php, una vez aquí tendremos que añadir el nombre creado en no-ip. Hay que tener mucho cuidado con este archivo ya que nos podremos quedar sin acceso a nuestra Raspberry Pi totalmente. En este caso he borrado todo el array y solo he dejado el nombre de DNS que he creado, con esto conseguimos que solo podamos acceder mediante ese nombre. Una vez añadido correctamente podemos acceder acceder sin problema.

La X No es seguro es una alerta de que no tenemos un certificado SSL pero no hay problema, mas adelante lo quitaremos. También mejoraremos la URL para que no se vea toda la extensión y que se vea simplemente la URL limpia “Pretty“.

Crear Certificado SSL con Let´s Encrypt

Cuando accedemos por el nombre de DNS que hemos creado con no-ip nos saldra el siguiente mensaje de advertencia. Esto no quiere decir que no podamos acceder ni mucho menos, nos esta advirtiendo que el sitio web al que estamos accediendo no tiene un certificado SSL y que por lo tanto la web a la que estamos intentando acceder no es segura. Si pulsamos en el botón de Avanzado… se nos desplegara otra alerta y aquí tendremos que Aceptar el riesgo y continuar si queremos acceder.

Como siempre hay varias opciones de crear un certificado, para este caso utilizaremos letsencrypt ya que es muy fácil de añadirlo desde la misma URL de Nextcloud (nextcloudpi.local:4443). En el menú que tenemos en el margen izquierdo y dentro de las opciones de NETWORKING tendremos que entrar en letsencrypt y activar el servicio añadiendo el nombre de dominio adicional y un email.

En la siguiente imagen se observa como hemos añadido el nombre de dominio y el email (aunque lo haya borrado). Una vez hecho esto y pulsando en el botón Apply ya se instalara el certificado y podremos acceder a el sin que nos salga la alerta anterior.

Si pulsamos en el botón que hay en la parte izquierda de la URL se nos desplegara un pequeño menú con diferentes opciones, en este tendremos que hacer clic encima de La conexión segura y aquí podremos comprobar que ahora nuestra conexión es segura con el certificado de Let´s Encrypt.

Pretty URL

Ya hemos mencionado antes que le daríamos una bonita apariencia (o más bonita de la que tiene) de la que tiene y esto lo haremos con nc-prettyURL desde el panel de control de nexcloud. La URL que tenemos antes de activarlo es la siguiente. Observamos que se ve la extensión del index (.php) y no es muy agradable tenerlo así. 

Para eliminar esto y que nuestra URL sea mucho mas legible y vistosa tendremos que activar la opción de nc-prettyURL como se observa en la siguiente imagen.

Una vez activada y aplicada la opción nos dirigimos de nuevo a la URL y recargamos la pagina. Probablemente esto no funcione por tema de caches etc así que “lo mas efectivo” es irte a otro navegador y abrir tu URL para el NextCloud.

Ahora nuestra URL debería de tener el aspecto pretty que le dicen y no debería de aparecer el index.php.

Conclusión

Hasta aquí la parte 3 de esta serie de capítulos sobre crear una Raspberry Pi como nube privada. Creo que si los hiciera mas largos no seria muy agradable de leer así que dejare algunas cosas mas que añadiremos para algún otro capitulo. No se si serán cuatro o cinco los capítulos en total pero como me encuentro muy agusto haciéndolos no me importa demasiado ya que hay varias cosillas mas por añadir. Pues nada un saludo a todos y espero que os esten gustando.

Deja una respuesta

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