El mejor home server con OpenMediaVault y Raspberry Pi (3)

En esta tercera entrega vamos a ver cómo acceder a nuestros servicios desde cualquier lugar configurando un proxy inverso con SSL y securizado con fail2ban

50

Vamos a seguir con nuestro home server en OpenMediaVault. En esta ocasión vamos a configurar un proxy inverso con nginx para poder acceder a la interfaz web de Transmission, y dar una dirección a nuestro servidor OpenVPN.

Instalación de los plugins de OpenMediaVault necesarios

Para empezar, vamos a instalar los plugins necesarios, que serían los siguientes:

  • openmediavault-nginx
  • openmediavault-letsencrypt
  • openmediavault-fail2ban

Si recordáis del capítulo anterior, esto se hace desde Sistema -> Plugins seleccionando los que deseemos y presionando instalar.

Configuracion de Nginx en OpenMediaVault

Vamos a configurar el servidor web Nginx para actuar como reverse proxy y así, poder acceder a nuestras interfaces web desde el exterior.

Ésto lo haremos desde Servicios -> Nginx. Utilizaremos hosts basados en nombre, lo que nos permitirá varios dominios o subdominios en el mismo puerto.

1. Configuración

En la primera pestaña, simplemente tendremos que habilitar el plugin. Para la opción Tamaño de hash dejaremos 32, que es la que viene por defecto.

2. Servidores

Aquí es dónde sucede la magia. Vamos a crear un servidor para cada uno de los servicios a los que queramos acceder desde el exterior y cada uno de ellos tendrá un dominio o subdominio distinto.

Yo he creado cuatro:

  • dominio.com -> Actualmente sin uso
  • files.domino.com -> Interfaz web de OpenMediaVault
  • vpn.dominio.com -> Acceso a OpenVPN
  • torrent.dominio.com -> Interfaz web de Transmission
Para esto, se asume que ya tenéis configurado vuestros dominios y subdominios apuntando a vuestra IP pública. O bien, utilizais un servicio como No-IP o Cloudflare + script.

Para crear un servidor, haremos clic en añadir y realizaremos las siguientes configuraciones:

Configuración Nginx OpenMediaVault 1
Configuración Nginx OpenMediaVault 3

Crearemos tantos servidores cómo deseemos. Yo he creado los mencionados anteriormente.

Por el momento dejaremos SSL deshabilitado puesto que todavía no hemos generado el certificado. Lo activaremos más adelante, una vez generado el certificado.

Ahora, en Opciones extra pondremos lo siguiente:

Vamos a ver que hacen estas opciones extra:

El primer bloque que vemos location /.well-known, desactiva la autenticación para ese directorio y establece su raiz a /var/www/html. Esto es usado por Let’s Encrypt para la creación y renovación de certificados.

El segundo bloque activa la Autenticación Pam, ese decir, para acceder tendremos que autenticarnos con un usuario del sistema que previamente habremos creado en OpenMediaVault, tal y como vimos en la parte 1 de esta guía.

A continuación, vemos la línea proxy_pass en que redirigimos la petición que recibimos en el puerto 80 o 443 al puerto local en que escucha el servicio en cuestión.

Generando certificados SSL con Let’s Encrypt

Una vez tenemos los servidores pasamos a configurar Let’s Encrypt para configurar nuestros certificados desde Servicios -> Let’s Encrypt.

1. Configuración

Antes de añadir nuestros certificados necesitaremos configurar Let’s Encrypt tal que así:

Configuración Let's Encrypt OpenMediaVault

Obviamente podéis poner el Email y Certificate name que queráis.

2. Domains

En la pestaña Domains es dónde configuraremos nuestros certificados. Yo he creado uno para mi dominio y subdominios y lo he hecho con las siguientes opciones:

Certificado Let's Encrypt OpenMedia Vault

Si como yo habéis usado subdominios podéis crear un certificado para todos ellos. Si tenéis varios dominios distintos deberéis crear un certificado para cada uno de ellos.

Fijaos en que Web root coincide con lo que hemos puesto anteriormente en nuestros servidores location /.well-known

Por último sólo quedaría hacer clic en Certificate -> Generate para generar nuestro certificado. Una vez generado lo tendremos disponible en Sistema -> Certificados -> SSL

Una vez generado el certificado debemos volver a la configuracion de servidores de Nginx, activar SSL para cada uno de ellos y seleccionar el certificado que acabamos de crear.

Previniendo ataques de fuerza bruta con Fail2Ban

Fail2ban es un software que analiza los ficheros log de nuestros servicios en busca de errores de autenticación y baneando las IPs que han intentado autenticarse erróneamente un número determinado de veces.

Fail2ban se basa en el concepto de Jails. Una Jail es un filtro el cual se aplica en un fichero log en busca de un patrón determinado para detectar intentos de acceso erróneos.

1. Configuración

La configuración no es demasiado complicada, debemos tener en cuenta lo siguiente:

Configuración fail2ban OpenMediaVault
  1. Ignorar IP: Aquí añadiremos nuestra IP local y nuestra VPN
  2. Num. Max. Reintentos: cuantos intentos erróneos se permiten antes del baneo
  3. Mail de destino: dónde recibiremos los avisos de baneo

Con esto configurado pasaremos a crear las Jails.

2. Jails

Como hemos dicho, una Jail es un filtro que se aplica a un archivo log para detectar intentos de acceso fallidos. Además de las jails que vienen preconfiguradas nosotros añadiremos unas personalizadas para Nginx.

Para hacerlo necesitamos acceso SSH al servidor puesto que necesitaremos crear un archivo para cada una de las Jails que vamos a crear.

Vamos a comenzar creando los filtros necesarios, para ello nos conectamos mediante SSH y creamos los siguientes archivos en el directorio /etc/fail2ban/filter.d/  con sudo nano nombre_archivo :

Lo siguiente sería crear las Jails en OpenMediaVault. Yo sólo voy a mostraros cómo crear una, el resto se crearían exactamente igual. Para ello, observad las siguientes imagenes:

OpenMediaVault custon Nginx fail2Ban jail
OpenMediaVault custon Nginx fail2Ban jail

Cómo vemos, las opciones se explican solas. Para los filtros NGinx tendremos en cuenta lo siguiente:

  • Nombre: pondremos el que queramos. A mi me gusta poner el mismo nombre que el filtro
  • Puerto: HTTP y HTTPS
  • Número máximo de reintentos: Los que queramos, 3 está bien
  • Tiempo de baneo: El que queramos, está en segundos. -1 significa infinito.
  • Filtro: El nombre del filtro a usar sin el .conf
  • Ruta del log: Archivo log en que se aplicará el filtro. Será access.log para todos los filtros Nginx excepto para nginx-http-auth que será error.log

Podéis crear tantos filtros como necesiteis y activarlos en OpenMediaVault cómo hemos visto. Una buena fuente para filtros es esta página, donde tenéis por ejemplo, un filtro para OpenVPN:

Y ésto es todo por esta entrega. En la siguiente, que será la última, nos ocuparemos de copias de seguridad y os enseñaré el hardware que estoy usando para este proyecto.

También podría gustarte
Comentarios

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More