Consente di crittografare

Proxy inverso Nginx con HTTPS tramite LetsEncrypt

Proxy inverso Nginx con HTTPS tramite LetsEncrypt
Questo è un seguito del mio messaggio precedente dove impostiamo un semplice server proxy inverso usando Nginx. In questo post, proteggeremo la connessione tra il client e il server proxy inverso utilizzando TLS gratuito (a.K.un certificato SSL) da LetsEncrypt. Ti incoraggio a dare un'occhiata al suddetto post sul proxy inverso per le nozioni di base.

Prerequisiti

  1. Un server con IP pubblico statico. È qui che gira Nginx.
  2. Server di backend con il sito Web previsto in esecuzione su HTTP
  3. Un nome di dominio registrato. Userò ranvirslog.com come nome di dominio principale e i due siti Web sono su FQDN - ww1.ranvirslog.com e ww2ranvirslog.come

Impostare

Quindi gli indirizzi IP sono cambiati dall'ultima volta, da quando sto eseguendo di nuovo questa configurazione. Ecco i nuovi IP e hostname.

VM/nome host IP pubblico IP privato Ruolo/Funzione
Proxy inverso 68.183.214.151 10.135.127.136 Punto di terminazione TLS e server proxy inverso
web1 N / A 10.135.126.102 Hosting ww1.ranvirslog.come

sito web sulla porta 80 HTTP

web2 N / A 10.135.126.187 Ospitando

ww2.ranvirslog.come

sito web sulla porta 80 HTTP

I record DNS sono impostati come tali entrambi i siti Web (diversi sottodomini) puntano allo stesso IP pubblico statico. Questo sembra essere l'indirizzo IP del nostro proxy inverso Nginx:

Un record Valore
ww1.ranvirslog.come 68.183.214.151
ww2.ranvirslog.come 68.183.214.151

Per far funzionare il nostro DNS inverso su HTTP non crittografato, abbiamo creato due file in /etc/conf.d/ denominato ww1.conf e ww2.conf ciascuno con la seguente configurazione:

/etc/conf.d/ww1.conf

server
ascolta 80;
ascolta [::]:80;
nome_server ww1.ranvirslog.com;
Posizione /
proxy_pass http://10.135.126.102/;
proxy_buffering disattivato;
proxy_set_header X-Real-IP $remote_addr;

/etc/conf.d/ww2.conf

server
ascolta 80;
ascolta [::]:80;
nome_server ww2.ranvirslog.com;
Posizione /
proxy_pass http://10.135.126.187/;
proxy_buffering disattivato;
proxy_set_header X-Real-IP $remote_addr;

Il sistema operativo che stiamo utilizzando è Ubuntu 18.04 LTS e abbiamo rimosso il file /etc/nginx/sites-enabled/default in modo che Nginx possa agire esclusivamente come DNS inverso utilizzando le configurazioni mostrate sopra.

Obbiettivo

Con il DNS inverso (e i siti Web di backend) già attivo e funzionante, il nostro obiettivo è installare un singolo certificato TLS per entrambi gli FQDN (ovvero ww1.ranvirslog.com e ww2.ranvirslog.com)  sul nostro proxy inverso Nginx.

Il traffico tra qualsiasi client e il proxy inverso verrà crittografato ma il traffico tra il proxy inverso e i server di backend non è crittografato. Tuttavia, questa è ancora un'opzione infinitamente più sicura rispetto al non avere affatto HTTPS. Per i casi in cui il proxy inverso e i vari server Web si trovano sullo stesso host, diciamo se si utilizzano contenitori Docker per ospitare tutti sullo stesso VPS, quindi anche questo traffico non crittografato è contenuto su un singolo host.

Installazione di Certbot

Certbot è un programma client che verrà eseguito sul nostro server proxy inverso e negozierà un certificato TLS con LetsEncrypt. Dimostrerà a LetsEncrypt che il server ha effettivamente il controllo degli FQDN su cui afferma di avere il controllo. Non ci preoccuperemo di come fa Certbotbot.

Tradizionalmente, puoi usare Certbot come un software autonomo che otterrà solo i certificati (che sono fondamentalmente solo lunghe chiavi crittografiche) e lo salverà sul server. Ma per fortuna, per la maggior parte dei sistemi operativi ci sono plugin personalizzati per Nginx, Apache e altri software. Installeremo il Certbot con il plugin Nginx. Questo configurerà automaticamente Nginx per utilizzare le chiavi appena ottenute e sbarazzarsi di regole non sicure come l'ascolto di HTTP sulla porta 80.

Se stai usando sistemi basati su Debian, come nel mio caso sto usando Ubuntu 18.04 LTS, quindi l'installazione è un gioco da ragazzi.

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository universo
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt update
$ sudo apt install python-certbot-nginx

Altri sistemi operativi, RedHat, Gentoo, Fedora possono seguire le istruzioni ufficiali elencate qui as.

Una volta installato Certbot con Nginx Plugin per la tua combinazione di sistemi operativi possiamo metterci al lavoro.

Ottenere certificati TLS

Per ottenere il certificato TLS per la prima volta, esegui il seguente comando:

$ sudo certbot --nginx

Questo verrà eseguito attraverso una serie di domande interattive, come mostrato di seguito:

  1. Inserisci il tuo indirizzo email

Salvataggio del registro di debug in /var/log/letsencrypt/letsencrypt.log
Plugin selezionati: Authenticator nginx, Installer nginx
Inserisci l'indirizzo e-mail (utilizzato per rinnovi urgenti e avvisi di sicurezza) (Inserisci 'c' per annullare): [e-mail protetta]

  1. Accetta TOS

Si prega di leggere i Termini di servizio su https://letsencrypt.org/documenti/LE-SA-v1.2-novembre-15-2017.PDF. Devi accettare per registrarti al server ACME su https://acme-v02.api.crittografa.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(La)concordo/(C)annullo: LA

  1. Newsletter opzionale

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Saresti disposto a condividere il tuo indirizzo e-mail con la Electronic Frontier Foundation, partner fondatore del progetto Let's Encrypt e l'organizzazione no-profit che sviluppa Certbot? Vorremmo inviarti e-mail sul nostro lavoro di crittografia del Web, notizie EFF, campagne e modi per supportare la libertà digitale.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(S)es/(N)o: Sì

  1. Rileverà quindi i nomi di dominio sul tuo server e, se desideri selezionare tutti i domini, premi semplicemente

Per quali nomi desideri attivare HTTPS?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.come
2: ww2.ranvirslog.come
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Seleziona i numeri appropriati separati da virgole e/o spazi o lascia vuoto l'input per selezionare tutte le opzioni mostrate (inserisci 'c' per annullare):

  1. Reindirizza tutto su TLS. Ho scelto l'opzione 2, per reindirizzare tutto su SSL ma il tuo caso d'uso potrebbe essere diverso. Per le nuove installazioni di backend è sicuro scegliere l'opzione 2.

Scegli se reindirizzare o meno il traffico HTTP a HTTPS, rimuovendo l'accesso HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Nessun reindirizzamento - Non apportare ulteriori modifiche alla configurazione del server web.
2: Reindirizzamento: reindirizza tutte le richieste all'accesso HTTPS protetto. Scegli questo per i nuovi siti o se sei sicuro che il tuo sito funzioni su HTTPS. Puoi annullare questa modifica modificando la configurazione del tuo server web.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Selezionare il numero appropriato [1-2] quindi [invio] (premere 'c' per annullare): 2

Se tutto è andato bene, ti mostrerà questo messaggio, solo per i tuoi nomi di dominio invece.

Congratulazioni! Hai abilitato con successo https://ww1.ranvirslog.com e https://ww2.ranvirslog.come Puoi visitare gli FQDN e notare che i siti Web ora hanno il segno del lucchetto che suggerisce che tutto è crittografato.

Guarda i file di configurazione

Se visualizzi i file di configurazione che abbiamo creato in precedenza, ovvero /etc/conf.d/ww1.conf e /etc/conf.d/ww2.conf, noterai che tutte le regole "Listen 80" sono svanite e sono state aggiunte alcune nuove righe che indicano al server che la comunicazione deve essere crittografata e la posizione dei certificati e delle chiavi per eseguire la suddetta crittografia.

Consiglio vivamente di esaminare i file di configurazione, poiché ciò può anche insegnarti come installare correttamente i certificati e scrivere i file di configurazione.

Rinnovo della Certificazione

I tipici certificati LetsEncrypt sono validi per 90 giorni e prima della scadenza è necessario rinnovarli. Puoi utilizzare Certbot per eseguire prima il rinnovo, eseguendo il comando:

$ sudo certbot rinnova --dry-run

Se l'operazione va a buon fine vedrai il seguente messaggio:

Congratulazioni, tutti i rinnovi sono riusciti. Sono stati rinnovati i seguenti certificati:

/etc/letsencrypt/live/ww1.ranvirslog.com/fullchain.pem (successo)
** DRY RUN: simulazione del "rinnovo certbot" vicino alla scadenza del certificato
** (I certificati di prova di cui sopra non sono stati salvati.)

Ora puoi aggiungere un lavoro Cron che tenterà il rinnovo ogni settimana circa. Certbot non rinnoverà i certificati a meno che non siano effettivamente dovuti per questo, quindi non devi preoccuparti. Il comando per il rinnovo effettivo è:

$ certbot rinnova

Aggiungilo al cron job di root usando:

$ sudo crontab -e

Nel seguente prompt, seleziona il tuo editor preferito (Seleziona Nano se non sei sicuro) e aggiungi le seguenti righe alla fine del file ora aperto:


# Ad esempio, puoi eseguire un backup di tutti i tuoi account utente
# alle 5 del mattino.m ogni settimana con:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# Per maggiori informazioni vedere le pagine di manuale di crontab(5) e cron(8)
#
# m h  dom mon dow   comando
* 2 * * 2    rinnovo certbot

Questo eseguirà il comando di rinnovo certbot alle 2 del mattino in qualsiasi minuto casuale, il secondo giorno di ogni settimana.

Conclusione

Se non conosci i certificati TLS, sperimentare cose come HSTS può essere rischioso. Poiché questi cambiamenti sono irreversibili. Tuttavia, se vuoi andare nella tana del coniglio della sicurezza, posso consigliare vivamente il blog di Troy Hunt che è una delle principali ispirazioni dietro questo articolo.

Come utilizzare Xdotool per stimolare i clic del mouse e le sequenze di tasti in Linux
Xdotool è uno strumento da riga di comando gratuito e open source per simulare i clic del mouse e le sequenze di tasti. Questo articolo tratterà una b...
I 5 migliori mouse per computer ergonomici per Linux
L'uso prolungato del computer provoca dolore al polso o alle dita?? Soffri di rigidità articolare e devi continuamente stringerti la mano? Senti un do...
Come modificare le impostazioni del mouse e del touchpad utilizzando Xinput in Linux
La maggior parte delle distribuzioni Linux viene fornita con la libreria "libinput" per impostazione predefinita per gestire gli eventi di input su un...