Ricerca nel sito web

Come installare ModSecurity per Nginx su Debian/Ubuntu


È desiderio di ogni sviluppatore implementare applicazioni Web sicure che siano al riparo dalle minacce. Nella maggior parte dei casi, questo è facile a dirsi che a farsi. La frequenza dei siti web vittime di attacchi continua ad aumentare poiché gli hacker continuano a sfruttare tutti i vettori di attacco a loro disposizione.

La sicurezza delle WebApp può rappresentare una sfida enorme, soprattutto a causa della prevalenza di strumenti dannosi come rootkit, scanner, bot e altri malware. Anche se venire violati può sembrare una questione di quando se non se, è prudente implementare alcune misure di sicurezza adeguate per salvaguardare le tue applicazioni web.

Uno degli strumenti in grado di fornire un discreto livello di sicurezza contro gli attacchi si chiama ModSecurity. Si tratta di un Web Application Firewall (WAF) gratuito e open source che protegge le tue applicazioni web da una vasta gamma di attacchi di livello 7 come lo scripting cross-site (XSS), SQL injection, session hijacking e molto altro.

In questa guida ti mostreremo come installare e configurare ModSecurity per funzionare con Nginx su distribuzioni Linux basate su Debian come Ubuntu.

Passaggio 1: installare le dipendenze

Per iniziare l'installazione, sono necessarie alcune dipendenze software affinché l'installazione abbia esito positivo. Ma prima aggiorna gli elenchi dei pacchetti e aggiorna i repository come segue.

sudo apt update

Successivamente, installa le dipendenze come segue.

sudo apt install make gcc build-essential autoconf automake libtool libfuzzy-dev ssdeep gettext pkg-config libcurl4-openssl-dev liblua5.3-dev libpcre3 libpcre3-dev libxml2 libxml2-dev libyajl-dev doxygen libcurl4 libgeoip-dev libssl-dev zlib1g-dev libxslt-dev liblmdb-dev libpcre++-dev libgd-dev

Passaggio 2: installa l'ultima versione di Nginx


Il prossimo passo sarà installare il browser web Nginx. Per installare la versione più recente, la installeremo dal
ondrej/nginx-mainline PPA w che è attualmente gestito da uno sviluppatore Debian dal 2000.

Per aggiungere il PPA al tuo sistema Ubuntu locale esegui il comando:

sudo add-apt-repository ppa:ondrej/nginx-mainline -y

Successivamente, aggiorna gli elenchi dei pacchetti e installa l'ultima versione di Nginx come segue

sudo apt update
sudo apt install nginx-core nginx-common nginx nginx-full

In genere, è abilitato solo il repository predefinito. È prudente abilitare il repository del codice sorgente in modo da poter, in seguito, scaricare il codice sorgente Nginx nel passaggio successivo.

Per raggiungere questo obiettivo, modifica il file del repository Nginx.

sudo vim /etc/apt/sources.list.d/ondrej-ubuntu-nginx-mainline-*.list

Individua e decommenta questa riga per abilitare il repository del codice sorgente:

deb-src http://ppa.launchpad.net/ondrej/nginx-mainline/ubuntu/ focal main

Il file dovrebbe ora apparire come mostrato.

Salva le modifiche ed esci.

Quindi aggiorna l'indice del pacchetto.

sudo apt update

Passaggio 3: scarica il pacchetto sorgente Nginx

Per compilare il modulo dinamico ModSecurity, dobbiamo scaricare il pacchetto del codice sorgente Nginx. Per fare ciò, creeremo innanzitutto una directory Nginx nel percorso /usr/local/src/ per ospitare il file del pacchetto del codice sorgente Nginx.

sudo mkdir -p /usr/local/src/nginx 

Successivamente, assegna le autorizzazioni alla directory come mostrato. Assicurati di sostituire il nome utente con il tuo nome utente sudo effettivo.

sudo chown username:username -R /usr/local/src/

Successivamente, accedi alla directory dei sorgenti Nginx:

cd /usr/local/src/nginx 

Procedi e scarica i pacchetti di file sorgente Nginx:

sudo apt source nginx

Molto probabilmente ti verrà visualizzato il seguente errore:

W: Download is performed unsandboxed as root as file 'nginx_1.19.5.orig.tar.gz' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

Questo non è niente che ti faccia agitare. Quindi, ignora semplicemente l'errore.

Puoi dare un'occhiata al file sorgente usando il comando ls.

ls -l

Assicurati che la versione del codice sorgente coincida con la versione di Nginx installata.

nginx -v

Passaggio 4: installare la libreria Libmodsecurity3

Libmodesecurity è una libreria Modsecurity che gestisce il filtraggio HTTP per le tue applicazioni. Esistono due modi per installarlo. Puoi utilizzare il gestore pacchetti apt come mostrato

sudo apt install libmodsecurity3

L'altro approccio è installarlo da una fonte preferibile poiché fornisce la versione più recente. Per avviare l'installazione di Libmodsecurity dal sorgente, clonare il repository git come mostrato:

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/

Passare alla directory clonata:

cd /usr/local/src/ModSecurity/

Impegnarsi a installare i sottomoduli

sudo git submodule init
sudo git submodule update

Successivamente, crea l'ambiente utilizzando i comandi seguenti.

sudo ./build.sh 
sudo ./configure

Ancora una volta, ignora l'errore visualizzato di seguito.

fatal: No names found, cannot describe anything.

Quindi compila il codice sorgente e installa altre utilità utilizzando il seguente comando make. L'operazione richiede circa 25 minuti ed è necessaria un po' di pazienza.

sudo make -j4

Una volta completato, installa le librerie.

sudo make install

Passaggio 5: scarica e compila il connettore Nginx ModSecurity v3

Il passaggio successivo è scaricare e compilare il connettore ModSecurity Nginx. Il connettore, come suggerisce il nome, collega la libreria Libmodsecurity al server web Nginx. Per scaricare il connettore Modsecurity, clonalo dal repository GitHub come segue.

git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/

Passare alla directory clonata.

cd /usr/local/src/nginx/nginx-1.21.3/

Procedi e installa le dipendenze di build

sudo apt build-dep nginx
sudo apt install uuid-dev

Successivamente, compila il modulo ModSecurity Nginx Connector con il flag --with-compat. L'opzione --with-compat rende il modulo ModSecurity Nginx Connector compatibile a livello binario con la libreria Nginx corrente.

sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx

Fatto ciò, crea il modulo ModSecurity Nginx Connector utilizzando il comando make.

sudo make modules

Il modulo viene salvato come objs/ngx_http_modsecurity_module.so. È necessario copiare questo modulo nella directory /usr/share/nginx/modules/ come segue.

sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/

Passaggio 6: caricare il modulo connettore ModSecurity Nginx

Per caricare il modulo connettore Nginx, accedi innanzitutto al file di configurazione principale di Nginx.

sudo vim /etc/nginx/nginx.conf

Aggiungi la riga seguente appena sotto le prime righe

load_module modules/ngx_http_modsecurity_module.so;

Inoltre, aggiungi le seguenti righe nella sezione http {...}. Ciò abilita ModSecurity per tutti gli host virtuali Nginx.

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;

Salvare le modifiche ed uscire dal file.

Successivamente, crea la directory /etc/nginx/modsec/ che memorizzerà la configurazione ModSecurity.

sudo mkdir /etc/nginx/modsec/

Successivamente, copia il file di configurazione di ModSecurity come segue.

sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

Quindi aprire il file di configurazione.

sudo vim /etc/nginx/modsec/modsecurity.conf

Individua la riga che inizia con la direttiva SecRuleEngine.

SecRuleEngine DetectionOnly

Questa riga indica a ModSecurity di registrare solo le transazioni HTTP ma non intraprende alcuna azione di fronte a un attacco a un'app Web. È necessario modificarlo in modo che Modsecurity non solo rilevi ma blocchi anche gli attacchi web.

Cambia la riga nella riga sottostante

SecRuleEngine On

Salvare le modifiche ed uscire dal file.

Successivamente, crea il file /etc/nginx/modsec/main.conf.

sudo vim  /etc/nginx/modsec/main.conf

Aggiungi questa riga per fare riferimento al file di configurazione /etc/nginx/modsec/modsecurity.conf.

Include /etc/nginx/modsec/modsecurity.conf

Salvare le modifiche ed uscire dal file.

Inoltre, copiare il file di mapping Unicode.

sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

Quindi testa la configurazione di Nginx.

sudo nginx -t

Il test dovrebbe avere successo. In caso contrario, torna indietro e controlla se tutte le modifiche apportate sono corrette.

Quindi, infine, riavvia Nginx per applicare tutte le modifiche apportate.

sudo systemctl restart nginx

E verifica che Nginx funzioni come previsto.

sudo systemctl status nginx

Passaggio 7: Scarica il set di regole OWASP

Affinché ModSecurity possa proteggere le tue applicazioni web, devi specificare le regole che rileveranno le attività sospette e le bloccheranno. Per iniziare, è preferibile installare i set di regole esistenti che ti aiuteranno ad imparare i fondamenti.

L'OWASP Core Rule Set (CRS) è un set di regole gratuito, open source e gestito dalla comunità che fornisce regole per scongiurare vettori di attacco comuni come SQL injection, Scripting cross-site (XSS).

Scarica il set di regole principali OWASP da Github come mostrato utilizzando il comando wget.

wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz

Estrai il file compresso.

tar xvf v3.3.0.tar.gz

Assicurati di spostare la directory non compressa nel percorso /etc/nginx/modsec/.

sudo mv coreruleset-3.3.0/ /etc/nginx/modsec/

Quindi rinomina il file crs-setup.conf.example in crs-setup.conf.

sudo mv /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf

Ancora una volta, torna al file di configurazione di ModSecurity.

sudo vim /etc/nginx/modsec/main.conf

E aggiungi le seguenti righe.

Include /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf
Include /etc/nginx/modsec/coreruleset-3.3.0/rules/*.conf

Il file ora dovrebbe avere 3 righe:

Salva il file e, ancora una volta, riavvia Nginx.

sudo systemctl restart nginx

Passaggio 8: testare ModSecurity

Infine, effettueremo un test ModSecurity e confermeremo che è in grado di rilevare e bloccare il traffico HTTP sospetto.

Modificheremo il file di configurazione di ModSecurity e creeremo una regola di blocco che bloccherà l'accesso a un determinato URL quando si accede da un browser web.

sudo vim /etc/nginx/modsec/modsecurity.conf

Aggiungi questa riga appena sotto la direttiva SecRuleEngine On

SecRule ARGS:testparam "@contains test" "id:254,deny,status:403,msg:'Test Successful'"

Puoi impostare i tag 'id' e 'msg' sui tuoi valori preferiti.

Salva le modifiche e riavvia Nginx.

sudo systemctl restart nginx

Ora avvia il browser e visita l'URL seguente con il suffisso ?testparam=test

http://server-ip/?testparam=test

Dovresti ricevere un errore 403 "Non consentito". Ciò indica che stai tentando di accedere a una risorsa vietata sul server web.

Inoltre, puoi controllare i log degli errori di Nginx per confermare che il client è stato bloccato

cat /var/log/nginx/error.log | grep "Test Successful"

Questa era una panoramica di come impostare Modsecurity con Nginx su Debian e Ubuntu. Ci auguriamo che questo sia stato utile.