Una vez configurada la IP estática en nuestro servidor Debian 12 que vimos en la primera entrada, la instalación de Docker posteriormente en el segundo artículo, seguimos adelante y ahora tocará instalar el proxy inverso que hará la función de protección de nuestro servidor web frente a ataques y que nos ayudará a conseguir un mayor rendimiento.
El servidor proxy inverso siempre se sitúa por delante de los servidores/servicios web que tengamos en el servidor y es el que se encargará de reenviar las solicitudes que reciba hacía los servicios alojados. Es por ello, que es el servicio que tenemos que configurar primeramente es este.
Para instalar este proxy necesitaremos de la última versión LTS de NodeJS, la cual descargaremos desde un repositorio. Por defecto, en Debian 12 viene la versión 18 que serviría, pero siempre me gusta tener actualizada la aplicación a la última versión LTS (Long Term Support) que exista, en este caso la versión 20.
Antes de nada y como práctica habitual, primero haremos un update y upgrade para dejar el sistema actualizado hasta ese mismo momento. Lanzamos los comandos pertinentes:
sudo apt update && sudo apt upgrade -y
Después ya podemos ir a la página del repositorio llamado NodeSource de NodeJS (https://deb.nodesource.com) desde donde podremos descargar e instalar la última versión LTS de esta herramienta. En su página veremos lo sencillo que es, básicamente tendremos que copiar/pegar dos líneas.
Pero antes de lanzar estas dos líneas, habrá que instalar el comando curl ya que por defecto no viene instalado por Debian.
Lanzamos la instalación:
sudo apt install curl
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs
Si todo ha ido bien, podemos ver que ya lo tenemos instalado:
jmdlr@debian:~$ curl --version
curl 7.88.1 (x86_64-pc-linux-gnu) libcurl/7.88.1 OpenSSL/3.0.11 zlib/1.2.13 brotli/1.0.9 zstd/1.5.4 libidn2/2.3.3 libpsl/0.21.2 (+libidn2/2.3.3) libssh2/1.10.0 nghttp2/1.52.0 librtmp/2.3 OpenLDAP/2.5.13
Release-Date: 2023-02-20, security patched: 7.88.1-10+deb12u5
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL threadsafe TLS-SRP UnixSockets zstd
Con esto ya estaríamos listos y podemos lanzar las dos líneas que ponían en la página del repositorio:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs
Terminada la instalación, toca comprobar que la versión instalada de NodeJS es la que queremos, en este caso la 20 LTS.
Ejecutamos el siguiente comando para visualizar la versión:
jmdlr@debian:~$ node -v
v20.13.1
¡Bien hecho! Ahora ya solo toca instalar el proxy, para ello vamos a la página oficial de GitHub de NPM para ver la última versión disponible he instalarla.
Vamos a seguir exactamente los pasos que se indican ahí, que de manera resumida son las siguientes.
Creamos un fichero docker-compose.yml:
vi docker-compose.yml
Añadimos el siguiente contenido:
version: '3.8'
services:
app:
image: 'docker.io/jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Estamos indicando en el fichero qué:
- Usaremos la última imagen disponible que exista del NPM,
- Abriremos los puertos 80, 443 y 81 para el dashboard de administración de la app, y
- Se crearán las siguientes carpetas de «data» y «letsencrypt».
Salvamos el fichero (:wq!) y lo ejecutamos:
docker compose up -d
Esto tardará un ratillo entre que descargar la imagen, configura, etc. Al final tendrá que indicarnos con checks de color verde, que todo ha ido bien.
Para confirmarlo podemos ver en qué estado está la aplicación dentro de docker, para ello ejecutamos lo siguiente:
docker ps
Y tendría que devolvernos que el contenedor de la aplicación está corriendo como podremos ver en la columna de «Status», que dirá el tiempo que lleva levantado:
jmdlr@debian:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
016fdef7c34a jc21/nginx-proxy-manager:latest "/init" 57 seconds ago Up 55 seconds 0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp jmdlr-app-1
Si esto es así, el servicio estará levantado, probemos directamente lo que nos dice el puerto 80.
Abrimos un navegador en nuestro equipo y atacamos a la IP de nuestro servidor en mi caso será la IP 192.168.1.12:
Ahora vamos a ir a la página de administración de NPM que por defecto se configura en el puerto 81 y nos devolverá esta ventana de «login»:
Para acceder, como se indica en la página oficial tendremos que utilizar estas credenciales de abajo, que posteriormente nos obligarán a cambiar la primera vez que accedamos, al igual que el nombre, usuario y dirección de correo electrónico.
- Usuario: admin@example.com
- Contraseña: changeme
Añadimos la información que queramos poner y daremos al botón de «Save». Y ya estaremos en la página principal desde la que gestionaremos los diferentes apartados de nuestro proxy.
Y hasta aquí toda la instalación de nuestro proxy, seguiremos en próximos artículos con la instalación de los diferentes servicios que queramos tener disponibles en nuestro servidor y veremos como debemos configurar NPM para que las peticiones sean redireccionadas según al servicio que se quiera acceder.
¡Nos vemos por el Fediverso!
Deja una respuesta