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.

Login NPM
  1. Usuario changeme@domain.com
  2. Contraseña ch4ng3m3*-
  3. Presionamos Enter o hacemos clic en Sign in

Tras iniciar sesión, accedemos al dashboard del servicio NPM.

Imagen 2: Dashboard del NPM.

Dashboard NPM
  1. 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.

Add Proxy Host
  1. Añadimos un Proxy Host.

Imagen 4: Opciones de Proxy Host.

Opciones Proxy Host
  1. Domain Names en 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 dominio npm.cashu4community.xyz.
  2. Scheme el 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.
  3. Forward Hostname / IP no 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.
  4. Forward Port es 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.
  5. Options habilitamos todas las opciones para mejorar la seguridad y funcionalidad de la aplicación.

Imagen 5: Opciones de Proxy Host opciones SSL.

Opciones SSL
  1. Nos ubicamos en la Pestaña SSL.
  2. Seleccionamos en el menú desplegable la opción Request a new Certificate.
  3. Habilitamos las opciones Force SSL, HTTP/2 Support y HSTS Enabled.
  4. 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.

Proxy Host Record
Importante: Para crear el certificado digital, NPM verifica que el dominio DNS exista. Si no existe, el proceso fallará.

Imagen 7: Proxy Host correctamente configurado.

Proxy Host Status

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.

Logout
  1. 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.

Proxy Host List

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.

User Menu Edit Profile
  1. Hacemos clic en Edit Profile para cambiar la dirección de correo que usamos para iniciar sesión.

Imagen 11: Cambio de nombre de usuario y correo electrónico.

Change Email
  1. Actualizamos los datos del campo Email address con nuestro correo.
  2. Guardamos los cambios.

Imagen 12: Menú de usuario cambio de contraseña.

User Menu Change Password
  1. Hacemos clic en Change Password para cambiar la contraseña actual.

Imagen 13: Cambio de contraseña del usuario actual.

Change Password
  1. Introducimos la contraseña actual.
  2. Introducimos la contraseña nueva y la confirmamos.
  3. Guardamos los cambios.

Imagen 14: Menú de usuario doble factor de autenticación.

User Menu 2FA
  1. Hacemos clic en Two-Factor Auth (recomendado para una capa adicional de seguridad).

Imagen 15: Habilitar 2FA en el sistema NPM.

Enable 2FA
  1. Hacemos clic en el botón Habilitar doble factor de autenticación.

Imagen 16: Habilitar 2FA mediante QR con código de verificación.

QR Code 2FA
  1. Escaneamos el QR con la aplicación 2FA Authenticator también podemos usar otras como Authy.
  2. Si no es posible escanear el QR, copiamos el código directamente en la aplicación 2FA.
  3. Pegamos el código de 6 dígitos que genera la aplicación de 2FA.
  4. 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.

Recovery Code
  1. Copiamos los códigos de recuperación y confirmamos.

Imagen 18: Opciones 2FA.

2FA Options
  1. Hacemos clic aquí si queremos deshabilitar el 2FA.
  2. 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