Configuración de Nginx Proxy Manager (NPM)
En este paso 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
Luego de loguearnos pasamos 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 habrás observado, 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: Adicionar un Proxy Host.
- Adicionamos 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. Puede 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 encontrarán al final de este tutorial.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. - Salvamos los cambios.
Tras salvar 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 cual lo adapta a sus dominios personales.
| 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 tutorial, 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 9: 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 10: Cambio de nombre de usuario y correo electrónico.
- Actualizamos los datos del campo
Email addresscon nuestro correo. - Salvamos los cambios.
Imagen 11: Menú de usuario cambio de contraseña.
- Hacemos clic en
Change Passwordpara cambiar la contraseña actual.
Imagen 12: Cambio de contraseña del usuario actual.
- Introducimos la contraseña actual.
- Introducimos la contraseña nueva y la confirmamos.
- Salvamos los cambios.
Imagen 13: Menú de usuario doble factor de autenticación.
- Hacemos clic en
Two-Factor Auth(recomendado activarlo si se quiere un plus de seguridad).
Imagen 14: Habilitar 2FA en el sistema NPM.
- Hacemos clic en el botón Habilitar doble factor de autenticación.
Imagen 15: Habilitar 2FA mediante QR con código de verificación.
- Escaneamos el QR con la aplicación 2FA Authenticator pueden usar otras como Authy para este paso.
- Si no es posible escanear el QR copie el código directamente en la aplicacion 2FA.
- Pegue 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ó, intente 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 16: Códigos de recuperación 2FA.
- Copiamos los códigos de recuperación y confirmamos.
Imagen 17: 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 confiramos 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
Salvamos y salimos del archivo ctrl+s y ctrl+x
Y por último recreamos el contenedor del servicio NPM para que los cambio sean efectivos, ejecutamos:
docker-compose up --force-recreate npm -d