Certificati e reverse proxy#
Reverse proxy#
NethSecurity fornisce un reverse proxy utilizzando nginx. Un reverse proxy, talvolta chiamato anche proxy pass, è un server che si trova davanti a uno o più web server e inoltra le richieste verso di essi. Può essere utilizzato per migliorare le prestazioni, la sicurezza e l’affidabilità.
In termini più semplici, un reverse proxy è come un vigile del traffico per i server web. Instrada le richieste in arrivo al server appropriato e restituisce le risposte.
I reverse proxy sono spesso utilizzati per migliorare le prestazioni memorizzando nella cache i contenuti statici e distribuendo il traffico su più server. Possono anche essere utilizzati per aumentare la sicurezza implementando l’endpoint TLS.
Nota
Il reverse proxy è disponibile solo sulla porta 443 (HTTPS) e non sulla porta 80 (HTTP).
Questa pagina consente di configurare le impostazioni di proxy pass, specificando se la regola si applica a un dominio o a un percorso. Per le configurazioni di dominio, è possibile selezionare un certificato. L’URL di destinazione determina dove vengono inoltrate le richieste in ingresso e il campo rete consentita offre la possibilità di limitare l’accesso a specifiche reti in formato CIDR. È possibile aggiungere una descrizione per maggiore chiarezza.
Per configurare un nuovo proxy pass, fare clic su Aggiungi reverse proxy e personalizzare le seguenti opzioni:
Tipo: scegliere tra Dominio o Percorso. Se il tipo èPercorso, inserire il percorso della risorsa iniziando con una “/” per le regole di corrispondenza (ad esempio,/resource-path). Se il tipo èDominio, inserire il nome di dominio completo per le regole di corrispondenza del sito web. Selezionare anche un certificato associato.URL di destinazione: specificare la posizione di inoltro per le richieste in arrivo (ad esempio,http://destination-server:port/path).Reti permesse: definire le reti IPv4/IPv6 consentite in formato CIDR. Per impostazione predefinita, accessibile da qualsiasi luogo.Descrizione: facoltativamente, aggiungere una descrizione per maggiore chiarezza.
Informazioni aggiuntive:
Header verso il server di destinazione: X-Forwarded-Proto, X-Forwarded-For, X-Real-IP sono sempre inviati.
Validazione del certificato: se la destinazione utilizza HTTPS, il certificato non viene validato per evitare errori su server configurati in modo errato.
Supporto WebSocket: tutti i reverse proxy supportano automaticamente i WebSocket.
Interazione con le regole di port forwarding#
Il reverse proxy utilizza solo la porta 443; se è configurata anche una regola di port forwarding sulla porta 443, la regola di port forwarding ha sempre la precedenza. In questo caso, il traffico HTTPS viene inoltrato secondo la regola di port forwarding e la regola di reverse proxy non viene applicata perché nessun traffico raggiunge il server web in esecuzione sul firewall stesso. Per utilizzare il reverse proxy, assicurarsi che non sia configurata alcuna regola di port forwarding sulla porta 443 per lo stesso indirizzo WAN.
Proxy sulla porta 80 (HTTP)#
NethSecurity 8 ascolta solo su HTTPS (porta 443) per le regole di reverse proxy. Questo differisce da NethSecurity 7, dove il reverse proxy ascoltava sia su HTTP (porta 80).
Durante la migrazione da NethSecurity 7, alcuni servizi o segnalibri utente potrebbero ancora utilizzare HTTP. Poiché NethSecurity 8 non ascolta sulla porta 80 per impostazione predefinita, tali collegamenti HTTP non raggiungeranno più il reverse proxy e potrebbero risultare non funzionanti per gli utenti.
Abilitare la porta 80 può esporre i servizi, inclusa la web UI, su canali non crittografati. Per questo motivo, l’approccio raccomandato è mantenere il reverse proxy in ascolto solo su un canale sicuro e fornire un reindirizzamento permanente (301) da HTTP a HTTPS.
Per creare un reindirizzamento globale da HTTP a HTTPS, accedere al terminale e inserire i seguenti comandi:
uci set nginx._cleartext=server
uci add_list nginx._cleartext.listen='80 default_server'
uci add_list nginx._cleartext.listen='[::]:80 default_server'
uci set nginx._cleartext.return='301 https://$host$request_uri'
uci set nginx._cleartext.server_name='_'
uci commit nginx
/etc/init.d/nginx reload
Dopo aver abilitato il reindirizzamento, accedere alla pagina delle regole del firewall e assicurarsi che la porta 80 sia aperta sul lato WAN per consentire le connessioni in ingresso.
Nascondere la versione del server web#
Per impostazione predefinita, il reverse proxy nginx include il proprio numero di versione negli header di risposta HTTP. Molte valutazioni delle vulnerabilità si basano sull’identificazione della versione del software, il che può generare falsi positivi quando le correzioni vengono retroportate senza modificare la versione riportata. Sebbene nascondere le informazioni sulla versione non migliori la sicurezza di per sé, può contribuire a limitare l’esposizione di vulnerabilità note e specifiche della versione agli strumenti di scansione automatizzati.
Per disabilitare la visualizzazione della versione di nginx negli header HTTP del reverse proxy, è necessario configurare la direttiva server_tokens nelle configurazioni del server nginx.
Per prima cosa, identificare le configurazioni del server nginx:
uci show nginx | grep "=server"
Questo mostrerà i blocchi server configurati nel sistema (ad esempio, nginx._lan=server, nginx.ns_88e3b6fd=server).
Quindi, per ciascun blocco server che si desidera configurare, impostare server_tokens su off. Ad esempio, per configurare il server _lan:
uci set nginx._lan.server_tokens='off'
uci commit nginx
reload_config
Se sono presenti ulteriori blocchi server personalizzati (come ns_88e3b6fd nell’esempio), applicare la stessa configurazione:
uci set nginx.ns_88e3b6fd.server_tokens='off'
uci commit nginx
reload_config
Per applicare questa impostazione globalmente a tutti i server reverse proxy contemporaneamente, è possibile utilizzare uno script:
for server in $(uci show nginx | grep "=server$" | cut -d. -f2 | cut -d= -f1); do
uci set nginx.$server.server_tokens='off'
done
uci commit nginx
reload_config
Certificati#
La pagina Certificati centralizza le funzionalità di gestione dei certificati, facilitando la gestione dei certificati sul firewall. Al primo avvio del firewall, viene generato automaticamente un certificato autofirmato. Questo certificato funge da opzione sicura predefinita.
La pagina di gestione dei certificati consente di caricare certificati personalizzati, richiedere certificati da Let’s Encrypt e gestire i certificati esistenti.
La pagina elenca tutti i certificati, evidenziando il certificato predefinito. Per impostare un certificato come certificato predefinito, fare clic sul pulsante Imposta come predefinito. Il certificato predefinito è quello servito automaticamente quando si accede all”interfaccia web utente, sia sulla porta 443, sia sulla 9090 o su una porta personalizzata.
Let’s Encrypt#
Let’s Encrypt è una Certificate Authority (CA) gratuita, automatizzata e aperta che fornisce certificati SSL/TLS per la protezione dei siti web. Questi certificati garantiscono una comunicazione crittografata tra i server web e i browser degli utenti, migliorando la sicurezza e la privacy su Internet. A differenza delle CA tradizionali, Let’s Encrypt offre certificati SSL tramite un sistema automatizzato, rendendoli accessibili ai proprietari e agli amministratori di siti web senza costi significativi o particolari competenze tecniche.
La pagina del certificato consente di richiedere certificati da Let’s Encrypt. Il processo è semplice e richiede una configurazione minima. È possibile specificare un nome significativo per il certificato e uno o più domini. Il certificato viene rinnovato automaticamente ogni 60 giorni.
Il processo di richiesta del certificato Let’s Encrypt prevede i seguenti passaggi:
fare clic sul pulsante Aggiungi certificato Let’s Encrypt;
specificare un nome significativo per il certificato;
specificare uno o più domini per il certificato;
fare clic sul pulsante Salva.
Il processo di validazione può essere eseguito in due modi:
Modalità standalone (validazione HTTP): la modalità standalone prevede l’arresto temporaneo del server web per consentire allo strumento client ACME di collegarsi direttamente alle porte richieste. Serve le challenge di autenticazione per dimostrare la proprietà del dominio, ottenendo e installando il certificato.
Validazione DNS: la validazione DNS richiede l’aggiunta di uno specifico record DNS TXT alla configurazione DNS del dominio. Il client ACME verifica la presenza di questo record per confermare la proprietà del dominio. Questo metodo è utile in situazioni in cui modificare la configurazione del server web risulta difficile o non è desiderato.
Quando viene selezionata la modalità standalone, assicurarsi che siano soddisfatti i seguenti requisiti:
Il firewall deve essere raggiungibile dall’esterno sulla porta 80. Il client acme:
associare temporaneamente alla porta 80 per servire le sfide di autenticazione
apri temporaneamente la porta 80 verso Internet pubblico per eseguire la convalida.
Una volta completata la convalida, la porta 80 viene chiusa automaticamente. Si noti che, se la porta 80 è inoltrata a un altro server, la convalida non andrà a buon fine.
I domini per cui si desidera il certificato devono essere nomi di dominio pubblici associati all’indirizzo IP pubblico del server. Assicurarsi di avere un nome DNS pubblico che punti al proprio server (è possibile verificare con siti come VDNS).
Selezionare la convalida DNS se il proprio provider DNS supporta l’accesso tramite API. Scegliere il provider DNS dal menu a discesa e inserire la chiave API e il segreto. Consultare la documentazione dei provider DNS di acme.sh per sapere quale chiave API e quale segreto sono richiesti dal proprio provider DNS. La convalida DNS è l’unica supportata per i certificati wildcard.
Il processo di generazione del certificato può richiedere alcuni minuti. Durante questo periodo, lo stato del certificato è In attesa.
Debug Let’s Encrypt#
Se la richiesta del certificato Let’s Encrypt fallisce, è possibile eseguire il debug del processo inserendo i seguenti comandi nel terminale:
uci set acme.@acme[0].debug=1
/etc/init.d/acme start
I messaggi di debug verranno stampati sull’output standard. Dopo che il problema è stato risolto, è possibile disabilitare il debug inserendo il seguente comando nel terminale:
uci revert acme
Certificato personalizzato#
L’utente può caricare un certificato personalizzato nel firewall.
Il processo prevede i seguenti passaggi:
fare clic sul pulsante Importa certificato
specificare un nome significativo per il certificato
trascinare e rilasciare il certificato, la chiave privata e, facoltativamente, il certificato della catena; assicurarsi che tutti i file caricati rispettino gli standard del formato PEM
fare clic sul pulsante Salva