GNU/Linux >> Linux Esercitazione >  >> Linux

Come installare ModSecurity con Nginx su Rocky Linux 8

ModSecurity è un popolare firewall per applicazioni Web gratuito e open source utilizzato per proteggere le applicazioni Web da diversi tipi di attacchi, tra cui SQL injection, cross-site scripting e inclusione di file locali. Viene spesso utilizzato per proteggere siti Web, cPanel e altri pannelli di controllo di hosting. Sebbene ModSecurity sia stato progettato principalmente per il server Web Apache, può funzionare anche con il server Web Nginx.

In questo post, ti mostreremo come installare ModSecurity con Nginx su Rocky Linux 8.

Prerequisiti

  • Un server che esegue Rocky Linux 8 sulla piattaforma Atlantic.Net Cloud
  • Una password di root configurata sul tuo server

Fase 1:crea un server cloud Atlantic.Net

Per prima cosa, accedi al tuo server Atlantic.Net Cloud. Crea un nuovo server, scegliendo Rocky Linux 8 come sistema operativo con almeno 2 GB di RAM. Collegati al tuo Cloud Server tramite SSH e accedi utilizzando le credenziali evidenziate in alto nella pagina.

Una volta effettuato l'accesso al server, eseguire il comando seguente per aggiornare il sistema di base con gli ultimi pacchetti disponibili.

dnf update -y

Passaggio 2:installazione delle dipendenze richieste

Innanzitutto, dovrai installare tutte le dipendenze richieste sul tuo server. Puoi installarli tutti con il seguente comando:

dnf install gcc-c++ flex bison yajl curl-devel curl zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config git wget openssl openssl-devel vim
dnf --enablerepo=powertools install doxygen yajl-devel -y

Quindi, installa i repository EPEL e Remi usando il seguente comando:

dnf install epel-release https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y

Quindi, installa GeoIP usando il seguente comando:

dnf --enablerepo=remi install GeoIP-devel -y

Fase 3 – Installa ModSecurity

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

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

Quindi, cambia la directory in ModSecurity e installa gli altri moduli con il seguente comando:

cd ModSecurity
git submodule init
git submodule update

Quindi, compila e installa ModSecurity con il seguente comando:

./build.sh
./configure
make
make install

Fase 4 – Installa Nginx con il supporto di LibModsecurity

Per abilitare il supporto di LibModsecurity in Nginx, dovrai compilare Nginx con il supporto per LibModsecurity.

Innanzitutto, scarica il connettore ModSecurity-nginx utilizzando il comando seguente:

cd ../
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.19.10.tar.gz

Quindi, estrai il file scaricato usando il seguente comando:

tar xzf nginx-1.19.10.tar.gz

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

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

Quindi, cambia la directory nel sorgente Nginx e compilalo usando il seguente comando:

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

Quindi, installalo usando il seguente comando:

make
make install

Quindi, copia il file di configurazione ModSecurity di esempio e il file di mappatura Unicode con il comando seguente:

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

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

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

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

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

Rimuovi tutte le righe e aggiungi le seguenti righe:

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_kifarunix-demo.log;
        error_log  /var/log/nginx/error_kifarunix-demo.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, quindi crea una directory di registro Nginx:

mkdir /var/log/nginx

Passaggio 5:crea un file di servizio Systemd per Nginx

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

nano /etc/systemd/system/nginx.service

Aggiungi le seguenti righe:

[Unit]
Description=The nginx HTTP and reverse proxy 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, quindi crea un collegamento simbolico del binario Nginx usando il seguente comando:

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

Quindi, ricarica il demone systemd per applicare le modifiche:

systemctl daemon-reload

Quindi, avvia il servizio Nginx e abilitalo per l'avvio al riavvio del sistema:

systemctl enable --now nginx

Puoi controllare lo stato di Nginx con il seguente comando:

systemctl status nginx

Otterrai 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 2021-11-08 09:59:48 UTC; 5s ago
  Process: 73046 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 73044 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 73043 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 73048 (nginx)
    Tasks: 2 (limit: 11411)
   Memory: 3.2M
   CGroup: /system.slice/nginx.service
           ├─73048 nginx: master process /usr/sbin/nginx
           └─73049 nginx: worker process

Nov 08 09:59:48 rockylinux systemd[1]: Starting The nginx HTTP and reverse proxy server...
Nov 08 09:59:48 rockylinux nginx[73044]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Nov 08 09:59:48 rockylinux nginx[73044]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Nov 08 09:59:48 rockylinux systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Nov 08 09:59:48 rockylinux systemd[1]: Started The nginx HTTP and reverse proxy server.

Passaggio 6:abilita la regola ModSecurity

Puoi abilitarlo con il seguente comando:

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

Inoltre, abilita il registro di controllo con il seguente comando:

sed -i 's#/var/log/modsec_audit.log#/var/log/nginx/modsec_audit.log#' /usr/local/nginx/conf/modsecurity.conf

Passaggio 7:installazione del set di regole principali OWASP ModSecurity

OWASP fornisce regole generiche di rilevamento degli attacchi per ModSecurity. Puoi scaricarlo con il seguente comando:

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

Quindi, rinomina il file di configurazione della regola OWASP utilizzando il comando seguente:

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

Quindi, definisci la regola OWASP nel file di configurazione di ModSecurity:

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

Quindi, riavvia il servizio Nginx per applicare le modifiche:

systemctl restart nginx

Fase 8:verifica ModSecurity

A questo punto Nginx è installato e configurato con il supporto di ModSecurity. Ora è il momento di testarlo.

Esegui il seguente comando injection usando il comando curl:

curl localhost/index.html?exec=/bin/bash

Se tutto va bene, dovresti ricevere l'errore "403 Proibito" come mostrato di seguito:

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

Puoi anche verificare il registro di ModSecurity per ulteriori informazioni:

tail -100 /var/log/nginx/modsec_audit.log

Dovresti vedere il seguente output:

---imefFQJy---D--

---imefFQJy---E--
<html>\x0d\x0a<head><title>403 Forbidden</title></head>\x0d\x0a<body>\x0d\x0a<center><h1>403 Forbidden</h1></center>\x0d\x0a<hr><center>nginx/1.19.10</center>\x0d\x0a</body>\x0d\x0a</html>\x0d\x0a

---imefFQJy---F--
HTTP/1.1 403
Server: nginx/1.19.10
Date: Mon, 08 Nov 2021 10:00:55 GMT
Content-Length: 154
Content-Type: text/html
Connection: keep-alive

---imefFQJy---H--
ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [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/bash found within ARGS:exec: /bin/bash"] [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 "/index.html"] [unique_id "1636365655"] [ref "o1,8v21,9t: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 "/index.html"] [unique_id "1636365655"] [ref ""]

Conclusione

Nella guida sopra, abbiamo spiegato come installare ModSecurity con Nginx su Rocky Linux 8. Il tuo server web Nginx è ora protetto con ModSecurity WAF. ModSecurity può proteggere il tuo server da un'ampia gamma di attacchi. Inizia oggi stesso con l'hosting VPS da Atlantic.Net!


Linux
  1. Come installare Apache Tomcat 10 con Nginx su Rocky Linux 8

  2. Come installare Varnish 7 per Nginx su Rocky Linux 8

  3. Come installare Gulp.js su Rocky Linux 8

  4. Come installare il linguaggio di programmazione Rust su Rocky Linux 8

  5. Come installare Fail2ban con Firewalld su Rocky Linux 8

Come installare Sails.js Framework con Nginx su Rocky Linux 8

Come installare l'ultima linea principale di Nginx su Rocky Linux 8

Come installare phpBB con LEMP su Rocky Linux 8

Come installare lo strumento di monitoraggio Icinga 2 su Rocky Linux 8

Come installare Nginx su Rocky Linux 8

Come installare Nginx su Rocky Linux 9