GNU/Linux >> Linux Esercitazione >  >> Linux

Come rafforzare e proteggere il server Web NGINX in Linux

Nginx è probabilmente uno dei server Web gratuiti e opensource più utilizzati per l'hosting di siti Web ad alto traffico. È noto per la sua stabilità, prestazioni eccezionali, basso consumo di risorse e configurazione snella. Alcuni dei siti popolari forniti da Nginx includono WordPress.com, GitHub, Netflix, Airbnb, Hulu, Eventbrite, Pinterest e SoundCloud per citarne alcuni.

Sebbene potenti e stabili, le configurazioni predefinite non sono sicure e sono necessarie ulteriori modifiche per rafforzare il server Web e dargli la sicurezza tanto necessaria per prevenire attacchi e violazioni.

In questo articolo, analizzeremo alcuni dei passaggi che puoi eseguire per rafforzare e proteggere il tuo server web Nginx e ottenere il massimo da esso.

1) Implementa il certificato SSL

Uno dei passaggi preliminari e cruciali per rafforzare il tuo server web Nginx è proteggerlo utilizzando un certificato SSL. Il certificato SSL è un certificato digitale crittografico che crittografa il traffico tra il tuo server web e i browser web dei visitatori del tuo sito. Inoltre costringe il tuo sito a utilizzare il protocollo HTTPS sicuro e a eliminare HTTP che invia il traffico in testo normale. In questo modo, la comunicazione avanti e indietro è protetta e protetta dagli hacker che potrebbero tentare di intercettare e rubare informazioni riservate come nomi utente, password e informazioni sulla carta di credito.

Puoi usufruire del certificato SSL gratuito Let's Encrypt che è facile da installare e configurare ed è valido per 90 giorni. Una volta installato, puoi verificare la forza della crittografia SSL testando il tuo dominio su SSL Labs . I risultati sono mostrati di seguito.

Come puoi vedere, il dominio che stiamo utilizzando ha ottenuto un voto B, a causa del supporto del protocollo debole evidenziato in giallo. Dobbiamo ancora apportare alcune modifiche per portarlo al grado A. Vediamo come possiamo migliorare il supporto del protocollo nel passaggio successivo.

2) Disabilita i protocolli SSL/TLS deboli

Come hai visto dai risultati, l'implementazione di SSL non implica necessariamente che il tuo sito sia completamente protetto. Le versioni deprecate come TLS 1.0, TLS 1.1 e SSL 3 sono considerate deboli e presentano vulnerabilità che gli hacker possono sfruttare e alla fine compromettere il tuo server web. Questi protocolli sono soggetti a vulnerabilità come POODLE, BEAST e CRIME.

Infatti, i browser web più diffusi e utilizzati hanno annunciato la fine del supporto per TLS 1.0 e TLS 1.1 entro le scadenze indicate.

  • Nome browser           Data
  • Google Chrome           Gennaio 2020
  • Mozilla Firefox             marzo 2020
  • Safari/Webkit               Marzo 2020
  • Microsoft Edge             giugno 2020

Con queste informazioni a portata di mano, sarebbe prudente attenersi ai protocolli di sicurezza più recenti e, al momento della stesura di questo articolo, l'ultimo protocollo è TLS 1.2 con TLS 1.3 previsto per la fine del 2020.

Per implementare TLS 1.2 e TLS 1.3, modificheremo 2 file:

  • /etc/nginx/nginx.conf  –  Questo è il file di configurazione di nginx principale
  • /etc/nginx/sites-available/example.com (o /default)

Se stai utilizzando Let's Encrypt SSL, assicurati di modificare i seguenti file

  • /etc/nginx/nginx.conf
  •  /etc/letsencrypt/options-ssl-nginx.conf

Utilizzare i seguenti passaggi per disabilitare i protocolli SSL/TLS deboli

Passaggio 1) Modifica il file nginx.conf

Innanzitutto, assicurati di eseguire un backup del file /etc/nginx/nginx.conf prima di apportare modifiche. Quindi apri il file utilizzando l'editor di testo di tua scelta

$ sudo vi /etc/nginx/nginx.conf

Individua la riga seguente

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE

Per disabilitare i protocolli deboli, elimina semplicemente i protocolli TLSv1 e TLSv1.1 e aggiungi TLSv1.2 e TLSv1.3 alla fine.

ssl_protocols TLSv1.2  TLSv1.3 ; # Dropping SSLv3, ref: POODLE

Questo dovrebbe apparire come segue alla riga 36

Salva ed esci dal file di configurazione.

Passaggio 2) Modifica il file di blocco del server Nginx

I protocolli obsoleti potrebbero essere ancora presenti nei rispettivi file di configurazione del blocco del server Nginx. I file di configurazione del blocco sono contenuti nella directory /etc/nginx/sites-available/.

Pertanto, procedi e modifica il tuo file di configurazione del blocco

$ sudo vi /etc/nginx/sites-available/example.com
OR
$ sudo vi /etc/nginx/sites-available/default

Come prima, scorri e individua la riga seguente

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Ancora una volta, elimina il protocollo TLSv1 e TLSv1.1 e aggiungi TLSv1.3 alla fine.

NOTA: Se stai usando Let's Encrypt SSL, modifica il file SSL:

$ sudo vi /etc/letsencrypt/options-ssl-nginx.conf

Affinché le modifiche persistano, riavvia il server web Nginx

$ sudo systemctl restart nginx

Ora vai al test SSL Labs e testa ancora una volta il tuo dominio. Questa volta dovresti ottenere una valutazione A come mostrato.

3) Impedisci la divulgazione delle informazioni

Parte del rafforzamento del tuo server comporta limitare il più possibile la divulgazione di informazioni sul tuo server web. Le informazioni possono essere trapelate tramite intestazioni HTTP o segnalazioni di errori. Alcune di queste informazioni includono la versione di Nginx che stai utilizzando e non vorresti rivelarle agli hacker.

Per impostazione predefinita, Nginx visualizza le informazioni sull'intestazione HTTP quando esegui il comando:

$ curl -I http://localhost

Dall'output sulla seconda riga, puoi vedere che la versione di Nginx e il sistema operativo su cui è in esecuzione sono stati divulgati

Server:nginx/1.14.0 (Ubuntu)

La versione verrebbe visualizzata anche su un browser Web se viene visualizzata una pagina di errore come una pagina di errore 404 come mostrato.

Per evitare questa perdita di informazioni, modifica nginx.conf file e nella sezione http {, decommenta la riga seguente

server_tokens off;

Salva le modifiche ed esci. Quindi riavvia il server web per riflettere le modifiche.

$ sudo systemctl restart nginx

Ora ricarica la pagina di errore e nota la differenza. La versione e il sistema operativo Nginx in esecuzione sono stati omessi.

Un altro modo per verificare quante informazioni stanno perdendo dal tuo server web è visitare il Sito della firma del server e controlla il tuo dominio. Se tutto va bene, otterrai il seguente output.

4)  Sbarazzati dei metodi HTTP indesiderati

Un'altra buona pratica è disabilitare i protocolli indesiderati che non verranno implementati dal server web. La riga seguente consentirà l'implementazione dei metodi GET, POST e HEAD ed escluderà tutti gli altri metodi inclusi TRACE e DELETE. Aggiungi la seguente riga nel file del blocco del server.

location / {
limit_except GET HEAD POST { deny all; }
}

5) Disabilita le suite di crittografia deboli

Oltre all'implementazione di SSL, il tuo obiettivo è disabilitare le crittografie deboli e insicure, comprese le crittografie RC4. Questi vengono forniti in bundle per impostazione predefinita esclusivamente allo scopo di compatibilità con le versioni precedenti di Nginx e non ci sono buone ragioni per averli poiché fungono da potenziali vulnerabilità che possono essere sfruttate. Pertanto, nel tuo file ssl.conf, sostituisci i cifrari con la seguente suite di cifratura.

'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

6) Rimuovi tutti i moduli non necessari

Per ridurre ulteriormente il panorama delle minacce, è consigliabile rimuovere tutti i moduli non necessari dalle impostazioni predefinite del server. Le best practice richiedono di mantenere un profilo snello e di abilitare solo i moduli utilizzati per fornire contenuti dal server web. Prestare attenzione, tuttavia, a non disinstallare o rimuovere i moduli che potrebbero essere necessari. Come consiglio, esegui i test in un QA o in un ambiente di test prima di decidere quali moduli devono essere disabilitati e quali sono necessari per il tuo server web.

7) Impedisci un migliore overflow

Nella gestione della memoria, un buffer è una posizione di archiviazione che ospita temporaneamente i dati mentre iniziano a essere trasferiti da una posizione di memoria a un'altra.

Quando il volume dei dati supera la capacità del buffer di memoria, si verifica un overflow del buffer. In altre parole, gli overflow del buffer si verificano quando un programma scrive più dati su un blocco di memoria che può contenere o gestire.

Un utente malintenzionato può sfruttare questa vulnerabilità per inviare codice dannoso che può compromettere un sistema. Come pratica standard, si consiglia di apportare alcune modifiche al server Web per mitigare tali problemi. Aggiungi le righe di codice seguenti al file nginx.conf.

##buffer policy
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
##end buffer policy

8) Prevenire gli attacchi XSS

Un attacco XSS (cross-site scripting) è un attacco in cui un hacker utilizza un'applicazione Web per iniettare codice dannoso o uno script lato browser in un sito attendibile. Quando un visitatore del sito visita il sito, lo script viene scaricato e può accedere a varie risorse del browser come cookie e token di sessione.

Una delle misure di prevenzione contro questo tipo di attacco consiste nell'aggiungere la riga sottostante nel file ssl.conf.

add_header X-XSS-Protection "1; mode=block";

9) Evita gli attacchi di clickjacking

Per evitare attacchi di clickjacking, aggiungi X-Frame-Options nell'intestazione HTTP nel file nginx.conf come mostrato

add_header X-Frame-Options "SAMEORIGIN";

Al termine, salva e riavvia il server web Nginx.

10) Nega programmi utente automatici

Per mantenere il tuo server al sicuro da bot e altri script automatizzati che potrebbero essere implementati dagli aggressori per recuperare informazioni dal tuo sito, è prudente negare esplicitamente specifici programmi utente che alla fine possono portare ad attacchi di negazione del servizio DOS. Aggiungi la seguente riga nel file nginx.conf.

if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}

11) Impedisci il collegamento a caldo delle immagini

L'hotlinking è una pratica in cui un utente collega un'immagine al tuo sito Web invece di caricare direttamente l'immagine sul proprio sito. Quando ciò accade, la tua immagine appare sul loro sito e il rovescio della medaglia è che finisci per pagare una larghezza di banda extra.

Per evitare che ciò accada, cerca la direttiva location all'interno del file di configurazione di Nginx e aggiungi il seguente snippet

# Stop deep linking or hot linking
location /images/ {
  valid_referers none blocked www.example.com example.com;
   if ($invalid_referer) {
     return   403;
   }
}

Puoi anche specificare le estensioni dell'immagine come mostrato:

valid_referers blocked www.example.com example.com;
if ($invalid_referer) {
    rewrite ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.example.com/banned.jpg last
}

12)  Tieni aggiornato Nginx

Facile vero? Mantenere aggiornato il tuo server web è uno dei modi in cui puoi proteggere il tuo server. L'aggiornamento del tuo server web applica le patch richieste che risolvono le vulnerabilità preesistenti che possono essere sfruttate dagli hacker per compromettere il tuo server.

Questo è stato un riepilogo di alcune delle misure chiave che puoi adottare per rafforzare il tuo server web Nginx e proteggerlo dalle comuni tecniche di sfruttamento. Questo farà molto per proteggere i file del tuo sito web e anche i visitatori del tuo sito.

Leggi anche :Come configurare NGINX come bilanciatore di carico TCP/UDP in Linux


Linux
  1. Che cos'è un server Web e come funziona un server Web?

  2. Come installare Nginx Web Server su Linux

  3. Come risolvere la vulnerabilità DROWN nel server Web Apache/NGINX e SMTP?

  4. Come installare e proteggere PostgreSQL Server su RockyLinux 8

  5. Come installare RabbitMQ Server ed Erlang su Linux

Come installare Nginx su un server cloud Arch Linux

Come aggiungere il supporto PHP-FPM su Apache e Nginx Web Server su Ubuntu 18.04

Come installare e configurare Caddy Web Server con PHP su Rocky Linux 8

Come installare e configurare il server Web Nginx su Oracle Linux 8

Come installare e configurare il server DNS in Linux

Come installare Nginx su Rocky Linux 9