Come impostare il reverse proxy con Nginx Proxy Manager (NPM): Guida Passo Passo con la Shell Testuale

Configurare un proxy inverso con Nginx Proxy Manager, migliorando la gestione e la sicurezza del server in pochi semplici passaggi.

Nginx Proxy Manager (NPM) è uno strumento potente e user-friendly progettato per semplificare la gestione di server proxy Nginx.

Rispetto ad altre soluzioni di reverse proxy come Nginx, Caddy o Traefik, Nginx Proxy Manager (NPM) si presenta come container docker completo di un’interfaccia utente grafica intuitiva per gestire le impostazioni del reverse proxy, i certificati SSL e i controlli di accesso, rendendolo accessibile anche a chi ha poca esperienza di certificati SSL/TLS, Nginx o Let’s Encrypt.

Prerequisiti per installare Nginx Manager con Docker Compose.

  • Accesso a un server VPS
  • Account di root o utente con privilegi sudo
  • Docker e Docker Compose installati (se non lo sono, segui la guida su come installarli)
  • Minima conoscenza shell

Passo 1: Creare la rete predefinita da usare con NPM

Prima di installare NPM, è necessario configurare una nuova rete Docker. Questa rete collegherà NPM a qualsiasi altro container con cui deve interagire. Se non lo facciamo, Nginx Proxy Manager non sarà in grado di interagire con questi container e inviare loro traffico.

Creiamo la nostra rete Docker scegliendo ad esempio npm-internal come nome:

docker network create npm-internal

Quindi verifichiamo che la rete sia disponibile:

docker network ls

Passo 2: Creare il File docker-compose.yml

Creata la rete docker, procediamo con l’installazione del container Nginx Proxy Manager (NPM). Come primo passo, creiamo una directory per memorizzare i dati e i certificati di Nginx Proxy Manager e posizionamoci all’interno:

mkdir npm
cd npm

Implementeremo NPM utilizzando Docker Compose. Apri il tuo editor di testo preferito e crea un file chiamato docker-compose.yaml

nano docker-compose.yml

Incolla il contenuto fornito di seguito, salvalo e chiudi.

Come puoi vedere, questo è un file Compose piuttosto semplice, ma efficace. È importante notare che le porte 80 e 443 sono quelle in cui Nginx Proxy Manager riceverà le richieste, mentre la porta 81 ti consente di accedere all’interfaccia di amministrazione web di NPM.

Inoltre, stiamo configurando due volumi nella directory corrente per garantire la sicurezza dei dati di configurazione NPM e dei certificati SSL. Questo è fondamentale perché, per sua natura, Docker non salva i dati in modo permanente; senza questi volumi, tutti i dati andrebbero persi al riavvio del container o del server VPS.

Prima di implementare NPM, assicuriamoci che nessun altro servizio utilizzi le porte 80 e 443, necessarie per Nginx Proxy Manager. Se queste porte sono già in uso, è necessario interrompere i servizi che le utilizzano. In caso contrario, NPM non si avvierà e visualizzerà un errore.

Per scoprire quali porte sono in uso prima di installare NPM, utilizzeremo il comando netstat e controlleremo l’output per le porte 80 e 443.

netstat -tulnp

Se non sono nell’elenco siamo a posto per partire.

Passo 3: Avviare il container Docker Nginx Proxy Manager

Per installare e avviare in background il container Nginx Proxy Manager (NPM) esegui il comando:

docker compose up -d

Adesso apri il browser e vai all’indirizzo IP del tuo server sulla porta 81, esempio: http://<indirizzo_ip_del_server>:81

Dovremmo vedere la schermata di login di Nginx Proxy Manager.

Passo 5: Effettuare il Login

Per la primissima volta che effetttuiamo il login, utilizziamo le credenziali predefinite di accesso che necessariamente dobbiamo sostituire:

Email: admin@example.com
Password: changeme

Al primo accesso, un popup ci chiederà di aggiornare le informazioni dell’account amministratore. Inserisci il tuo nome completo, nome utente e un indirizzo email valido, quindi fai clic sul pulsante Salva per confermare le modifiche.

Poi si aprirà una nuova finestra in cui potrai aggiornare la password dell’amministratore. Digita changeme nel campo Current Password quindi scegli e inserisci una nuova password sicura nei campi New Password e Confirm Password . Fare clic su Save per applicare le modifiche.

Finalmente siamo pronti a emettere un certificato SSL valido in modo che i nostri servizi presenti e futuri possano connettersi in modo sicuro tramite HTTPS.

Passo 6: Emissione del certificato SSL e Configurazione del Reverse proxy della nostra istanza Nginx Proxy Manager appena installata.

La guida continua mostrando come creare un reverse proxy dell’istanza NPM appena creata con indirizzo IP pubblico 51.255.50.17 che risolve il dominio npm.emanuelegori.uno

Per continuare dobbiamo necessariamente accedere alla gestione DNS del dominio, percui assicurati di avere un record DNS “A” valido (risolvibile) impostato che punti all’indirizzo IP pubblico del server in cui hai appena installato Nginx Proxy Manager.

Possiamo verificarlo rapidamente con nslookup. In questo caso, stiamo ottenendo un certificato SSL per l’host npm.emanuelegori.uno

Un rapido controllo conferma che punta all’indirizzo IP corretto.

nslookup dominio

Se quando esegui il comando nslookup esce un errore probabilmente non è installato. Su Debian/Ubuntu installa il pachetto dnsutils con il comando:

sudo apt install dnsutils 

e verifica l’installazione di nslookup con il comando:

nslookup -version

Continuiamo: dal menù principale scegli SSL Certificates, fai clic sul pulsante Add SSL Certificate, poi conferma Let’s Encrypt e configura la finestra popup come segue:

Add Let’s Encrypt Certificate
  1. In Domain Names, inserisci il nome di dominio per il quale desideri emettere un certificato, come npm.emanuelegori.uno
  2. In Email Address inserisci un indirizzo email valido.
  3. Accetta i termini di Let’s Encrypt.
  4. Fai clic sul pulsante Save per ottenere il certificato SSL

NPM inizierà rapidamente a lavorare dietro le quinte e l’intero processo di configurazione del certificato non richiederà più di 20-30 secondi.

La pagina si ricaricherà automaticamente e, se tutto è andato a buon fine, il nuovo certificato SSL per il dominio specificato sarà pronto.

Passiamo a configurare il nostro reverse proxy utilizzando Nginx Proxy Manager.

Utilizzeremo il certificato SSL appena creato per una connessione HTTPS sicura.

Dal menu principale, scegli Hosts, quindi seleziona Proxy Hosts dal sottomenu visualizzato.

Nella pagina successiva, fai clic sul pulsante Add Proxy Host.

Questa sezione è fondamentale per impostare con successo una connessione reverse proxy.

Configurazione scheda Details:

Nel campo Domain Names, inserisci il nome di dominio per il quale desideri che Nginx Proxy Manager crei un reverse proxy. Si tratta del nome per il quale abbiamo appena emesso un certificato SSL nel passaggio precedente, in questo caso npm.emanuelegori.uno

La sezione Scheme è importante. Qui puoi scegliere tra http e https. Questa scelta indica se il container Docker ascolta le richieste HTTP o HTTPS. In quasi tutti i casi, i container Docker non sono configurati per gestire automaticamente le richieste HTTPS, quindi è preferibile scegliere in ogni caso http

Nella casella Forward Hostname/IP, digita semplicemente il nome del servizio Docker. Poiché i contenitori Docker condividono la stessa rete Docker, Nginx Proxy Manager si connette a loro utilizzando il loro services name e NON l’indirizzo IP.

Il nome del servizio del nostro docker-compose.yml è npm

Nel campo Forward Port, digita il numero di porta del container Docker per ricevere le richieste in arrivo. Questo NON deve essere confuso con le porte 80 e 443, su cui è in ascolto il contenitore NPM stesso ma la porta 81

Se non sei sicuro delle porte, puoi controllarle facilmente utilizzando il seguente comando:

docker ps --format "table {{.Names}}\t{{.Ports}}"

Infine, consiglio di attivare l’opzione Block Common Exploits per una migliore protezione contro gli attacchi informatici comuni e Websockets Support per migliorare prestazione e sicurezza della connessione.

Passiamo alla Configurazione scheda SSL

Dal menu SSL Certificate, seleziona il certificato Let’s Encrypt emesso precedentemente: npm.emanuelegori.uno

Inoltre abilita queste impostazioni che migliorano la sicurezza generale del servizio:

Force SSL: reindirizza automaticamente il traffico da HTTP a HTTPS per una navigazione sicura.

HTTP/2 Support: la versione del protocollo HTTP consigliata utilizzata oggi.

HSTS Enabled: aiuta a proteggere da determinati attacchi dannosi.

Fatto. Clicca su Save per applicare le modifiche.

Passo 7: Best Practice: ecco un trucco per proteggere le cose un po’ meglio.

Nel Passo 1 abbiamo creato una una rete Docker personalizzata npm-internal e nel file docker-compose.yml di NPM è aggiunta alla fine del file:

Questa pratica vale anche per tutti gli altri servizi in esecuzione su Docker per evitare di pubblicare le porte per i servizi dell’host Docker. Infatti molti non sono a conoscenza che il firewall di riferimento UFW (Uncomplicated Firewall) predefinito du Debian e Ubuntu non impedisce a Docker di esporre le porte dei container. in un certo senso UFW ti sta inconsapevolmente mentendo e non mostrerà porte aperte dai container Docker.

sudo ufw status

Creando una rete Docker personalizzata, NON è necessario pubblicare le porte per i servizi in funzione sulle interfacce dell’host Docker.

Per approfondire rimando alla documentazione originale Best Practice: Use a Docker network

Percui a questo punto per evitare che l’istanza docker NPM sia raggiungibile con IP pubblico sulla porta esposta 81, ad esempio: http://<indirizzo_ip_del_server>:81 ma raggiungibile esclusivamente con l’ hostname, ad esempio npm.emanbuelegori.uno è necessario fermare il container NPM, commentare la porta 81 e riavviare il servizio.

Conclusione

Configurare un reverse proxy con Nginx Proxy Manager (NPM) offre una soluzione robusta e intuitiva per gestire il traffico del server, migliorare la sicurezza e ottimizzare le prestazioni.

Grazie alla sua interfaccia utente intuitiva, NPM rende accessibile a tutti la configurazione di un server reverse proxy affidabile, performante e sicuro, anche a chi ha poca esperienza con la riga di comando.

Inoltre, semplifica in modo efficiente l’integrazione dei certificati SSL e dei controlli di accesso, eliminando gran parte della complessità tradizionalmente associata alla configurazione di un server di questo tipo.

Per ulteriori informazioni, consiglio vivamente di visitare la documentazione ufficiale di NPM

Spero che questa guida passo passo ti sia utile.

emanuelegori
emanuelegori

Sono Emanuele, un appassionato di informatica da quando, negli anni 90, ho scoperto il mondo digitale con il mio primo personal computer Intel 386.
Da allora, non ho mai smesso di esplorare, imparare e condividere.
Oggi mi dedico al self-hosting, all'open source e alla privacy, per costruire un futuro digitale più autonomo e sicuro.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Leave the field below empty!