Installieren Sie die LibModsecurity Web Application Firewall mit Nginx auf CentOS 8

LibModSecurity ist eine kostenlose und quelloffene Web-Anwendungs-Firewall, die zum Schutz eines Nginx-Servers vor verschiedenen Arten von Cyberattacken verwendet werden kann. Sie wird mit einem Kernregelsatz geliefert, der SQL-Injektion, Cross-Site-Scripting, Trojaner und viele andere Funktionen enthält. Es funktioniert durch die Überwachung des HTTP-Verkehrs in Echtzeit und die Bekämpfung von Schwachstellen mit dem OWASP ModSecurity Core Rule Set. Es kann mit Apache, Nginx und IIS verwendet werden und ist auch mit Debian, Ubuntu und CentOS kompatibel.

In diesem Tutorial zeigen wir Ihnen, wie Sie LibModSecurity mit Nginx-Unterstützung unter CentOS 8 herunterladen und kompilieren können.

Anforderungen

  • Ein Server mit CentOS 8.
  • Auf dem Server wird ein Root-Passwort konfiguriert.

Erste Schritte

Bevor Sie beginnen, aktualisieren Sie Ihren Server mit der neuesten Version mit dem folgenden Befehl:

dnf update

Sobald Ihr Server auf dem neuesten Stand ist, starten Sie ihn neu, um die Änderungen zu übernehmen.

Erforderliche Repositories und Abhängigkeiten installieren

Installieren Sie zunächst das EPEL- und REMI-Repository auf Ihrem System. Sie können sie mit dem folgenden Befehl installieren:

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
 dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Installieren Sie dann alle erforderlichen Abhängigkeiten mit dem folgenden Befehl:

dnf install gcc-c++ flex bison yajl curl-devel zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config wget openssl openssl-devel nano

Sobald alle Pakete installiert sind, können Sie weitere Abhängigkeiten mit Hilfe des PowerTool-Repositorys installieren:

dnf --enablerepo=PowerTools install doxygen yajl-devel

Als nächstes installieren Sie GeoIP unter Verwendung des REMI-Repositorys, indem Sie den folgenden Befehl ausführen:

dnf --enablerepo=remi install GeoIP-devel

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

Herunterladen und Kompilieren von LibModsecurity

Zuerst müssen Sie die LibModsecurity-Quellen herunterladen und auf Ihrem System kompilieren. Ändern Sie dazu das Verzeichnis in /opt und laden Sie die neueste Version von LibModsecurity aus dem Git-Repository herunter:

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

Als nächstes ändern Sie das Verzeichnis in ModSecurity und laden den libInjection-Code mit dem folgenden Befehl herunter:

cd ModSecurity
 git submodule init
 git submodule update

Als nächstes konfigurieren Sie die LibModsecurity mit dem folgenden Befehl:

./build.sh
 ./configure

Zum Schluss kompilieren und installieren Sie LibModSecurity mit dem folgenden Befehl:

make
 make install

Zu diesem Zeitpunkt ist LibModsecurity auf Ihrem System installiert. Sie können nun mit der Installation von Nginx mit Unterstützung von LibModsecurity fortfahren.

Herunterladen und Kompilieren von Nginx mit Unterstützung von LibModsecurity

Zuerst müssen Sie einen Systembenutzer und eine Gruppe für Nginx erstellen. Sie können sie mit dem folgenden Befehl erstellen:

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

Als nächstes müssen Sie Nginx herunterladen und mit Unterstützung von LibModsecurity kompilieren.

Laden Sie dazu zunächst den ModSecurity-nginx-Konnektor aus dem Git-Repository mit dem folgenden Befehl herunter:

cd /opt
 git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

Laden Sie als nächstes die neueste stabile Version von Nginx mit folgendem Befehl herunter:

wget http://nginx.org/download/nginx-1.17.6.tar.gz

Nach dem Herunterladen extrahieren Sie die heruntergeladene Datei mit dem folgenden Befehl:

tar -xvzf nginx-1.17.6.tar.gz

Als nächstes ändern Sie das Nginx-Verzeichnis und konfigurieren es mit dem folgenden Befehl:

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

Installieren Sie dann Nginx mit dem folgenden Befehl:

make
 make install

Zu diesem Zeitpunkt wurde Nginx mit Unterstützung von LibModsecurity installiert. Sie können nun mit der Konfiguration von Nginx fortfahren.

Nginx mit ModSecurity konfigurieren

Zuerst müssen Sie die Beispiel-ModSecurity-Konfigurationsdatei aus dem Nginx-Quellverzeichnis in das Nginx-Konfigurationsverzeichnis kopieren.

Sie können sie mit dem folgenden Befehl kopieren:

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

Als nächstes erstellen Sie einen symbolischen Link von Nginx-Binärdateien auf den Pfad /usr/sbin/ mit folgendem Befehl:

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

Als nächstes erstellen Sie das Nginx-Protokollverzeichnis mit dem folgenden Befehl:

mkdir /var/log/nginx

Öffnen Sie dann die Nginx-Konfigurationsdatei mit dem folgenden Befehl:

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

Nehmen Sie die folgenden Änderungen vor:

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  your-server-ip;
        modsecurity  on;
        modsecurity_rules_file  /usr/local/nginx/conf/modsecurity.conf;
        access_log  /var/log/nginx/access.log;
        error_log  /var/log/nginx/error.log;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Speichern und schliessen Sie die Datei, wenn Sie fertig sind. Überprüfen Sie dann Nginx mit dem folgenden Befehl auf eventuelle Syntaxfehler:

nginx -t

Sie sollten die folgende Ausgabe sehen:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

Zu diesem Zeitpunkt ist Nginx bereits konfiguriert. Sie können mit der Erstellung einer Systemdienstdatei für Nginx fortfahren.

Erstellen Sie eine Systemd Service-Datei für Nginx

Als nächstes müssen Sie eine Systemdatei zur Verwaltung des Nginx-Dienstes erstellen. Sie können sie mit dem folgenden Befehl erstellen:

nano /etc/systemd/system/nginx.service

Fügen Sie die folgenden Zeilen hinzu:

[Unit]
Description=The nginx 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

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Dann laden Sie den systemdämon mit dem folgenden Befehl neu:

systemctl daemon-reload

Als nächstes starten Sie den Nginx-Dienst und aktivieren ihn nach dem Systemneustart mit folgendem Befehl:

systemctl start nginx
 systemctl enable --now nginx

Sie sollten die folgende Ausgabe sehen:

Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service ? /etc/systemd/system/nginx.service.

Überprüfen Sie dann den Nginx-Dienst mit dem folgenden Befehl:

systemctl status nginx

Sie sollten die folgende Ausgabe sehen:

? 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 2019-12-30 10:20:01 EST; 41s ago
  Process: 17730 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 17728 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 17727 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 17732 (nginx)
    Tasks: 2 (limit: 6102)
   Memory: 5.0M
   CGroup: /system.slice/nginx.service
           ??17732 nginx: master process /usr/sbin/nginx
           ??17733 nginx: worker process

Dec 30 10:20:00 nginx systemd[1]: Starting The nginx HTTP and reverse proxy server...
Dec 30 10:20:00 nginx nginx[17728]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Dec 30 10:20:00 nginx nginx[17728]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Dec 30 10:20:01 nginx systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Dec 30 10:20:01 nginx systemd[1]: Started The nginx HTTP and reverse proxy server.

Zu diesem Zeitpunkt ist Nginx gestartet und läuft. Sie können nun mit der Konfiguration von ModSecurity fortfahren.

Konfigurieren Sie ModeSecurity

Standardmäßig ist ModSecurity nur auf den Erkennungsmodus eingestellt. Sie müssen also die ModSecurity-Regel-Engine einschalten. Sie können dies tun, indem Sie die Datei modsecurity.conf bearbeiten:

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

Suchen Sie die folgende Zeile:

SecRuleEngine DetectionOnly

Und ersetzen Sie es durch die folgende Zeile:

SecRuleEngine On

Finden Sie auch die folgende Zeile:

/var/log/modsec_audit.log

Und ersetzen Sie diese durch die folgende Zeile:

/var/log/nginx/modsec_audit.log

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

Als nächstes laden Sie die neueste Version des ModSecurity Core-Regelsatzes aus dem Git-Repository mit folgendem Befehl herunter:

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

Nach dem Herunterladen benennen Sie die CRS-Beispielkonfigurationsdatei mit folgendem Befehl um:

mv /usr/local/nginx/conf/owasp-crs/crs-setup.conf.example /usr/local/nginx/conf/owasp-crs/crs-setup.conf

Konfigurieren Sie dann ModeSecurity zur Verwendung dieser Regeln, indem Sie die Datei /usr/local/nginx/conf/modsecurity.conf bearbeiten:

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

Fügen Sie die folgenden Zeilen am Ende der Datei hinzu:

Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Nginx-Dienst neu, um die Änderungen zu implementieren:

systemctl restart nginx

ModSecurity testen

ModSecurity ist nun installiert und konfiguriert. Es ist an der Zeit zu testen, ob es funktioniert oder nicht.

Um ModSecurity gegen Befehlsinjektion zu testen, öffnen Sie Ihren Webbrowser und geben Sie die URL http://localhost/index.html?exec=/bin/bash ein. Auf der folgenden Seite sollten Sie den Fehler 403 Forbidden sehen:

ModSicherheit testen

Um ModSecurity gegen einen CSS-Angriff zu testen, öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl aus:

curl http://localhost/?q="><script>alert(1)</script>"

Sie sollten die folgende Ausgabe erhalten:

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

Schlussfolgerung

Herzlichen Glückwunsch! Sie haben LibModSecurity mit Nginx erfolgreich heruntergeladen und kompiliert. Ihr Server ist nun vor verschiedenen Angriffen geschützt. Weitere Informationen finden Sie in der ModSecurity-Dokumentation unter ModSecurity Doc.

Das könnte dich auch interessieren …