Securitzant serveis amb Nginx Proxy Manager
Introducció
La seguretat és un pilar fonamental a l’hora d’exposar qualsevol servei a Internet. Si gestiones serveis a la teva xarxa local, la millor pràctica per accedir-hi de manera centralitzada i segura és a través d’un reverse proxy. Aquesta arquitectura no només simplifica la gestió dels ports, sinó que també ens permet afegir una capa de xifrat essencial amb SSL/TLS.
En aquest tutorial, explorarem com instal·lar i configurar Nginx Proxy Manager mitjançant Docker. Aquesta eina ens ofereix una interfície web intuïtiva per gestionar els nostres dominis, generar certificats SSL de Let’s Encrypt amb només un parell de clics i redirigir el tràfic als nostres serveis interns sense haver de tocar manualment fitxers de configuració complexos.
Què farem?
Configurarem Nginx Proxy Manager com un Reverse Proxy per poder accedir als nostres serveis. A més, dins la seva configuració crearem certificats SSL per xifrar el tràfic cap als nostres serveis.
Què necessitem
-
Un domini
Per poder xifrar les connexions amb un certificat vàlid.
-
Una màquina Linux (amb Docker)
On instal·larem Nginx Proxy Manager. Podem prescindir de Docker i utilitzar-ho directament sobre Linux, però en aquest tutorial explicaré com fer-ho amb Docker.
-
Gestió del nostre router
Necessitarem obrir ports des de l’exterior al nostre servidor. Si et trobes darrere un CG-NAT, no podràs seguir aquest tutorial (o hauràs de buscar alternatives, com una VPN contra un VPS i redirigir el tràfic del VPS al servidor).
Configuracions
Domini
Primer de tot necessitarem un domini. En el meu cas, tinc subdominis creats per cada servei, i cadascun apunta a la IP pública on es troba el meu servidor.
Si no disposes d’IP fixa, pots utilitzar un servei de DNS dinàmica (com DuckDNS, que a més és gratis fins a 5 dominis) i apuntar els subdominis creant un registre CNAME cap a aquesta DynDNS.
Si et vols assegurar que el teu DNS està ben configurat i apunta a la IP on toca, pots entrar en aquesta web per verificar-ho.
Els canvis de DNS poden tardar fins a 48 hores en propagar-se, però solen tardar qüestió de minuts.
Instal·lació d’Nginx Proxy Manager
Ara instal·larem Nginx Proxy Manager al nostre servidor.
Com ja he comentat, mostraré com fer-ho mitjançant Docker (més concretament docker compose).
Crearem l’arxiu docker-compose.yaml amb el següent contingut (o l’afegirem a l’arxiu que ja tinguem):
nginx-proxy:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
volumes:
- /home/server/npm:/data
- /home/server/letsencrypt:/etc/letsencrypt
Els ports que exposem són els següents:
-
80 i 443 seran els ports on entraran les peticions per als nostres serveis. Aquests els haurem d’exposar públicament perquè puguem rebre sol·licituds des de fora.
-
81 és el port d’administració de Nginx Proxy Manager, que podem deixar només accessible des de la xarxa interna.
Ara accedirem a la interfície web d’Nginx Proxy Manager utilitzant el port 81. Les credencials que demana són les per defecte: [email protected] amb contrasenya changeme. Un cop dins, ens surt un missatge per canviar l’usuari admin, cosa que hauriem de fer.

I ja som dins Nginx Proxy Manager!
Creació de certificats
Ara crearem els certificats per poder xifrar el tràfic. Anirem als menús de dalt i entrarem a SSL Certificates. Allà, farem clic a afegir-ne un de nou i ens apareixerà un menú.
En aquest pas haurem de tenir el port 80 redireccionat del firewall al port 80 del servidor.
Afegim el domini a provar i farem clic a Test Server Reachability.

I, si tenim el port obert, ens hauria d’apareixer el següent missatge:

Acceptem les condicions de servei i farem clic a Save (heu d’afegir el vostre correu, no el d’exemple, sinó el detectarà com invàlid).
Ara veiem que el certificat s’ha creat correctament, però està inactiu. Això és perquè no l’estem utilitzant encara.

Configuració del reverse proxy
Ara aniriem a Hosts - Proxy Hosts i crearem una entrada.

Afegirem el nom de domini, la IP a la que hem de redirigir i el port.

I a l’apartat SSL afegirem el certificat que hem creat abans:

Ara haurem d’afegir un registre DNS per poder arribar amb el domini a la IP del servidor. Des de fora amb la IP pública podem però internament no (a no ser que tinguem Hairpin configurat). En el meu cas, he afegit una entrada a l’arixu /etc/hosts.
Ara, si fem la prova, la petició web anirà a la IP del servidor pel port 80 i la redirigirà al port 3000, on tinc un servei Grafana.

Com podem veure, podem entrar per HTTPS sense que ens mostri cap mena d’avís.

I el certificat és vàlid.
I fins aquí el post d’avui. Si t’ha semblat útil pots deixar un comentari i compartir-lo. Ens veiem al següent!