Configuración de Nginx Proxy Manager (NPM)
3. Nginx Proxy Manager (NPM)
En este capítulo vamos a configurar el acceso externo a los servicios (Lightning Terminal, LNbits, Cashu y Orchard) usando Nginx Proxy Manager, que actúa como proxy inverso y gestor de certificados SSL.
Acceso inicial
El acceso inicial al contenedor de Nginx Proxy Manager (NPM) se realiza a través de HTTP y utilizando el puerto 81. En nuestro ejemplo, accederemos mediante la URL http://npm.cashu4community.xyz:81. En el siguiente paso, modificaremos esta configuración para evitar riesgos de seguridad.
El contenedor ya está preconfigurado, así que no se requiere la creación de un usuario en el primer inicio.
Imagen 1: Página de Login Nginx Proxy manager.
- Usuario
changeme@domain.com - Contraseña
ch4ng3m3*- - Presionamos
Entero hacemos clic enSign in
Tras iniciar sesión, accedemos al dashboard del servicio NPM.
Imagen 2: Dashboard del NPM.
- Entramos al panel de Proxy Host.
3.1 Creando un proxy host para NPM
Como hemos podido observar, el acceso a NPM se hace vía HTTP (protocolo inseguro) y por el puerto 81, lo que deja nuestro servicio vulnerable a ataques. Para solucionarlo, crearemos un Proxy Host para el propio NPM y así poder operar sobre HTTPS.
Imagen 3: Añadir un Proxy Host.
- Añadimos un Proxy Host.
Imagen 4: Opciones de Proxy Host.
Domain Namesen este campo se introduce el nombre de dominio que tendrá la aplicación de cara a internet. Como estamos configurando el acceso a NPM usaremos el dominionpm.cashu4community.xyz.Schemeel esquema es el protocolo usado por NPM para comunicarse con la aplicación que está corriendo en el contenedor puede ser http o https. Para NPM lo dejamos en http.Forward Hostname / IPno es más que el nombre del host, como se trata de un contenedor de docker lo mejor será usar el nombre del servicio, como estamos configurando NPM usaremos npm. Podemos ver la lista completa de los servicios al final de la sección Primeros Pasos.Forward Portes el puerto por el que corre la aplicación internamente en el contenedor de Docker, NPM usa el puerto 81. La lista de puertos la encontraremos al final de este capítulo.Optionshabilitamos todas las opciones para mejorar la seguridad y funcionalidad de la aplicación.
Imagen 5: Opciones de Proxy Host opciones SSL.
- Nos ubicamos en la Pestaña SSL.
- Seleccionamos en el menú desplegable la opción
Request a new Certificate. - Habilitamos las opciones
Force SSL,HTTP/2 SupportyHSTS Enabled. - Guardamos los cambios.
Tras guardar los cambios podemos ver el registro de NPM en el panel de la sección Proxy Host.
Imagen 6: Registro del servicio NPM en el panel de Proxy Host.
Imagen 7: Proxy Host correctamente configurado.
Con NPM ya configurado para acceder vía HTTPS de forma segura, cerramos sesión y volvemos a entrar para seguir con las demás configuraciones.
Imagen 8: Cierre de sesión Menú de usuario.
- Cerramos sesión.
3.2 Listado de servicios a configurar en NPM
La tabla siguiente muestra los servicios a configurar en NPM, así como todos los parámetros necesarios para configurarlos. Usaremos el dominio cashu4community.xyz como referencia, cada uno debe adaptarlo a su propio dominio.
| Nombre de Dominio | Esquema | Servicio Docker | Puerto |
|---|---|---|---|
| npm.cashu4community.xyz | http | npm | 81 |
| lit.cashu4community.xyz | https | lit | 8443 |
| lnbits.cashu4community.xyz | http | lnbits | 5000 |
| mint.cashu4community.xyz | http | cashu | 3336 |
| orchard.cashu4community.xyz | http | orchard | 3326 |
Una vez que registremos todos los Proxy Host nos quedaría algo como esto:
Imagen 9: Listado de los servicios de la Infraestructura en NPM.
3.3 Actualizando los datos de la cuenta de acceso
Como mencionamos al principio de este capítulo, el servicio de NPM viene preconfigurado con una cuenta de usuario genérica. Para evitar accesos no deseados en nuestra infraestructura, es obligatorio cambiar esta cuenta. Para ello, accedemos al menú de usuario.
Imagen 10: Menú de usuario Edición del Perfil.
- Hacemos clic en
Edit Profilepara cambiar la dirección de correo que usamos para iniciar sesión.
Imagen 11: Cambio de nombre de usuario y correo electrónico.
- Actualizamos los datos del campo
Email addresscon nuestro correo. - Guardamos los cambios.
Imagen 12: Menú de usuario cambio de contraseña.
- Hacemos clic en
Change Passwordpara cambiar la contraseña actual.
Imagen 13: Cambio de contraseña del usuario actual.
- Introducimos la contraseña actual.
- Introducimos la contraseña nueva y la confirmamos.
- Guardamos los cambios.
Imagen 14: Menú de usuario doble factor de autenticación.
- Hacemos clic en
Two-Factor Auth(recomendado para una capa adicional de seguridad).
Imagen 15: Habilitar 2FA en el sistema NPM.
- Hacemos clic en el botón Habilitar doble factor de autenticación.
Imagen 16: Habilitar 2FA mediante QR con código de verificación.
- Escaneamos el QR con la aplicación 2FA Authenticator también podemos usar otras como Authy.
- Si no es posible escanear el QR, copiamos el código directamente en la aplicación 2FA.
- Pegamos el código de 6 dígitos que genera la aplicación de 2FA.
- Verificamos.
Si falla la verificación puede deberse a que el código de 6 dígitos expiró; podemos intentar de nuevo. El siguiente paso será mostrarnos los códigos de recuperación necesarios en caso de que perdamos el código 2FA o la aplicación se nos desinstale.
Imagen 17: Códigos de recuperación 2FA.
- Copiamos los códigos de recuperación y confirmamos.
Imagen 18: Opciones 2FA.
- Hacemos clic aquí si queremos deshabilitar el 2FA.
- Hacemos clic aquí si queremos nuevos códigos de recuperación.
3.4 Eliminando acceso hacia NPM por el puerto 81
Ya confirmamos el acceso seguro a NPM y actualizamos las credenciales de la cuenta administrador. Ahora vamos a deshabilitar el acceso hacia NPM por el puerto 81. Para ello editamos el archivo docker-compose.yml ubicado en cashu4cs-deploy.
nano docker-compose.yml
Buscamos el servicio NPM que comienza con la línea npm: y eliminamos la línea - '81:81' de ports:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: nginx_proxy_manager
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81'
environment:
- DB_SQLITE_FILE:"/data/database.sqlite"
- DISABLE_IPV6:'true'
volumes:
- ./app-data/npm/data:/data
- ./app-data/npm/letsencrypt:/etc/letsencrypt
Servicio NPM sin el puerto 81.
npm:
image: jc21/nginx-proxy-manager:latest
container_name: nginx_proxy_manager
restart: unless-stopped
ports:
- '80:80'
- '443:443'
environment:
- DB_SQLITE_FILE:"/data/database.sqlite"
- DISABLE_IPV6:'true'
volumes:
- ./app-data/npm/data:/data
- ./app-data/npm/letsencrypt:/etc/letsencrypt
Guardamos y salimos del archivo ctrl+s y ctrl+x
Y por último recreamos el contenedor del servicio NPM para que los cambios sean efectivos, ejecutamos:
docker-compose up --force-recreate npm -d