GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Installa ModSecurity con Apache in un Docker Container

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 mobile

Dovresti ottenere il seguente output:

ID IMMAGINE TAG REPOSITORY CREATED SIZE  f603dbc38018 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 f603dbc38018

Dovresti ottenere il seguente output:

40eb0e77e61635c3cee2bfaffbd9489bc7d20aa3e1befb52749de079aaadb528

Ora puoi verificare il contenitore in esecuzione con il seguente comando:

docker ps

Dovresti 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 -apache

Come 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/ls

Dovresti 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 80

Dovresti 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/bash

Una 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.log

Dovresti 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.


Docker
  1. Installa il server VPN Wireguard con Docker

  2. Come installare Jenkins con Docker

  3. Come installare WordPress utilizzando Docker

  4. Strumentazione container con lo stack elastico

  5. Installa Memcached con Apache su Ubuntu 20.04

Come installare Docker su Debian 11

Installa Portainer con Docker su Ubuntu

Installa Portainer con Docker su Centos8

Introduzione all'esercitazione Docker di Azure

Come copiare file con Docker cp nel tuo Docker Container

Come configurare un container Docker Apache