ModSecurity è un firewall per applicazioni Web (WAF) gratuito, open source e più popolare che protegge la tua applicazione Web da un'ampia gamma di attacchi di livello 7. È stato progettato per il monitoraggio, la registrazione e il filtraggio delle richieste del server Web Apache. Viene fornito con un set di regole di base che rileva e blocca diversi attacchi, inclusi SQL injection, cross-site scripting, Trojan, agenti utente dannosi, dirottamento di sessione e altro ancora.
In questo tutorial ti mostrerò come installare ModSecurity 3 con Apache all'interno di un container Docker.
Requisiti
- Un server che esegue Ubuntu 20.04.
- Sul tuo server è configurata una password di root.
Per iniziare
Innanzitutto, si consiglia di aggiornare il sistema all'ultima versione. Puoi aggiornarlo con il seguente comando:
apt-get update -y
Una volta che il tuo sistema è aggiornato, dovrai installare alcune dipendenze sul tuo sistema. Puoi installarli tutti con il seguente comando:
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
Una volta installate tutte le dipendenze, puoi procedere al passaggio successivo.
Installa Docker
Successivamente, dovrai installare Docker CE sul tuo sistema. Per impostazione predefinita, l'ultima versione di Docker non è inclusa nel repository predefinito di Ubuntu. Quindi dovrai aggiungere il repository ufficiale Docker all'APT.
Innanzitutto, scarica e aggiungi la chiave GPG Docker con il seguente comando:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
Quindi, aggiungi il repository Docker CE all'elenco dei sorgenti APT con il seguente comando:
echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -sc) stable"> /etc/apt/sources.list.d/docker-ce.list
Una volta aggiunto il repository, aggiorna il repository con il seguente comando:
apt-get update -y
Una volta aggiornato il repository, installa l'ultima versione di Docker CE con il seguente comando:
apt-get install docker-ce -y
Dopo aver installato Docker CE, verifica la versione installata di Docker CE con il seguente comando:
docker --versione
Dovresti ottenere il seguente output:
Docker versione 20.10.6, build 370c289
Puoi anche controllare lo stato del servizio Docker con il seguente comando:
docker di stato systemctl
Dovresti ottenere il seguente output:
? docker.service - Motore del contenitore dell'applicazione Docker Caricato:caricato (/lib/systemd/system/docker.service; abilitato; preimpostazione del fornitore:abilitato) Attivo:attivo (in esecuzione) da Sun 2021-05-16 06:49:29 UTC; 38s faTriggeredBy:? docker.socket Documenti:https://docs.docker.com PID principale:8964 (dockerd) Attività:8 Memoria:40,6 M CGroup:/system.slice/docker.service ??8964 /usr/bin/dockerd -H fd :// --containerd=/run/containerd/containerd.sock16 maggio 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.365433228Z" level=warning msg="Il tuo kernel lo fa non supporta la memoria di scambio li>16 maggio 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.365916961Z" level=warning msg="Il tuo kernel non supporta cgroup blkio w> 16 maggio 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.366112111Z" level=warning msg="Il tuo kernel non supporta cgroup blkio w>16 maggio 06:49:29 ubuntu2004 dockerd[ 8964]:time="2021-05-16T06:49:29.366653374Z" level=info msg="Caricamento contenitori:inizio."May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06 :49:29.498790388Z" level=info msg="Il bridge predefinito (docker0) è assegnato con un I>16 maggio 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:2 9.576691602Z" level=info msg="Caricamento contenitori:fatto."May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.610542206Z" level=info msg="Docker daemon " commit=8728dd2 graphdriver(s)=o>16 maggio 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.611668583Z" level=info msg="Daemon ha completato l'inizializzazione"May 16 06:49:29 ubuntu2004 systemd[1]:avviato Docker Application Container Engine.May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.690496888Z" level=info msg="API in ascolto su /run/docker.sock" righe 1-21/21 (END)
Una volta terminato, puoi procedere al passaggio successivo.
Crea un Dockerfile per ModSecurity
Successivamente, dovrai creare un Dockerfile per installare ModSecurity all'interno del contenitore di Ubuntu.
Per prima cosa, cambia la directory in /opt e crea un modsec_rules.conf file con il seguente comando:
cd /opt
nano modsec_rules.conf
Aggiungi le seguenti righe:
Includi "/etc/apache2/modsecurity.d/modsecurity.conf"Includi "/etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf"Includi "/etc/apache2/modsecurity.d/ owasp-crs/rules/*.conf"
Salva e chiudi il file, quindi crea un altro file con il seguente comando:
nano 000-default.conf
Aggiungi le seguenti righe:
modsecurity su modsecurity_rules_file /etc/apache2/modsecurity.d/modsec_rules.conf ServerAdmin [protetto da email] DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR} /access.log combinato
Salva e chiudi il file quando hai finito. Dockerfile copierà i file di cui sopra nel contenitore Docker durante il processo di compilazione.
Infine, crea un Dockerfile con il seguente comando:
nano Dockerfile
Aggiungi le seguenti righe:
# Installa Modsecurity in un contenitore Docker;DA ubuntu:latestARG DEBIAN_FRONTEND=noninteractive# aggiorna/aggiorna il tuo sistemaRUN apt-get update -y# Installa le dipendenze richiesteRUN apt-get install -y 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 wget tar apache2# Scarica LibModsecurity ESEGUI wget https://github.com/SpiderLabs/ModSecurity /releases/download/v3.0.4/modsecurity-v3.0.4.tar.gz# Estrai il file RUN scaricato tar xzf modsecurity-v3.0.4.tar.gz &&rm -rf modsecurity-v3.0.4.tar.gz# Compila e Installa LibModsecurityRUN cd modsecurity-v3.0.4 &&\ ./build.sh &&./configure &&\ make &&make install# Installa ModSecurity-Apache ConnectorRUN cd ~ &&git clone https://github.com/SpiderLabs/ModSecurity-apacheRUN cd ~/ModSecurity-apache &&\ ./autogen.sh &&\ ./configure --with-libmodsecurity=/usr/local/modsecurity/ &&\ make &&\ make install# Carica l'Apac he ModSecurity Connector ModuleRUN echo "LoadModule security3_module /usr/lib/apache2/modules/mod_security3.so">> /etc/apache2/apache2.conf# Configura ModSecurityRUN mkdir /etc/apache2/modsecurity.d &&\ cp modsecurity-v3. 0.4/modsecurity.conf-recommended /etc/apache2/modsecurity.d/modsecurity.conf &&\ cp modsecurity-v3.0.4/unicode.mapping /etc/apache2/modsecurity.d/ &&\ sed -i 's/SecRuleEngine DetectionOnly /SecRuleEngine On/' /etc/apache2/modsecurity.d/modsecurity.confADD modsec_rules.conf /etc/apache2/modsecurity.d/# Installa OWASP ModSecurity Core Rule Set (CRS) su UbuntuRUN git clone https://github.com /SpiderLabs/owasp-modsecurity-crs.git /etc/apache2/modsecurity.d/owasp-crs &&\ cp /etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf.example /etc/apache2/ modsecurity.d/owasp-crs/crs-setup.conf# Attiva ModSecurityRUN mv /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.oldADD 000-default .conf /etc/apache2/sites-disponibili/EXPOSE 80CMD apach ectl -D IN PRIMO PIANO
Salva e chiudi il file quando hai finito.
Il file sopra scaricherà l'immagine di Ubuntu, installerà tutte le dipendenze, scaricherà ModSecurity, lo compilerà e configurerà Apache per funzionare con ModSecurity.
A questo punto, Dockerfile è pronta. Ora puoi procedere al passaggio successivo.
Crea l'immagine Apache ModSecurity e avvia il contenitore
Ora, cambia la directory in /opt e crea l'immagine Docker per Apache ModSecurity con il seguente comando:
cd /opt
docker build .
Una volta completato il processo di compilazione, dovresti ottenere il seguente output:
Passaggio 13/17:ESEGUI git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /etc/apache2/modsecurity.d/owasp-crs &&cp /etc/apache2/modsecurity.d /owasp-crs/crs-setup.conf.example /etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf ---> Esecuzione in 00dfa2a5cd23 Clonazione in '/etc/apache2/modsecurity.d/owasp- crs'... Rimozione del contenitore intermedio 00dfa2a5cd23 ---> b38c1d874d2fStep 14/17 :RUN mv /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.old ---> Esecuzione in 12c9e6d2c559Rimozione del contenitore intermedio 12c9e6d2c559 ---> 899e26019297Step 15/17:ADD 000-default.conf /etc/apache2/sites-available/ ---> eb11751afd6cStep 16/17:EXPOSE 80 ---> In esecuzione in 2f4ba47e2b66Rimozione del contenitore intermedio 2f4ba47e2b66 ---> dd59b0ac7c7cStep 17/17 :CMD apachectl -D FOREGROUND ---> Esecuzione in 98b8cc77df0fRimozione del contenitore intermedio 98b8cc77df0f ---> f603dbc38018Precostruito f603dbc>Ora puoi elencare tutte le immagini della finestra mobile usando il seguente comando:
immagini della finestra mobileDovresti ottenere il seguente output:
ID IMMAGINE TAG REPOSITORY CREATED SIZEf603dbc38018 32 secondi fa 2.48GBubuntu più recente 7e0aa2d69a15 3 settimane fa 72.7MB Ora, scegli il primo ID immagine dall'output sopra e avvia il contenitore Apache ModSecurity con il seguente comando:
esegui docker --name modsec-apache -ditp 80:80 f603dbc38018Dovresti ottenere il seguente output:
40eb0e77e61635c3cee2bfaffbd9489bc7d20aa3e1befb52749de079aaadb528Ora puoi verificare il contenitore in esecuzione con il seguente comando:
docker psDovresti ottenere il seguente output:
CONTAINER ID IMMAGINE COMANDO CREATO STATO PORTE NAMES40eb0e77e616 f603dbc38018 "/bin/sh -c 'apachec…" 17 secondi fa Up 15 secondi 0.0.0.0:80->80/tcp, :::80->80/tcp modsec -apacheCome puoi vedere, il contenitore ModSecurity è avviato e in ascolto sulla porta 80.
Verifica ModSecurity
A questo punto, il contenitore ModSecurity è in esecuzione. Ora è il momento di verificare se le regole di ModSecurity bloccano o meno le richieste dannose.
Per farlo, apri il tuo terminale ed esegui il seguente comando:
curl localhost?doc=/bin/lsDovresti vedere il seguente output:
403 Vietato Vietato
Non hai l'autorizzazione per accedere a questa risorsa.
Apache/2.4.41 (Ubuntu) Server su localhost Port 80Dovresti vedere "403 Proibito " errore. Perché ModSecurity ha bloccato la richiesta di cui sopra.
Puoi anche controllare il log di Apache per ulteriori informazioni.
Per farlo, prima connettiti al container con il seguente comando:
docker exec -it modsec-apache /bin/bashUna volta connesso, dovresti ottenere la seguente shell:
[email protetta]:/#Ora controlla il log di Apache con il seguente comando:
tail -f /var/log/apache2/error.logDovresti vedere che ModSecurity ha bloccato la richiesta dannosa:
[dom 16 maggio 07:24:54.456327 2021] [mpm_event:notice] [pid 15:tid 140204464299072] AH00489:Apache/2.4.41 (Ubuntu) configurato -- ripresa delle normali operazioni[dom maggio 16 07:24:54.456352 2021] [core:notice] [pid 15:tid 140204464299072] AH00094:Riga di comando:'/usr/sbin/apache2 -D FOREGROUND'[Sun May 16 07:25:36.680515 2021] [:error] [pid 16:tid 140204216108800] [client 172.17.0.1:45298] ModSecurity:Avviso. Corrisponde all'"Operatore `PmFromFile' con il parametro `unix-shell.data' rispetto alla variabile `ARGS:doc' (Valore:`/bin/ls' ) [file "/etc/apache2/modsecurity.d/owasp-crs/rules/ REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Esecuzione comando remoto:trovato codice shell Unix"] [data "Dati corrispondenti:bin /ls trovato in ARGS:doc:/bin/ls"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuratezza "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"] [nome host "172.17.0.2"] [uri "/"] [id_univoco "162114993662.860969"] [rif "o1,6v10,7t:urlDecodeUni,t:cmdLine,t:normalizePath,t:minuscolo"]Conclusione
Congratulazioni! hai installato correttamente ModSecurity all'interno del contenitore Docker. Spero che ora tu abbia abbastanza conoscenze per implementare questa soluzione nell'ambiente Docker. Sentiti libero di chiedermi se hai domande.