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
- Prerequisiti
- Per iniziare
- Installa ModSecurity su Ubuntu 22.04
- Installa Nginx con il supporto ModSecurity 3
- Configura Nginx con ModSecurity
- Installa il set di regole base di ModSecurity
- Crea un file di servizio Systemd per Nginx
- Verifica ModSecurity
- 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.