Diventa Autore per CoreTech | Scopri di più
20/07/20 CoreTech,CoreTech Blog
Attualmente, nginx è il web server più popolare , battendo di recente Apache. È leggero, veloce, robusto e supporta tutti i principali sistemi operativi. È il server Web preferito per Netflix, WordPress.com e altri siti ad alto traffico. Un server nginx può gestire facilmente 10.000 connessioni HTTP inattive con un minimo di 2,5 MB di memoria. In questo articolo, forniremo suggerimenti sulla sicurezza del server nginx, mostrandoti come proteggere l'installazione di nginx.
Dopo aver installato nginx, è necessario acquisire una buona conoscenza delle sue impostazioni di configurazione, che si trovano nel file nginx.conf . Questo è il file di configurazione principale per nginx e pertanto la maggior parte dei controlli di sicurezza verrà eseguita utilizzando questo file. Per impostazione predefinita, è possibile trovare nginx.conf in [directory di installazione nginx] / conf su sistemi Windows e in / etc / nginx o / usr / local / etc / nginx su sistemi Linux. Potrebbe inoltre essere necessario apportare alcune modifiche ai file di configurazione dell'host virtuale, generalmente contenuti nella sottodirectory disponibile nei siti .
Quando installi nginx, include automaticamente molti moduli. Attualmente, non è possibile scegliere i moduli in fase di esecuzione. Per disabilitare determinati moduli, è necessario ricompilare nginx. Si consiglia di disabilitare tutti i moduli non necessari in quanto ciò ridurrà al minimo il rischio di potenziali attacchi limitando le operazioni consentite.
Per fare ciò, utilizzare l' opzione di configurazione durante l'installazione. Nell'esempio seguente, disabilitiamo il modulo autoindex , che genera elenchi di directory automatici, quindi ricompila nginx.
# ./configure --without-http_autoindex_module
# make
# make install
Per impostazione predefinita, la direttiva server_tokens in nginx visualizza il numero di versione di nginx. È direttamente visibile in tutte le pagine di errore generate automaticamente ma è presente anche in tutte le risposte HTTP nell'intestazione del server .
Ciò potrebbe comportare la divulgazione di informazioni: un utente non autorizzato potrebbe acquisire conoscenze sulla versione di nginx che si utilizza. È necessario disabilitare la direttiva server_tokens nel file di configurazione nginx impostando server_tokens off.
Per prevenire potenziali attacchi DoS su nginx, è possibile impostare limiti di dimensione del buffer per tutti i client. Puoi farlo nel file di configurazione di nginx usando le seguenti direttive:
client_body_buffer_size
: utilizzare questa direttiva per specificare la dimensione del buffer del corpo della richiesta client. Il valore di default è 8k o 16k, ma si raccomanda di impostare questo a partire da 1k: client_body_buffer_size 1k.client_header_buffer_size
: utilizzare questa direttiva per specificare la dimensione del buffer di intestazione per l'intestazione della richiesta client. Una dimensione del buffer di 1k è adeguata per la maggior parte delle richieste.client_max_body_size
: utilizzare questa direttiva per specificare la dimensione massima del corpo accettata per una richiesta client. Una direttiva 1k dovrebbe essere sufficiente, ma è necessario aumentarla se si ricevono caricamenti di file tramite il metodo POST.large_client_header_buffers
: utilizzare questa direttiva per specificare il numero massimo e la dimensione dei buffer da utilizzare per leggere le intestazioni di richieste client di grandi dimensioni. Una large_client_header_buffers 2 1kdirettiva imposta il numero massimo di buffer su 2, ciascuno con una dimensione massima di 1k. Questa direttiva accetterà URI di dati da 2 kB.Nota: alcune fonti suggeriscono che l'impostazione di tali limiti potrebbe prevenire potenziali attacchi di overflow del buffer se tali vulnerabilità vengono rilevate in nginx.
Ti suggeriamo di disabilitare tutti i metodi HTTP che non verranno utilizzati e che non devono essere implementati sul server Web. Se si aggiunge la seguente condizione nel blocco posizione del file di configurazione host virtuale nginx, il server consentirà solo i metodi GET, HEAD e POST e filtrerà i metodi come DELETE e TRACE.
location / {
limit_except GET HEAD POST { deny all; }
}
Un altro approccio è quello di aggiungere la seguente condizione alla sezione server (o blocco server). Può essere considerato più universale, ma dovresti stare attento con le ifdichiarazioni nel contesto della posizione .
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444; }
ModSecurity è un modulo open source che funziona come firewall per applicazioni web. Le sue funzionalità includono il filtro, il mascheramento dell'identità del server e la prevenzione degli attacchi null-byte. Il modulo consente inoltre di eseguire il monitoraggio del traffico in tempo reale. Si consiglia di seguire il manuale ModSecurity per installare il modulo mod_security al fine di rafforzare le opzioni di sicurezza.
Se ModSecurity non soddisfa le tue esigenze, puoi anche utilizzare altre soluzioni WAF gratuite .
L'accesso nginx e i log degli errori sono abilitati per impostazione predefinita e si trovano rispettivamente in logs / error.log e logs / access.log . Se si desidera modificare la posizione, è possibile utilizzare la direttiva error_log nel file di configurazione nginx. È inoltre possibile utilizzare questa direttiva per specificare i registri che verranno registrati in base al livello di gravità. Ad esempio, un livello di gravità critico farà sì che nginx registri i problemi critici e tutti i problemi che hanno un livello di gravità superiore a quello critico . Per impostare il livello di gravità su crit , impostare la direttiva error_log come segue:
error_log logs/error.log crit;
È possibile trovare un elenco completo dei livelli di gravità error_log nella documentazione ufficiale di nginx .
È inoltre possibile modificare la direttiva access_log nel file di configurazione nginx per specificare un percorso non predefinito per i registri di accesso. Infine, è possibile utilizzare la direttiva log_format per configurare il formato dei messaggi registrati come spiegato nella documentazione di nginx .
Se si monitorano e gestiscono continuamente i file di registro di nginx, è possibile comprendere meglio le richieste fatte al server Web e notare anche eventuali errori riscontrati. Questo ti aiuterà a scoprire eventuali tentativi di attacco e a identificare cosa puoi fare per ottimizzare le prestazioni del server.
È possibile utilizzare gli strumenti di gestione dei registri, come logrotate, per ruotare e comprimere i vecchi registri e liberare spazio su disco. Inoltre, il modulo ngx_http_stub_status_module fornisce l'accesso alle informazioni di base sullo stato. Puoi anche investire in nginx Plus , la versione commerciale di nginx, che fornisce il monitoraggio dell'attività in tempo reale di traffico, carico e altre metriche delle prestazioni.
Per rafforzare ulteriormente il server Web nginx, è possibile aggiungere diverse intestazioni HTTP. Ecco alcune delle opzioni che raccomandiamo.
Si utilizza l' intestazione della risposta HTTP X-Frame-Options per indicare se un browser deve essere autorizzato a eseguire il rendering di una pagina in <frame> o <iframe> . Ciò potrebbe impedire attacchi di clickjacking . Pertanto, si consiglia di abilitare questa opzione per il server nginx.
Per fare ciò, aggiungi il seguente parametro al file di configurazione nginx nella sezione server :
add_header X-Frame-Options "SAMEORIGIN";
HTTP Strict Transport Security (HSTS) è un metodo utilizzato dai siti Web per dichiarare che è necessario accedervi solo tramite una connessione protetta (HTTPS). Se un sito Web dichiara una politica HSTS, il browser deve rifiutare tutte le connessioni HTTP e impedire agli utenti di accettare certificati SSL non sicuri. Per aggiungere un'intestazione HSTS al tuo server nginx, puoi aggiungere la seguente direttiva alla sezione del tuo server:
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
La politica di sicurezza dei contenuti (CSP) protegge il tuo server Web da determinati tipi di attacchi, tra cui attacchi di cross-site scripting (XSS) e attacchi di iniezione di dati. È possibile implementare CSP aggiungendo il seguente esempio di intestazione Content-Security-Policy (tenere presente che l'intestazione effettiva deve essere configurata per soddisfare i requisiti univoci):
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
L' intestazione HTTP X-XSS-Protection è supportata da IE e Safari e non è necessaria per i browser moderni se si dispone di una forte politica di sicurezza dei contenuti. Tuttavia, per aiutare a prevenire XSS nel caso di browser meno recenti (che non supportano ancora CSP), è possibile aggiungere l'intestazione X-XSS Protection alla sezione del server :
add_header X-XSS-Protection "1; mode=block";
La configurazione predefinita di nginx consente di utilizzare vecchie versioni non sicure del protocollo TLS (secondo la documentazione ufficiale : protocolli ssl TLSv1 TLSv1.1 TLSv1.2). Questo può portare ad attacchi come l' attacco BEAST . Pertanto, si consiglia di non utilizzare i vecchi protocolli TLS e di modificare la configurazione per supportare solo versioni TLS più recenti e sicure.
Per fare ciò, aggiungi la seguente direttiva nella sezione server del file di configurazione nginx:
ssl_protocols TLSv1.2 TLSv1.3;
Inoltre, è necessario specificare le suite di crittografia per assicurarsi che non siano supportate suite vulnerabili. Per selezionare le migliori suite di cifratura, leggi il nostro articolo sull'indurimento delle cifrature TLS e aggiungi una direttiva ssl_ciphers alla sezione server per selezionare le cifrature (come suggerito nell'articolo sull'indurimento delle cifrature ). Si consiglia inoltre di aggiungere la seguente direttiva alla sezione server :
ssl_prefer_server_ciphers on;
Questa direttiva consentirà la decisione su quali cifre utilizzare saranno prese lato server e non lato client.
Come con qualsiasi altro software, si consiglia di aggiornare sempre il server nginx all'ultima versione stabile. I nuovi aggiornamenti contengono spesso correzioni per le vulnerabilità identificate nelle versioni precedenti, come la vulnerabilità di attraversamento di directory ( CVE-2009-3898 ) che esisteva nelle versioni nginx precedenti alla 0.7.63 e 0.8.x prima della 0.8.17. Gli aggiornamenti spesso includono anche nuove funzionalità di sicurezza e miglioramenti. Sul sito nginx.org, è possibile trovare avvisi di sicurezza in una sezione dedicata e notizie sugli ultimi aggiornamenti nella pagina principale.
Gixy è uno strumento open source che ti consente di controllare il tuo server web nginx per le configurazioni errate tipiche. Dopo aver preparato la configurazione di nginx, è sempre una buona idea verificarla con Gixy.
Se non si desidera configurare manualmente nginx, è possibile utilizzare uno strumento di configurazione visiva online gratuito reso disponibile da DigitalOcean.