GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Installieren Sie ModSecurity mit Apache in einem Docker-Container

ModSecurity ist eine kostenlose, quelloffene und beliebteste Web Application Firewall (WAF), die Ihre Webanwendung vor einer Vielzahl von Layer-7-Angriffen schützt. Es wurde für die Überwachung, Protokollierung und Filterung von Anfragen von Apache-Webservern entwickelt. Es wird mit einem Core Rule Set geliefert, das mehrere Angriffe erkennt und stoppt, darunter SQL-Injection, Cross-Site-Scripting, Trojaner, schädliche Benutzeragenten, Session-Hijacking und mehr.

In diesem Tutorial zeige ich Ihnen, wie Sie ModSecurity 3 mit Apache in einem Docker-Container installieren.

Anforderungen

  • Ein Server mit Ubuntu 20.04.
  • Auf Ihrem Server ist ein Root-Passwort konfiguriert.

Erste Schritte

Zunächst wird empfohlen, Ihr System auf die neueste Version zu aktualisieren. Sie können es mit dem folgenden Befehl aktualisieren:

apt-get update -y

Sobald Ihr System auf dem neuesten Stand ist, müssen Sie einige Abhängigkeiten auf Ihrem System installieren. Sie können alle mit dem folgenden Befehl installieren:

apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y

Sobald alle Abhängigkeiten installiert sind, können Sie mit dem nächsten Schritt fortfahren.

Installieren Sie Docker

Als nächstes müssen Sie Docker CE auf Ihrem System installieren. Standardmäßig ist die neueste Version von Docker nicht im Ubuntu-Standard-Repository enthalten. Sie müssen also das offizielle Docker-Repository zum APT hinzufügen.

Laden Sie zunächst den Docker-GPG-Schlüssel herunter und fügen Sie ihn mit dem folgenden Befehl hinzu:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

Fügen Sie als Nächstes das Docker CE-Repository mit dem folgenden Befehl zur APT-Quellliste hinzu:

echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -sc) stable"> /etc/apt/sources.list.d/docker-ce.list

Sobald das Repository hinzugefügt wurde, aktualisieren Sie das Repository mit dem folgenden Befehl:

apt-get update -y

Sobald das Repository aktualisiert ist, installieren Sie die neueste Version von Docker CE mit dem folgenden Befehl:

apt-get install docker-ce -y

Überprüfen Sie nach der Installation von Docker CE die installierte Version von Docker CE mit dem folgenden Befehl:

docker --version

Sie sollten die folgende Ausgabe erhalten:

Docker-Version 20.10.6, Build 370c289

Sie können den Status des Docker-Dienstes auch mit dem folgenden Befehl überprüfen:

Systemctl-Status-Docker

Sie sollten die folgende Ausgabe erhalten:

? docker.service – Container-Engine der Docker-Anwendung Geladen:geladen (/lib/systemd/system/docker.service; aktiviert; Herstellervoreinstellung:aktiviert) Aktiv:aktiv (läuft) seit So. 2021-05-16 06:49:29 UTC; vor 38sTriggeredBy:? docker.socket Docs:https://docs.docker.com Haupt-PID:8964 (dockerd) Aufgaben:8 Arbeitsspeicher:40,6 MB 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=warning msg="Your kernel does no support swap memory li>May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.365916961Z" level=warning msg="Your kernel does not support cgroup blkio w>May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.366112111Z" level=warning msg="Ihr Kernel unterstützt cgroup nicht blkio w>16. Mai 06:49:29 ubuntu2004 dockerd[ 8964]:time="2021-05-16T06:49:29.366653374Z" level=info msg="Loading container:start."May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06 :49:29.498790388Z" level=info msg="Default Bridge (docker0) ist mit einem I> May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:2 9.576691602Z" level=info msg="Container laden:fertig."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>May 16 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.611668583Z" level=info msg="Daemon hat Initialisierung abgeschlossen"May 16 06:49:29 ubuntu2004 systemd[1]:Docker Application Container Engine gestartet. 16. Mai 06:49:29 ubuntu2004 dockerd[8964]:time="2021-05-16T06:49:29.690496888Z" level=info msg="API hört auf /run/docker.sock" Zeilen 1-21/21 (ENDE)

Wenn Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.

Erstellen Sie ein Dockerfile für ModSecurity

Als nächstes müssen Sie eine Docker-Datei erstellen, um ModSecurity im Ubuntu-Container zu installieren.

Wechseln Sie zuerst in das Verzeichnis /opt und erstellen Sie eine modsec_rules.conf Datei mit dem folgenden Befehl:

cd /opt
nano modsec_rules.conf

Fügen Sie die folgenden Zeilen hinzu:

Include "/etc/apache2/modsecurity.d/modsecurity.conf"Include "/etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf"Include "/etc/apache2/modsecurity.d/ owasp-crs/rules/*.conf"

Speichern und schließen Sie die Datei und erstellen Sie dann eine weitere Datei mit dem folgenden Befehl:

nano 000-default.conf

Fügen Sie die folgenden Zeilen hinzu:

 modsecurity on modsecurity_rules_file /etc/apache2/modsecurity.d/modsec_rules.conf ServerAdmin [E-Mail-geschützt] DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR} /access.log kombiniert

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Dockerfile kopiert die obigen Dateien während des Build-Prozesses in den Docker-Container.

Erstellen Sie abschließend ein Dockerfile mit dem folgenden Befehl:

Nano-Dockerfile

Fügen Sie die folgenden Zeilen hinzu:

# Installiere Modsecurity in einem Docker-Container;FROM ubuntu:latestARG DEBIAN_FRONTEND=noninteractive# aktualisiere/aktualisiere dein SystemRUN apt-get update -y# Erforderliche Abhängigkeiten installierenRUN 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# Download LibModsecurity RUN wget https://github.com/SpiderLabs/ModSecurity /releases/download/v3.0.4/modsecurity-v3.0.4.tar.gz# Extrahieren Sie die heruntergeladene DateiRUN tar xzf modsecurity-v3.0.4.tar.gz &&rm -rf modsecurity-v3.0.4.tar.gz# Kompilieren und Installiere LibModsecurityRUN cd modsecurity-v3.0.4 &&\ ./build.sh &&./configure &&\ make &&make install# Installiere 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# Laden Sie die Apac Das ModSecurity Connector ModuleRUN echo "LoadModule security3_module /usr/lib/apache2/modules/mod_security3.so">> /etc/apache2/apache2.conf# ModSecurityRUN konfigurieren 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/# Installieren Sie OWASP ModSecurity Core Rule Set (CRS) auf 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# Aktivieren Sie 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 VORDERGRUND

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Die obige Datei lädt das Ubuntu-Image herunter, installiert alle Abhängigkeiten, lädt ModSecurity herunter, kompiliert es und konfiguriert Apache für die Arbeit mit ModSecurity.

An dieser Stelle Dockerfile ist bereit. Sie können jetzt mit dem nächsten Schritt fortfahren.

Erstellen Sie das Apache ModSecurity-Image und starten Sie den Container

Wechseln Sie nun in das Verzeichnis /opt und erstellen Sie das Docker-Image für Apache ModSecurity mit dem folgenden Befehl:

cd /opt
docker build .

Sobald der Erstellungsprozess abgeschlossen ist, sollten Sie die folgende Ausgabe erhalten:

Schritt 13/17:Führen Sie git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /etc/apache2/modsecurity.d/owasp-crs &&cp /etc/apache2/modsecurity.d aus /owasp-crs/crs-setup.conf.example /etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf ---> Ausführen in 00dfa2a5cd23Klonen in '/etc/apache2/modsecurity.d/owasp- crs'...Entfernen des Zwischencontainers 00dfa2a5cd23 ---> b38c1d874d2fSchritt 14/17:RUN mv /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.old ---> Running in 12c9e6d2c559Removing intermediate container 12c9e6d2c559 ---> 899e26019297Step 15/17 :ADD 000-default.conf /etc/apache2/sites-available/ ---> eb11751afd6cStep 16/17 :EXPOSE 80 ---> Running in 2f4ba47e2b66 Zwischencontainer 2f4ba47e2b66 entfernen ---> dd59b0ac7c7cSchritt 17/17:CMD apachectl -D FOREGROUND ---> Running in 98b8cc77df0f Zwischencontainer 98b8cc77df0f entfernen ---> f603dbc38018 f603dbc38018 erfolgreich erstellt
Sie können jetzt alle Docker-Images mit dem folgenden Befehl auflisten:

Docker-Images

Sie sollten die folgende Ausgabe erhalten:

REPOSITORY TAG IMAGE ID CREATED SIZE  f603dbc38018 vor 32 Sekunden 2,48GBubuntu zuletzt 7e0aa2d69a15 vor 3 Wochen 72,7MB  

Wählen Sie nun die erste Bild-ID aus der obigen Ausgabe und starten Sie den Apache ModSecurity-Container mit dem folgenden Befehl:

docker run --name modsec-apache -ditp 80:80 f603dbc38018

Sie sollten die folgende Ausgabe erhalten:

40eb0e77e61635c3cee2bfaffbd9489bc7d20aa3e1befb52749de079aaadb528

Sie können jetzt den laufenden Container mit dem folgenden Befehl überprüfen:

docker-ps

Sie sollten die folgende Ausgabe erhalten:

CONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMEN40eb0e77e616 f603dbc38018 "/bin/sh -c 'apachec…" vor 17 Sekunden Up 15 Sekunden 0.0.0.0:80->80/tcp, :::80->80/tcp modsec -apache

Wie Sie sehen, ist der ModSecurity-Container gestartet und lauscht auf Port 80.

ModSecurity überprüfen

Zu diesem Zeitpunkt wird der ModSecurity-Container ausgeführt. Jetzt ist es an der Zeit zu testen, ob die ModSecurity-Regeln die böswilligen Anfragen blockieren oder nicht.

Öffnen Sie dazu Ihr Terminal und führen Sie den folgenden Befehl aus:

curl localhost?doc=/bin/ls

Sie sollten die folgende Ausgabe sehen:

403 Verboten

Verboten

Sie sind nicht berechtigt, auf diese Ressource zuzugreifen.


Apache/2.4.41 (Ubuntu) Server auf localhost Port 80

Sie sollten die Meldung „403 Forbidden“ sehen " Fehler. Weil ModSecurity die obige Anfrage blockiert hat.

Weitere Informationen finden Sie auch im Apache-Protokoll.

Verbinden Sie sich dazu zunächst mit dem folgenden Befehl mit dem Container:

docker exec -it modsec-apache /bin/bash

Sobald Sie verbunden sind, sollten Sie die folgende Shell erhalten:

[E-Mail-geschützt]:/#

Überprüfen Sie nun das Apache-Protokoll mit dem folgenden Befehl:

tail -f /var/log/apache2/error.log

Sie sollten sehen, dass ModSecurity die böswillige Anfrage blockiert hat:

[So 16. Mai 07:24:54.456327 2021] [mpm_event:notice] [pid 15:tid 140204464299072] AH00489:Apache/2.4.41 (Ubuntu) konfiguriert – Normalbetrieb wieder aufgenommen[So 16. Mai 07:24:54.456352 2021] [core:notice] [pid 15:tid 140204464299072] AH00094:Befehlszeile:'/usr/sbin/apache2 -D FOREGROUND'[Sonntag 16. Mai 07:25:36.680515 2021] [:error] [pid 16:tid 140204216108800] [Client 172.17.0.1:45298] ModSecurity:Warnung. Abgeglichener "Operator `PmFromFile' mit Parameter `unix-shell.data' gegen Variable `ARGS:doc' (Wert:`/bin/ls' ) [Datei "/etc/apache2/modsecurity.d/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 gefunden in ARGS:doc:/bin/ls"] [Severity "2"] [ver "OWASP_CRS/3.2.0"] [Maturity "0"] [accuracy "0"] [tag "application-multi"] [Tag „Sprache-Shell“] [Tag „Plattform-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 "172.17.0.2"] [uri "/"] [unique_id "162114993662.860969"] [ref "o1,6v10,7t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]

Schlussfolgerung

Herzliche Glückwünsche! Sie haben ModSecurity erfolgreich im Docker-Container installiert. Ich hoffe, Sie haben jetzt genug Wissen, um diese Lösung in der Docker-Umgebung zu implementieren. Fühlen Sie sich frei, mich zu fragen, wenn Sie irgendwelche Fragen haben.


Docker
  1. Installieren Sie den Wireguard VPN-Server mit Docker

  2. So installieren Sie Jenkins mit Docker

  3. So installieren Sie WordPress mit Docker

  4. Container-Instrumentierung mit dem Elastic Stack

  5. So stellen Sie einen Nginx-Container mit Docker auf Linode bereit

So installieren Sie Docker unter Debian 11

Portainer mit Docker auf Ubuntu installieren

Installieren Sie Portainer mit Docker auf Centos8

Tutorial „Erste Schritte mit Azure Docker“.

So kopieren Sie Dateien mit Docker cp in Ihren Docker-Container

So richten Sie einen Apache Docker-Container ein