Request Support  | Contact Sales

Diventa Autore per CoreTech | Scopri di più





Sicurezza nginx: come proteggere la configurazione del server

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 .

Passaggio 1. Disabilitare eventuali moduli nginx indesiderati

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

Passaggio 2. Disabilitare nginx server_tokens

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 .

Banner

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.

Passaggio 3. Controllo delle risorse e dei limiti 

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.

Passaggio 4. Disabilitare eventuali metodi HTTP indesiderati

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)$ ) {

Banner

    return 444; }

Passaggio 5. Installare ModSecurity per il server Web nginx

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 .

Passaggio 6. Impostazione e configurazione dei registri degli errori e di accesso nginx

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 .

Passaggio 7. Monitorare i registri degli errori e di accesso 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.

Passaggio 8. Configurare Nginx per includere le intestazioni di sicurezza

Per rafforzare ulteriormente il server Web nginx, è possibile aggiungere diverse intestazioni HTTP. Ecco alcune delle opzioni che raccomandiamo.

X-Frame-Options

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";

Strict-Transport-Security

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";

Protezione CSP e X-XSS

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";

Passaggio 9. Configurare SSL e Cipher Suites

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.

Passaggio 10. Aggiornare il server regolarmente

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.

Passaggio 11. Controlla la tua configurazione con Gixy

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.

Passaggio 12. Non è necessario farlo manualmente

Se non si desidera configurare manualmente nginx, è possibile utilizzare uno strumento di configurazione visiva online gratuito reso disponibile da DigitalOcean.


Articoli su Acunetix

Trovare le vulnerabilità dei siti web prima degli HackerL'importanza della convalida delle correzioni: lezioni da GoogleSDLC agile e sicuro - Best practiceIn che misura le aziende gestiscono la sicurezza delle applicazioni Web?Cross-Origin Resource Sharing (CORS) e intestazione Access-Control-Allow-OriginCosa sono i reindirizzamenti aperti?DevSecOps: come arrivarci da DevOpsIl bigino su SQL Injection per sviluppatoriSfruttare SSTI in ThymeleafSicurezza nginx: come proteggere la configurazione del serverRafforzamento del sistema Web in 5 semplici passaggiCos'è la sicurezza del sito Web - Come proteggere il tuo sito Web dall'hackingRapporto sulle vulnerabilità delle applicazioni Web Acunetix 2020Perché l'elenco delle directory è pericoloso?Cosa sono gli hack di Google?Cosa è l'attacco BEASTWeb Shells in Action - Rilevazione e prevenzione - parte 5Web Shells in Action - parte 4Mantenere le Web Shells sotto copertura - parte 3Introduzione alle web shell - parte 2: 101 Uso di PHPIntroduzione alle web shell - parte 1Debunking 5 miti sulla postura della sicurezza informaticaIniezioni di NoSQL e come evitarleConfigurazione passo passo di Acunetix con JenkinsCosa sono i riferimenti a oggetti diretti non sicuriAnche il più forte cade: un'iniezione SQL in Sophos XG FirewallAcunetix rilascia Business Logic RecorderCome recuperare un sito Web compromessoCome difendersi dagli hacker Black Hat durante la pandemia COVID-19Che cos'è l'inclusione remota dei file (RFI)?Apache Security - 10 consigli per un'installazione sicuraUn nuovo sguardo sugli attacchi correlati al proxy inversoVulnerabilità delle password comuni e come evitarleTutto quello che devi sapere sugli attacchi Man-in-the-MiddleChe cosa sono le iniezioni HTMLRed Teaming – 5 consigli su come farlo in modo sicuroTesta le tue competenze XSS utilizzando siti vulnerabiliPerché hacker malintenzionati hanno messo gli occhi sugli ospedaliPratiche di codifica sicura – I tre principi chiaveLa maledizione delle vecchie librerie JavaMutation XSS nella ricerca GoogleIgnorare SOP utilizzando la cache del browserCome e perché evitare reindirizzamenti e inoltri non convalidati?Dirottamento di sessione e altri attacchi di sessioneCome abbiamo trovato un altro XSS in Google con AcunetixChe cos'è un buffer overflowChe cos'è l'overflow di IntegerChe cos'è HSTS e perché dovrei usarlo?Che cosa è OS Command InjectionVulnerabilità delle entità esterne XML in Internet ExplorerCoreTech assicura protezione dei siti Web con AcunetixCoreTech distributore Acunetix a fianco dei partner per la CyberSecurityCyberSecurity applicativa, nuova opportunità per voi!