ModSecurity je bezplatný, open source a nejpopulárnější firewall pro webové aplikace (WAF), který chrání vaši webovou aplikaci před širokou škálou útoků na 7. vrstvě. Byl navržen pro monitorování webového serveru Apache, protokolování a filtrování požadavků. Dodává se se sadou základních pravidel, která detekuje a zastavuje několik útoků včetně injekce SQL, skriptování mezi weby, trojských koní, špatných uživatelských agentů, únosů relací a dalších.
V tomto tutoriálu vám ukážu, jak nainstalovat ModSecurity 3 s Apache uvnitř kontejneru Docker.
Požadavky
- Server se systémem Ubuntu 20.04.
- Na vašem serveru je nakonfigurováno heslo uživatele root.
Začínáme
Nejprve se doporučuje aktualizovat váš systém na nejnovější verzi. Můžete jej aktualizovat pomocí následujícího příkazu:
apt-get update -y
Jakmile bude váš systém aktuální, budete muset do systému nainstalovat některé závislosti. Všechny je můžete nainstalovat pomocí následujícího příkazu:
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
Jakmile jsou všechny závislosti nainstalovány, můžete přejít k dalšímu kroku.
Instalovat Docker
Dále budete muset nainstalovat Docker CE do vašeho systému. Ve výchozím nastavení není nejnovější verze Dockeru součástí výchozího úložiště Ubuntu. Takže budete muset přidat oficiální úložiště Docker do APT.
Nejprve si stáhněte a přidejte klíč Docker GPG pomocí následujícího příkazu:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
Dále přidejte úložiště Docker CE do seznamu zdrojů APT pomocí následujícího příkazu:
echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -sc) stable"> /etc/apt/sources.list.d/docker-ce.listJakmile je úložiště přidáno, aktualizujte úložiště pomocí následujícího příkazu:
apt-get update -yPo aktualizaci úložiště nainstalujte nejnovější verzi Docker CE pomocí následujícího příkazu:
apt-get install docker-ce -yPo instalaci Docker CE ověřte nainstalovanou verzi Docker CE pomocí následujícího příkazu:
docker --versionMěli byste získat následující výstup:
Docker verze 20.10.6, sestavení 370c289Stav služby Docker můžete také zkontrolovat pomocí následujícího příkazu:
systemctl status dockerMěli byste získat následující výstup:
? docker.service – Docker Application Container Engine Načteno:načteno (/lib/systemd/system/docker.service; povoleno; přednastaveno dodavatelem:povoleno) Aktivní:aktivní (běží) od neděle 2021-05-16 06:49:29 UTC; před 38sTriggeredBy:? docker.socket Dokumenty:https://docs.docker.com Hlavní PID:8964 (dockerd) Úkoly:8 Paměť:40,6M CGroup:/system.slice/docker.service ??8964 /usr/bin/dockerd -H fd :// --containerd=/run/containerd/containerd.sockMay 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.365433228Z" level=Yourwarning msg does nepodporuje odkládací paměť li>May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.365916961Z" level=warning msg="Vaše jádro nepodporuje>May blkio w 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.366112111Z" level=warning msg="Vaše jádro nepodporuje cgroup blkio w>May 16 06:44 docker:2cker 8964]:time="2021-05-16T06:49:29.366653374Z" level=info msg="Načítání kontejnerů:start." May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-06-05- :49:29.498790388Z" level=info msg="Výchozí most (docker0) je přiřazen s I> May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:2 9.576691602Z" level=info msg="Načítání kontejnerů:hotovo." 16. května 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.610542206Z" level=info " commit=8728dd2 graphdriver(s)=o>16. května 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.611668583Z" level=info msg="Daemon" 16 06:49:29 ubuntu2004 systemd[1]:Spuštěn kontejner kontejneru aplikací Docker. 16. května 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.680Z496=8890Z496=8890Z496 level=8 "API poslouchat na /run/docker.sock" řádky 1-21/21 (KONEC)Jakmile budete hotovi, můžete přejít k dalšímu kroku.
Vytvoření souboru Docker pro ModSecurity
Dále budete muset vytvořit Dockerfile k instalaci ModSecurity do kontejneru Ubuntu.
Nejprve změňte adresář na /opt a vytvořte modsec_rules.conf soubor s následujícím příkazem:
cd /opt
nano modsec_rules.confPřidejte následující řádky:
Zahrnout "/etc/apache2/modsecurity.d/modsecurity.conf"Zahrnout "/etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf"Zahrnout "/etc/apache2/modsecurity.d/ owasp-crs/rules/*.conf"Uložte a zavřete soubor a poté vytvořte další soubor pomocí následujícího příkazu:
nano 000-default.confPřidejte následující řádky:
modsecurity na modsecurity_rules_file /etc/apache2/modsecurity.d/modsec_rules.conf ServerAdmin [e-mail chráněný] DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APALOG /access.log kombinovaný Po dokončení uložte a zavřete soubor. Dockerfile zkopíruje výše uvedené soubory do kontejneru Docker během procesu sestavování.
Nakonec vytvořte Dockerfile pomocí následujícího příkazu:
nano DockerfilePřidejte následující řádky:
# Nainstalujte Modsecurity do kontejneru Docker;Z ubuntu:latestARG DEBIAN_FRONTEND=noninteractive# aktualizujte/upgradujte svůj systémRUN apt-get update -y# Instalace Požadované závislostiRUN 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# Stáhnout LibModsecurity Sechubgit RUN.comget https://Modsecurity /releases/download/v3.0.4/modsecurity-v3.0.4.tar.gz# Rozbalte stažený soubor FileRUN tar xzf modsecurity-v3.0.4.tar.gz &&rm -rf modsecurity-v3.0.4.tar.gz# Zkompilujte a Nainstalujte LibModsecurityRUN cd modsecurity-v3.0.4 &&\ ./build.sh &&./configure &&\ make &&make install# Nainstalujte 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# Načíst Apac on ModSecurity Connector ModuleRUN echo "LoadModule security3_module /usr/lib/apache2/modules/mod_security3.so">> /etc/apache2/apache2.conf# Konfigurace ModSecurityRUN mkdir /etc/apache2/modsecurity.d &&-v3 cp 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 Detection /SecRuleEngine On/' /etc/apache2/modsecurity.d/modsecurity.confADD modsec_rules.conf /etc/apache2/modsecurity.d/# Nainstalujte OWASP ModSecurity Core Rule Set (CRS) na UbuntuRUN git klon 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# Aktivovat ModSecurityRUN mv /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.oldADD 000-default .conf /etc/apache2/sites-available/EXPOSE 80CMD apach ectl -D POZADÍPo dokončení uložte a zavřete soubor.
Výše uvedený soubor stáhne obraz Ubuntu, nainstaluje všechny závislosti, stáhne ModSecurity, zkompiluje jej a nakonfiguruje Apache pro práci s ModSecurity.
V tomto okamžiku Dockerfile je připraven. Nyní můžete přejít k dalšímu kroku.
Sestavte obraz Apache ModSecurity a spusťte kontejner
Nyní změňte adresář na /opt a vytvořte obraz Docker pro Apache ModSecurity pomocí následujícího příkazu:
cd /opt
sestavení dockeru.Po dokončení procesu sestavení byste měli získat následující výstup:
Krok 13/17 :Spusťte klon git 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 ---> Spuštění v 00dfa2a5cd23Klonování do '/etc/apache2/modsecurity.d/owasp- crs'...Odstranění mezikontejneru 00dfa2a5cd23 ---> b38c1d874d2fKrok 14/17 :RUN mv /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default ---> Spuštění v 12c9e6d2c559Odstranění přechodného kontejneru 12c9e6d2c559 ---> 899e26019297Krok 15/17 :ADD 000-default.conf /etc/apache2/sites-available/POS1-7151 eb19 V 2F4BA47E2B66 REMOVING SIADTERIADE KONTONER 2F4BA47E2B66 ---> DD59B0AC7C7CSTEP 17/17:CMD APACHECTL -D PROGRAGE ----Pomocí následujícího příkazu nyní můžete vypsat všechny obrázky dockeru:
obrázky dockeruMěli byste získat následující výstup:
Velikost VYTVOŘENÉHO ID OBRÁZKU ZNAČKY ÚLOŽIŠTĚ<žádné> <žádné> f603dbc38018 před 32 sekundami 2,48 GB nejnovějších 7e0aa2d69a15 před 3 týdny 72,7 MBNyní vyberte první ID obrázku z výše uvedeného výstupu a spusťte kontejner Apache ModSecurity pomocí následujícího příkazu:
spuštění dockeru --name modsec-apache -ditp 80:80 f603dbc38018Měli byste získat následující výstup:
40eb0e77e61635c3cee2bfaffbd9489bc7d20aa3e1befb52749de079aaadb528Nyní můžete ověřit spuštěný kontejner pomocí následujícího příkazu:
docker psMěli byste získat následující výstup:
ID KONTEJNERU PŘÍKAZ OBRÁZKU VYTVOŘEN STAV NÁZVY PORTŮ40eb0e77e616 f603dbc38018 "/bin/sh -c 'apachec…" před 17 sekundami Nárůst o 15 sekund 0.0.0.0:80->80/tcp, :80/tcp, :80/tcp, :80 -apacheJak můžete vidět, kontejner ModSecurity je spuštěn a naslouchá na portu 80.
Ověřte ModSecurity
V tomto okamžiku je spuštěn kontejner ModSecurity. Nyní je čas otestovat, zda pravidla ModSecurity blokují škodlivé požadavky nebo ne.
Chcete-li tak učinit, otevřete svůj terminál a spusťte následující příkaz:
curl localhost?doc=/bin/lsMěli byste vidět následující výstup:
403 Zakázáno Zakázáno
Nemáte oprávnění pro přístup k tomuto zdroji.
Server Apache/2.4.41 (Ubuntu) na portu 80 localhostMěli byste vidět „403 Zakázáno Protože ModSecurity zablokoval výše uvedený požadavek.
Další informace naleznete také v protokolu Apache.
Chcete-li tak učinit, nejprve se připojte ke kontejneru pomocí následujícího příkazu:
docker exec -it modsec-apache /bin/bashJakmile se připojíte, měli byste získat následující shell:
[e-mail chráněn]:/#Nyní zkontrolujte protokol Apache pomocí následujícího příkazu:
tail -f /var/log/apache2/error.logMěli byste vidět, že ModSecurity zablokovalo škodlivý požadavek:
[Ne 16. května 07:24:54.456327 2021] [mpm_event:notice] [pid 15:tid 140204464299072] AH00489:Apache/2.4.41 (Ubuntu) nakonfigurován normální provoz:2 – 6 obnovení 54.456352 2021] [core:notice] [pid 15:tid 140204464299072] AH00094:Příkazový řádek:'/usr/sbin/apache2 -D FOREGROUND'[Ne 16. května 07:25:515.061] tid 140204216108800] [klient 172.17.0.1:45298] ModSecurity:Varování. Shoda "Operátor `PmFromFile' s parametrem `unix-shell.data' s proměnnou `ARGS:doc' (Hodnota:`/bin/ls' ) [soubor "/etc/apache2/modsecurity.d/owasp-crs/rules/ REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [řádek "496"] [id "932160"] [rev ""] [msg "Spuštění vzdáleného příkazu:Kód Unix Shell nalezen"] [data "Shodná data:bin /ls nalezen v ARGS:doc:/bin/ls"] [závažnost "2"] [ver "OWASP_CRS/3.2.0"] [splatnost "0"] [přesnost "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"] [název hostitele "172.17.0.2"] [uri "/"] [unique_id "162114993662.860969"] [ref "o1,6v10,7t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]Závěr
Gratulujeme! úspěšně jste nainstalovali ModSecurity do kontejneru Docker. Doufám, že nyní máte dostatek znalostí k implementaci tohoto řešení v prostředí Docker. Neváhejte se mě zeptat, pokud máte nějaké otázky.
Docker Guide:Deploying Ghost Blog with MySQL a Traefik with Docker Jak ukládat data kontejneru Docker ve svazcích DockeruDocker