• 2 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Docker Nginx proxy manager
#1
Hola

Llevo tiempo usando como proxy inverso a Traefik. No va mal pero tiene sus pegas de cara a facilitar la integración de nuevas direcciones y dockers, ya que lo hago manualmente editando su archivo de configuración.

Así que he dado una segunda oportunidad a Nginx que tiene una gestión mucho mas fácil y visual de las redirecciones.

La instalación del docker es sencilla, ejecutamos desde consola la siguiente cadena

Código:
docker run -d -p ip_nas:6080:80 -p ip_nas:6081:81 -p ip_nas:6443:443 --network=Dockers --restart always --name="nginx" -v /share/DockerData/nginx/data:/data/ -v /share/DockerData/nginx/letsencrypt:/etc/letsencrypt/  jc21/nginx-proxy-manager:latest

Hemos de substituir "ip_nas" por el valor de la ip local de nuestra NAS. 

Si no hemos definido una red de dockers, hemos de omitir en la cadena de creación "--network=Dockers"

Usamos carpetas persistentes que soporten la eliminación/actualización del docker. Para ello tenemos una carpeta compartida de QTS llamada "DockerData", y en su interior se creará la Nginx con datos de configuración y de Let'sEncrypt.

Con "-p ip_nas:6080:80 -p ip_nas:6081:81 -p ip_nas:6443:443" estamos indicando que el docker usa los puertos internos 80, 443 y 81.

Y que externamente al docker los hemos asignado a los puertos 6080, 6443 y 6081 

Es decir, desde nuestra red local accederemos al docker de nginx por la ip de la NAS y los puertos 6080, 6443 y 6081.

Por tanto hemos de hacer en nuestro router dos aperturas de puertos con traslación de los mismos (NATP) para que :

-el puerto 80 de nuestro ip publica vaya a la ip_nas por el puerto 6080

-el puerto 443 de nuestro ip publica vaya a la ip_nas por el puerto 6443


Para comprobar que funciona nuestra docker abrimos un navegador web desde nuestra red local y vamos a la dirección:

"http://ip_nas:6081"

Se nos presentará la pantalla de login.

   

Por defecto son los siguientes valores:

*usuario es "admin@example.com"

*clave es "changeme"

   


Tras identificarnos, se nos abre la pantalla de modificación del usuario. 

Cambiaremos el admin@example.com por una dirección nuestra.

   

Después de forma automática nos lleva a la pantalla de cambio de clave. 

La nueva clave ha de tener al menos 8 caracteres (olvidad el 12345  Tongue )

   

Una vez cambiada, veremos la pantalla principal con nuestro único usuario.

   

Para sacarle "jugo" a este proxy, nos interesa tener un nombre de dominio en propiedad.

Los hay muy baratos, incluso por menos de 3€ al año. 

A día de hoy podéis contratar uno con OVH, no he visto mas baratos. 

Si vais a comprar alguno, comprobad el precio de los siguientes años, para evitar sorpresas de ofertas gancho.


Por ejemplo he mirado si está disponible "qnapclub.ovh" y me muestran mas opciones en función de la terminación del nombre.

   


Vemos que si está disponible, lo digo por si alguien quiere hacerse con él  Big Grin

La ventaja de tener un dominio es que podemos asignar desde sus DNS nombres hacia direcciones concretas.

Suponiendo que tenemos ya el dominio podemos crear las siguientes tres asignaciones:

   


El primero apunta a una ip pública, y los dos siguientes apuntan a DDNS.

Entiendo lo habitual en nuestros domicilios es tener ip dinámica y usaremos DDNS.

Evidentemente la DDNS ha de funcionarnos, si por lo que sea cae y no se actualiza a nuestra ip, no llegaremos a nuestra NAS.

Por mi experiencia, DuckDNS va bien, pero no está demás usar alguna alternativa más y/o repartir nombres.

Siguiendo con el ejemplo, imaginad en nuestra NAS tenemos activos dos DDNS (las de myqnapcloud y duckdns)

y que los pings a pruebas.qnapclub.ovh ->  mi_nas.myqnapcloud.com  y de web.qnapcloud.ovg-> mi_casa.duckdns.org NO coinciden en ip pública.

Esto indicará que uno de los dos está desactualizado y alguno no presentará el servicio correcto.

Vamos a suponer durante todo el ejemplo que todos nuestros DDNS resuelven como ip pública a la 194.14.54.60


1-Vamos a apuntar a una web que tenemos en nuestra nas dentro de la carpeta web.


Es decir vamos a usar el servidor web integrado de nuestra NAS.

Podemos comprobar los puertos yendo a Panel de control, Aplicaciones y Servidor Web.

Lo habitual es usar el 80 y el 443 (u otro). 

Esto último depende de si QTS usa el 8080 y el 443. No pueden usar el mismo 443 de forma simultánea.

Vamos a suponer que usamos el 80 para http y el 8081 https.

Ahora creamos una pagina web de ejemplo.

Desde QFile dentro de la carpeta compartida de sistema "Web", creamos la carpeta "pruebas" y dentro un archivo index.html con el siguiente contenido:

Código:
<HTML>
<HEAD>
<TITLE>Ejemplo Hola mundo</TITLE>
</HEAD>
<BODY>
<P>Ola ke ases</P>
</BODY>
</HTML>


Si desde nuestra red abrimos la dirección web "http://ip_local_de_nas/pruebas" o a la "http://ip_local_de_nas:80/pruebas" veremos la elaborada web Wink

Lo mismo si vamos a "https://ip_local_de_nas:8081/pruebas", aquí saltará el aviso de que el certificado SSL no es válido, pero con agregar la excepción, podremos ver la web.

Para que funcione desde Nginx, hay que añadirla en QTS a la sección de host virtual.

Para ello vamos a Panel de control, Aplicaciones, Servidor Web y subsección de Host Virtual

   

Ahora la agregaremos desde Nginx

   

con los siguientes parámetros

   

Con esto ya lo tenemos. 

Si desde un equipo externo a la red de nuestra nas vamos a "http://pruebas.qnapclub.ovh" veremos nuestra web de pruebas.

Ahora bien, todavía no hemos definido nada de https.

Para ello, haremos que nuestro Nginx, solicite un certificado a LetsEncrypt y se encargue de renovarlo cada tres meses.

Editaremos el host que hemos creado antes y lo completamos en la segunda y tercer lengüeta

       

Al aceptar la primera vez, se establece una comunicación con LetEncrypt para generar, traer e instalar el certificado.


Ahora si desde el exterior vamos a "http://pruebas.qnapclub.ovh", veremos que se hace una redirección a "https://pruebas.qnapclub.ovh"  y que el certificado que usa es el de LetsEncrypt.


Ahora vamos a darle un plus de seguridad y podemos hacer que sólo sea accesible mediante un usuario y clave.

Para ello primero vamos a crear una primera lista para dar permisos a usuarios y/o ips

   

Damos un nombre a la lista

   

Agrego uno o varios usuarios

   

Además podemos hacer restricciones/permisos por ips o rangos de ellas.

Ojo que el orden de las restricciones afecta. Algo similar a QuFirewall.

Si por ejemplo quieres permitir un rango y que no pueda una ip concreta de ese rango. 

Hay que hacer que la denegación de esa ip quede por encima del rango de ip permitidas

   

Una vez creada la lista vamos a los host definidos y lo editamos cambiando la opción inferior para dejar nuestra lista como activa.

   

Desde ese momento cuando vayamos a la web, se nos presenta un cuadro de petición de usuario y clave para acceder a ella.


2-Vamos a apuntar a una web de un docker tipo nextcloud en nuestra nas de Qnap

Vamos a suponer que ya tenemos un dns en nuestro panel de control del dominio y que apuntando de nuevo a la ip pública de la nas.

De hecho debería apuntar al mismo DDNS de nuestra web de pruebas anterior, pero con otro nombre, com por ejemplo "web"

Es decir si exteriormente hacemos ping a "web.qnapclub.ovh" nos contesta con la misma ip que si lo hacemos a "pruebas.qnapclub.ovh"

El docker lo hemos creado siguiendo este otro hilo anterior. Es decir usa el puerto 9080 de la ip privada de la nas.

Agregamos un nuevo host similar al de las capturas siguientes:

   

   

   


3-Vamos a apuntar a una web de Kuma

En este caso usaremos el docker de Kuma que definimos en este otro hilo.

Aquí básicamente es lo mismo, pero si leemos la documentación de uptime-Kuma indica que hay que activar "webshockets support"

          



Con los ejemplos anteriores ya hay para practicar  Wink



He visto que algunas web y dockers , son un poco especiales y mejoran su acceso si en la última sección de advanced, agregamos estos parámetros.

   

Esta es la lista por si queréis hacer un copia/pega

Código:
proxy_hide_header Upgrade;
proxy_hide_header X-Powered-By;
add_header Content-Security-Policy "upgrade-insecure-requests";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Cache-Control "no-transform" always;
add_header Referrer-Policy no-referrer always;
add_header X-Robots-Tag none;

Yo lo he tenido que usar en alguna web un poco especial, en muchas si lo ponéis, no afecta a la presentación.



Para finalizar voy a describir una función mas que se refiere a redirecciones de host.

Supongamos que tenemos mas de un dominio aparte a "qnapclub.ovh" y disponemos del dominio "secreta.eu" . 
Y queremos que cuando alguien vaya a web de "laguarida.secreta.eu", sea llevado a "www.qnapclub.ovh"

Entonces en los DNS del dominio "secreta.eu" agregamos un CNAME "laguarida" que apunte a la ip de publica de nuestra nas usando la dirección ddns.

Luego en el Nginx vamos a host, "Redirections Host" 
   

y agregamos uno con los siguientes parámetros:
   

   


Y con esto quedaría hecha la redirección. Lo he hecho con un caso "mas complicado" usando dos nombres de dominio, pero se puede hacer con el mismo.

Por ejemplo si queremos que ir a "francisco.qnapclub.ovh" sea lo mismo que ir a  "paco.qnapclub.ovh" o a "paquito.qnapclub.ovh" o a "patxi.qnapclub.ovh" .


Y con esto creo que podemos defendernos con nuestro Nginx Proxy Manager.

Como siempre, si veis algún error ortográfico, enviadme un privado y lo corrijo.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder




Usuarios navegando en este tema: 1 invitado(s)