GNU/Linux >> Linux Esercitazione >  >> Cent OS

Installa LibModsecurity Web Application Firewall con Nginx su CentOS 8

LibModSecurity è un firewall per applicazioni Web gratuito e open source che può essere utilizzato per proteggere un server Nginx da diversi tipi di attacchi informatici. Viene fornito con un set di regole di base che include SQL injection, cross-site scripting, Trojan e molti altri. Funziona monitorando il traffico HTTP in tempo reale e combattendo le vulnerabilità utilizzando il set di regole di base ModSecurity OWASP. Può essere utilizzato con Apache, Nginx e IIS e compatibile anche con Debian, Ubuntu e CentOS.

In questo tutorial, ti mostreremo come scaricare e compilare LibModSecurity con supporto Nginx su CentOS 8.

Requisiti

  • Un server che esegue CentOS 8.
  • Sul server è configurata una password di root.

Per iniziare

Prima di iniziare, aggiorna il tuo server con l'ultima versione utilizzando il seguente comando:

dnf update

Una volta che il tuo server è aggiornato, riavvialo per applicare le modifiche.

Installa i repository e le dipendenze richiesti

Innanzitutto, installa il repository EPEL e REMI sul tuo sistema. Puoi installarli con il seguente comando:

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Quindi, installa tutte le dipendenze richieste con il seguente comando:

dnf install gcc-c++ flex bison yajl curl-devel zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config wget openssl openssl-devel nano

Una volta installati tutti i pacchetti, puoi installare altre dipendenze utilizzando il repository di PowerTool:

dnf --enablerepo=PowerTools install doxygen yajl-devel

Quindi, installa GeoIP utilizzando il repository REMI eseguendo il comando seguente:

dnf --enablerepo=remi install GeoIP-devel

Una volta installati tutti i pacchetti, puoi procedere al passaggio successivo.

Scarica e compila LibModsecurity

Innanzitutto, dovrai scaricare il sorgente LibModsecurity e compilarlo sul tuo sistema. Per farlo, cambia la directory in /opt e scarica l'ultima versione di LibModsecurity dal repository Git:

cd /opt/
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity

Quindi, cambia la directory in ModSecurity e scarica il codice libInjection con il seguente comando:

cd ModSecurity
git submodule init
git submodule update

Quindi, configura LibModsecurity usando il seguente comando:

./build.sh
./configure

Infine, compila e installa LibModSecurity con il seguente comando:

make
make install

A questo punto, LibModsecurity è stato installato sul tuo sistema. Ora puoi procedere all'installazione di Nginx con il supporto di LibModsecurity.

Scarica e compila Nginx con il supporto di LibModsecurity

Innanzitutto, dovrai creare un utente di sistema e un gruppo per Nginx. Puoi crearlo con il seguente comando:

useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx

Successivamente, dovrai scaricare Nginx e compilarlo con il supporto di LibModsecurity.

Per farlo, prima scarica il connettore ModSecurity-nginx dal repository Git con il seguente comando:

cd /opt
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

Quindi, scarica l'ultima versione stabile di Nginx con il seguente comando:

wget http://nginx.org/download/nginx-1.17.6.tar.gz

Una volta scaricato, estrai il file scaricato utilizzando il seguente comando:

tar -xvzf nginx-1.17.6.tar.gz

Quindi, cambia la directory Nginx e configurala con il seguente comando:

cd nginx-1.17.6
./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/opt/ModSecurity-nginx

Quindi, installa Nginx con il seguente comando:

make
make install

A questo punto, Nginx è stato installato con il supporto di LibModsecurity. Ora puoi procedere con la configurazione di Nginx.

Confgure Nginx con ModSecurity

Innanzitutto, dovrai copiare il file di configurazione ModSecurity di esempio dalla directory di origine di Nginx alla directory di configurazione di Nginx.

Puoi copiarli con il seguente comando:

cp /opt/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /opt/ModSecurity/unicode.mapping /usr/local/nginx/conf/

Quindi, crea un collegamento simbolico del binario Nginx al percorso /usr/sbin/ con il seguente comando:

ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

Quindi, crea la directory di registro Nginx con il seguente comando:

mkdir /var/log/nginx

Quindi, apri il file di configurazione di Nginx con il seguente comando:

nano /usr/local/nginx/conf/nginx.conf

Apporta le seguenti modifiche:

user  nginx;
worker_processes  1;
pid  /run/nginx.pid;
events {
    worker_connections  1024;
}


http {
    include	  mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
	listen       80;
        server_name  your-server-ip;
        modsecurity  on;
        modsecurity_rules_file  /usr/local/nginx/conf/modsecurity.conf;
        access_log  /var/log/nginx/access.log;
        error_log  /var/log/nginx/error.log;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Salva e chiudi il file quando hai finito. Quindi, controlla Nginx per eventuali errori di sintassi con il seguente comando:

nginx -t

Dovresti vedere il seguente output:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

A questo punto, Nginx è stato configurato. Puoi procedere con la creazione di un file di servizio systemd per Nginx.

Crea un file di servizio Systemd per Nginx

Successivamente, dovrai creare un file systemd per gestire il servizio Nginx. Puoi crearlo con il seguente comando:

nano /etc/systemd/system/nginx.service

Aggiungi le seguenti righe:

[Unit]
Description=The nginx server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Salva e chiudi il file quando hai finito. Quindi, ricarica il demone systemd con il seguente comando:

systemctl daemon-reload

Quindi, avvia il servizio Nginx e abilitalo all'avvio dopo il riavvio del sistema con il seguente comando:

systemctl start nginx
systemctl enable --now nginx

Dovresti vedere il seguente output:

Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /etc/systemd/system/nginx.service.

Quindi, verifica il servizio Nginx con il seguente comando:

systemctl status nginx

Dovresti vedere il seguente output:

? nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-12-30 10:20:01 EST; 41s ago
  Process: 17730 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 17728 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 17727 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 17732 (nginx)
    Tasks: 2 (limit: 6102)
   Memory: 5.0M
   CGroup: /system.slice/nginx.service
           ??17732 nginx: master process /usr/sbin/nginx
           ??17733 nginx: worker process

Dec 30 10:20:00 nginx systemd[1]: Starting The nginx HTTP and reverse proxy server...
Dec 30 10:20:00 nginx nginx[17728]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Dec 30 10:20:00 nginx nginx[17728]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Dec 30 10:20:01 nginx systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Dec 30 10:20:01 nginx systemd[1]: Started The nginx HTTP and reverse proxy server.

A questo punto, Nginx è stato avviato e funzionante. Ora puoi procedere con la configurazione di ModSecurity.

Configura ModeSecurity

Per impostazione predefinita, ModSecurity è impostato sulla modalità di solo rilevamento. Quindi dovrai attivare il motore delle regole ModSecurity. Puoi farlo modificando il file modsecurity.conf:

nano /usr/local/nginx/conf/modsecurity.conf

Trova la riga seguente:

SecRuleEngine DetectionOnly

E sostituiscilo con la seguente riga:

SecRuleEngine On

Trova anche la seguente riga:

/var/log/modsec_audit.log

E sostituiscilo con la seguente riga:

/var/log/nginx/modsec_audit.log

Salva e chiudi il file quando hai finito.

Quindi, scarica l'ultima versione di ModSecurity Core Rule Set dal repository Git usando il seguente comando:

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs

Una volta scaricato, rinomina il file di configurazione di esempio CRS con il seguente comando:

mv /usr/local/nginx/conf/owasp-crs/crs-setup.conf.example /usr/local/nginx/conf/owasp-crs/crs-setup.conf

Quindi, configura ModeSecurity per utilizzare queste regole modificando il file /usr/local/nginx/conf/modsecurity.conf:

nano /usr/local/nginx/conf/modsecurity.conf

Aggiungi le seguenti righe alla fine del file:

Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf

Salva e chiudi il file quando hai finito. Quindi, riavvia il servizio Nginx per implementare le modifiche:

systemctl restart nginx

Test ModSecurity

ModSecurity è ora installato e configurato. È ora di verificare se funziona o meno.

Per testare ModSecurity contro l'iniezione di comandi, apri il tuo browser web e digita l'URL http://localhost/index.html?exec=/bin/bash. Dovresti vedere l'errore 403 Forbidden nella pagina seguente:

Per testare ModSecurity contro l'attacco CSS, apri il tuo terminale ed esegui il seguente comando:

curl http://localhost/?q="><script>alert(1)</script>"

Dovresti ottenere il seguente output:

<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.17.6</center>
</body>
</html>

Conclusione

Congratulazioni! hai scaricato e compilato con successo LibModSecurity con Nginx. Il tuo server è ora protetto da vari attacchi. Per ulteriori informazioni, puoi visitare la documentazione di ModSecurity su ModSecurity Doc.


Cent OS
  1. Come installare WordPress con Nginx su CentOS 7

  2. Installa Nginx con ngx_pagespeed su CentOS 7

  3. Come installare phpMyAdmin con Nginx su CentOS 7 / RHEL 7

  4. Installa phpMyAdmin con Nginx su CentOS 7 - Processo passo dopo passo?

  5. Come installare Sitemagic CMS su CentOS 7 – Con Nginx

Installa WordPress con Nginx su CentOS 7 / RHEL 7

Come installare phpMyAdmin con Nginx su CentOS 8 / RHEL 8

Come installare Nginx con ngx_pagespeed su CentOS

Come installare Nginx con PHP-FastCGI su CentOS 6

Come installare Magento con Nginx su CentOS 7

Come installare Laravel con Nginx su CentOS 8