Oggi vediamo come usare NGINX in modo da avere sicurezza nella nostra rete per esporre Home Assistant e PLEX e vi annuncio già che la guida non è proprio per principianti perchè bisogna conoscere alcuni concetti che io eviterò di spiegare se no devo fare una guida gigantesca.
Io sto cercando di strutturare la rete in modo che tutto quello che deve essere esposto viene passato per una macchia virtuale sul mio server e questa logica la uso per avere più sicurezza nella mia rete e non dover aprire porte sul modem/router per ogni servizio, ma avere un dominio con diversi sotto dominii per connettermi al mio sistema di domotica e al mio sistema di streaming (Home Assistant e PLEX).
Il concetta è usare il Reverse Proxy di NGINXe quindi capiamo cos’è:
Essenzialmente un proxy è un’interfaccia di comunicazione in rete, che accetta le richieste e risponde a queste al posto del server di destinazione e quindi il reverse proxy è un’interfaccia che espone in rete le pagine web di altri server senza far comunicare l’utente direttamente con il server che espone quella pagina e possibilmente proteggerle.
Noi lo sfrutteremo per esporre Home Assistant e PLEX Media Server, PLEX Media Server per precisare lo esporremo sia per l’accesso dal domini che per l’accesso remoto dai server di PLEX per poter usare le app sui diversi dispositivi.
Prima di tutto bisogna avere o una macchina virtuale (su Proxmox o ESXi) o avere un server linux, io adesso spiego usando Ubuntu 20.04, io consigli l’uso di una macchina virtuale o macchina server fisica “vuota” o usata solo per esporre e il mio consiglio è di usare una seconda macchina perché serve usare due client per ddns.
Per esporre ci serve due dominii personali o due dddns, io consiglio di acquistare un dominio da google domains per creare due sottodominii (che ha un servizio di ddns su dominio personalizzato e quindi permette di creare più sottodominii con con più ddns) oppure usare duckdns per creare i due ddns.
Se volete usare duckdns o google domains ci servono due client per PLEX e HA, consiglio visto che dobbiamo esporre HA/HassOS di usare un client sulla macchina di HA core o HassOS, per duckdns su HassOS usare l’addon (ma non ci servono i certificati che genera l’addon quindi gli ignoriamo) e su una macchina linux generica usare le guide che trovate sul loro sito (www.duckdns.org), per google domains su HA c’è un component che fa da client (QUESTO) e su una macchina linux generica usare ddclient con la configurazione che da google (QUESTA).
Adesso installiamo NGINX:
- Prima di tutto aggiorniamo con il comando: sudo apt-get update”
- Adesso installiamo veramente NGINX con il comando: sudo apt install nginx
- Per far partire il server e vedere il suo stato usiamo i comandi sudo systemctl start nginx e sudo systemctl status nginx
Adesso prima di configurare nginx c’è bisogno di creare i certificati per ogni dominio o sotto dominio creato e quindi bisogna installare certbot per generare dei certificati gratuiti con let’s encrypt che durano 90 giorni e devono essere aggiornati, adesso vediamo come fare:
- Aggiungiamo la re pository con questo comando: sudo add-apt-repository ppa:certbot/certbot
- Aggiorniamo il sistema con il comando: sudo apt-get update
- installiamo certbot con questo comando: sudo apt-get install certbot
- Stoppiamo il server nginx con questo comando (per non occupare la porta 80): sudo systemctl stop nginx
- Apriamo la porta 80 sul firewall di Ubuntu con questo comando: sudo ufw allow 80
- Adesso apriamo la porta 80 sul modem/router verso l’ip della macchina dove è installato cerbot e nginx
- Prima di generare i certificati assicuriamoci che i dominii raggiungono la rete e se effettuato un ping restituiscono l’ip della nostra rete anche se alla fine non danno output di niente.
- Adesso procediamo con la generazione dei certificati per ogni dominio o sottodominio: sudo certbot certonly –standalone –preferred-challenges http -d example.com
- Nella cartella del dominio troviamo i certificati, la cartella è questa: /etc/letsencrypt/live/example.com (mettiamo da parte e ricordiamocelo dopo)
Per rinnovare i certificati manualmente basta usare questo comando: sudo certbot renew –dry-run
Invece per rinnovare il certificato in automatico bisogna entrare in crontab con il comando: crontab -e e infine aggiungere in fondo questa stringa: 0 */12 * * * root certbot -q renew –nginx
Adesso abbiamo tutto quello che ci serve per creare la configurazione del nostro reverse proxy che espone sia HA che PLEX:
- Dobbiamo creare un file di configurazione per nginx con queso comando: sudo nano /etc/nginx/sites-available/proxy_config.conf
- Adesso inseriamo questa configurazione nel file: QUESTO è IL LINK PER IL FILE
- dobbiamo personalizzare la configurazione nel upstream Plex cambiando l’ip della macchina del server, nel upstream HA cambiando l’ip della macchina del server, nel primo server (quello di HA) cambiando il server_name, anche nel secondo server (rdirect http a https per HA) cambiando il server_name e nel terzo server (quello di plex) cambiando il server_name
- Diamo il comando per copiare il file nella cartella sistes-enable: sudo ln -s /etc/nginx/sites-available/proxy_config.conf /etc/nginx/sites-enabled/proxy_config.conf
- Adesso per verificare se la configurazione è a posto dare il comando: sudo service nginx configtest
- Se da come risultato OK dare il comando per riavviare nginx: sudo service nginx restart
Controllare se tutto funziona e sia PLEX che HA siano raggiungibili dai dominii, ma bisogna solo fare una piccola aggiunta a HA, ovvero nelle impostazione mettere l’url esterna e in PLEX bisogna fare 2 o 3 modifiche che adesso elenco:
- Andare in impostazioni, poi accesso remoto e disattivare l’accesso remoto (potete disattivare la porta 32400 sul modem per l”accesso remoto, finchè non finiamo le modifiche per ora non sarà possibile l’accesso da remoto).
- Ancora impostazioni, poi rete
- In basso in “URL personalizzate per l’accesso al server” inserire: https://plex.domain.com:443,http://plex.domain.com:80
(Ho specificato la porta per non avere problemi).
Adesso se tutto funziona bene quando si accede a PLEX in remoto fuori dalla propria rete da app o da app.plex.tv tutto passerà dal dominio/sottodominio oppure ci si può collegare tramite il proprio domini/sottodominio, esempio: il mio dominio è in questo formato https://plex.domin.net e se lo digito da browser mi collego al mio server PLEX.
Per collegarsi a home assistant da remoto basta digitare il proprio dominio dotto https, esempio: il mio è strutturato così https://ha.domain.net
Adesso avrete l’accesso remoto, ma indiretto ai vostri server!