Ricerca nel sito web

Come installare ModSecurity 3 con Nginx su Ubuntu 22.04


Questo tutorial esiste per queste versioni del sistema operativo

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 15.04 (Vivid Vervet)

Su questa pagina

  1. Prerequisiti
  2. Per iniziare
  3. Installa ModSecurity su Ubuntu 22.04
  4. Installa Nginx con il supporto ModSecurity 3
  5. Configura Nginx con ModSecurity
  6. Installa il set di regole base di ModSecurity
  7. Crea un file di servizio Systemd per Nginx
  8. Verifica ModSecurity
  9. Conclusione

La sicurezza dei siti Web e delle applicazioni Web può essere un compito impegnativo per qualsiasi amministratore di sistema. Sono disponibili molti strumenti open source per proteggere il tuo sito Web dagli attacchi DDoS. ModSecurity è un Web Application Firewall (WAF) gratuito e open source che protegge il tuo sito Web da diversi tipi di attacchi, tra cui cross-site scripting (XSS), SQL injection, dirottamento di sessione e molti altri.

In questo tutorial, ti mostrerò come installare ModSecurity con Nginx su Ubuntu 22.04.

Prerequisiti

  • Un server che esegue Ubuntu 22.04.
  • Sul server è configurata una password di root.

Iniziare

Innanzitutto, si consiglia di aggiornare e aggiornare tutti i pacchetti software all'ultima versione. Puoi aggiornarli tutti eseguendo il seguente comando:

apt update -y
apt upgrade -y

Una volta aggiornati tutti i pacchetti, installa gli altri pacchetti richiesti con il seguente comando:

apt install g++ flex bison curl apache2-dev doxygen libyajl-dev ssdeep liblua5.2-dev libgeoip-dev libtool dh-autoreconf libcurl4-gnutls-dev libxml2 libpcre++-dev libxml2-dev git liblmdb-dev libpkgconf3 lmdb-doc pkgconf zlib1g-dev libssl-dev -y

Al termine, puoi procedere al passaggio successivo.

Installa ModSecurity su Ubuntu 22.04

Per impostazione predefinita, il pacchetto ModSecurity non è incluso nel repository predefinito di Ubuntu. Quindi dovrai compilarlo dalla fonte.

Innanzitutto, scarica l'ultima versione di ModSecurity con il seguente comando:

wget https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.8/modsecurity-v3.0.8.tar.gz

Una volta completato il download, estrai il file scaricato con il seguente comando:

tar -xvzf modsecurity-v3.0.8.tar.gz

Successivamente, vai alla directory estratta e configurala con il seguente comando:

cd modsecurity-v3.0.8
./build.sh
./configure

Successivamente, installalo con il seguente comando:

make
make install

Installa Nginx con il supporto ModSecurity 3

Successivamente, dovrai installare Nginx con il supporto ModSecurity. Innanzitutto, scarica il connettore ModSecurity-nginx con il seguente comando:

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

Successivamente, scarica il sorgente Nginx usando il seguente comando:

wget https://nginx.org/download/nginx-1.20.2.tar.gz

Successivamente, estrai il sorgente Nginx con il seguente comando:

tar xzf nginx-1.20.2.tar.gz

Successivamente, crea un utente per Nginx con il seguente comando:

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

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

cd nginx-1.20.2
./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-compat --with-http_ssl_module --with-http_realip_module --add-dynamic-module=/root/ModSecurity-nginx --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log

Successivamente, installalo con il seguente comando:

make
make modules
make install

Quindi, crea un collegamento simbolico di Nginx con il seguente comando:

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

Successivamente, verifica la versione di Nginx utilizzando il seguente comando:

nginx -V

Otterrai la versione di Nginx nel seguente output:

nginx version: nginx/1.20.2
built by gcc 11.2.0 (Ubuntu 11.2.0-19ubuntu1) 
built with OpenSSL 3.0.2 15 Mar 2022
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --with-pcre-jit --with-debug --with-compat --with-http_ssl_module --with-http_realip_module --add-dynamic-module=/root/ModSecurity-nginx --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log

Al termine, puoi procedere alla configurazione di Nginx con ModSecurity.

Configura Nginx con ModSecurity

Successivamente, copia i file di configurazione di esempio con il seguente comando:

cp ~/modsecurity-v3.0.8/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp ~/modsecurity-v3.0.8/unicode.mapping /usr/local/nginx/conf/

Successivamente, esegui il backup del file di configurazione di Nginx:

cp /usr/local/nginx/conf/nginx.conf{,.bak}

Successivamente, modifica il file di configurazione di Nginx:

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

Rimuovi le righe predefinite e aggiungi le seguenti righe:

load_module modules/ngx_http_modsecurity_module.so;
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  nginx.example.com;
        modsecurity  on;
        modsecurity_rules_file  /usr/local/nginx/conf/modsecurity.conf;
        access_log  /var/log/nginx/access_example.log;
        error_log  /var/log/nginx/error_example.log;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Salvare e chiudere il file, quindi abilitare il ModSecurity con il seguente comando:

sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /usr/local/nginx/conf/modsecurity.conf

Al termine, puoi procedere al passaggio successivo.

Installa il set di regole base di ModSecurity

L'OWASP ModSecurity Core Rule Set fornisce una serie di regole per rilevare e proteggere un'ampia gamma di attacchi, tra cui OWASP Top Ten, minimo di falsi allarmi.

Innanzitutto, scarica il set di regole OWASP con il seguente comando:

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

Successivamente, rinomina crs-setup.conf.example nel file crs-setup.conf:

cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}

Successivamente, definisci le regole con il seguente comando:

echo -e "Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf" >> /usr/local/nginx/conf/modsecurity.conf

Successivamente, verifica Nginx per eventuali errori di configurazione con il seguente comando:

nginx -t

Se tutto va bene, otterrai 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

Al termine, puoi procedere al passaggio successivo.

Crea un file di servizio Systemd per Nginx

Successivamente, dovrai creare un file di servizio systemd per gestire il servizio Nginx. In modo che tu possa avviare e arrestare il servizio Nginx tramite i sistemi. Puoi crearlo con il seguente comando:

nano /etc/systemd/system/nginx.service

Aggiungi le seguenti righe:

[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/local/nginx/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/local/nginx/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

Salva e chiudi il file, quindi ricarica il demone systemd per applicare le modifiche:

systemctl daemon-reload

Successivamente, avvia e abilita Nginx con il seguente comando:

systemctl start nginx
systemctl enable nginx

Puoi controllare lo stato di Nginx usando il seguente comando:

systemctl status nginx

Dovresti vedere il seguente output:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/etc/systemd/system/nginx.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-10-11 15:40:39 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 68438 ExecStartPre=/usr/local/nginx/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 68439 ExecStart=/usr/local/nginx/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 68440 (nginx)
      Tasks: 2 (limit: 4579)
     Memory: 20.0M
        CPU: 293ms
     CGroup: /system.slice/nginx.service
             ??68440 "nginx: master process /usr/local/nginx/sbin/nginx -g daemon on; master_process on;"
             ??68441 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >

Oct 11 15:40:38 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server...
Oct 11 15:40:39 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.

Una volta terminato, puoi procedere al passaggio successivo.

Verificare ModSecurity

Dopo aver installato e configurato Modsecurity con Nginx. È tempo di provarlo. Esegui il seguente comando per testare Modsecurity contro l'iniezione di comandi:

curl localhost?doc=/bin/ls

Se tutto va bene, riceverai il massaggio \403 Forbidden\.

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

Puoi anche controllare il registro Modesecurity usando il seguente comando:

tail /var/log/modsec_audit.log

Dovresti vedere il registro ModSecurity nel seguente output:

ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:doc' (Value: `/bin/ls' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/ls found within ARGS:doc: /bin/ls"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"] [hostname "127.0.0.1"] [uri "/"] [unique_id "166550286018.572845"] [ref "o1,6v10,7t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]
ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `5' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "80"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [data ""] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "127.0.0.1"] [uri "/"] [unique_id "166550286018.572845"] [ref ""]

---IcTYGSZl---I--

---IcTYGSZl---J--

---IcTYGSZl---Z--

Conclusione

Congratulazioni! hai installato con successo ModSecurity con Nginx su Ubuntu 22.04. Ora puoi implementare ModSecurity nel tuo ambiente di produzione per difenderti dagli attacchi DDoS. Non esitate a chiedermi se avete domande.