LibModSecurity ist eine kostenlose Open-Source-Firewall für Webanwendungen, mit der ein Nginx-Server vor verschiedenen Arten von Cyberangriffen geschützt werden kann. Es wird mit einem Kernregelsatz geliefert, der SQL-Injection, Cross-Site-Scripting, Trojaner und vieles mehr umfasst. Es funktioniert, indem es den HTTP-Verkehr in Echtzeit überwacht und Schwachstellen mit dem OWASP ModSecurity Core Rule Set bekämpft. 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 auf CentOS 8 herunterladen und kompilieren.
Anforderungen
- Ein Server mit CentOS 8.
- Auf dem Server ist ein Root-Passwort konfiguriert.
Erste Schritte
Aktualisieren Sie Ihren Server vor dem Start mit dem folgenden Befehl auf die neueste Version:
dnf-Update
Sobald Ihr Server auf dem neuesten Stand ist, starten Sie ihn neu, um die Änderungen zu übernehmen.
Installieren Sie erforderliche Repositories und Abhängigkeiten
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
Als nächstes installieren Sie 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 andere Abhängigkeiten mit dem PowerTool-Repository installieren:
dnf --enablerepo=PowerTools install doxygen yajl-devel
Installieren Sie als Nächstes GeoIP mithilfe 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.
LibModsecurity herunterladen und kompilieren
Zuerst müssen Sie die LibModsecurity-Quelle herunterladen und auf Ihrem System kompilieren. Wechseln Sie dazu in das Verzeichnis /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
Wechseln Sie als Nächstes in das Verzeichnis ModSecurity und laden Sie 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
Schließlich kompilieren und installieren Sie LibModSecurity mit dem folgenden Befehl:
make
make install
Zu diesem Zeitpunkt wurde LibModsecurity auf Ihrem System installiert. Sie können jetzt mit der Installation von Nginx mit LibModsecurity-Unterstützung fortfahren.
Laden Sie Nginx mit LibModsecurity Support herunter und kompilieren Sie es
Zuerst müssen Sie einen Systembenutzer und eine Gruppe für Nginx erstellen. Sie können es 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 LibModsecurity-Unterstützung kompilieren.
Laden Sie dazu zunächst den ModSecurity-nginx-Connector aus dem Git-Repository mit dem folgenden Befehl herunter:
cd /opt
Git-Klon https://github.com/SpiderLabs/ModSecurity-nginx.git
Laden Sie als Nächstes die neueste stabile Version von Nginx mit dem folgenden Befehl herunter:
wget http://nginx.org/download/nginx-1.17.6.tar.gz
Extrahieren Sie die heruntergeladene Datei nach dem Herunterladen 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
Als nächstes installieren Sie Nginx mit dem folgenden Befehl:
make
make install
Zu diesem Zeitpunkt wurde Nginx mit LibModsecurity-Unterstützung installiert. Sie können jetzt mit der Konfiguration von Nginx fortfahren.
Nginx mit ModSecurity konfigurieren
Zuerst müssen Sie die ModSecurity-Beispielkonfigurationsdatei 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/Erstellen Sie als Nächstes mit dem folgenden Befehl einen symbolischen Link der Nginx-Binärdatei zum Pfad /usr/sbin/:
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/Erstellen Sie als Nächstes das Nginx-Protokollverzeichnis mit dem folgenden Befehl:
mkdir /var/log/nginxÖffnen Sie als Nächstes die Nginx-Konfigurationsdatei mit dem folgenden Befehl:
nano /usr/local/nginx/conf/nginx.confNehmen 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; Datei senden an; keepalive_timeout 65; server {lauschen 80; server_name ihre-server-ip; modsecurity an; modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; Ort / { Root-HTML; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location =/50x.html { root html; } }}Speichern und schließen Sie die Datei, wenn Sie fertig sind. Überprüfen Sie dann Nginx mit dem folgenden Befehl auf Syntaxfehler:
nginx -tSie sollten die folgende Ausgabe sehen:
nginx:Die Syntax der Konfigurationsdatei /usr/local/nginx/conf/nginx.conf ist oknginx:Der Test der Konfigurationsdatei /usr/local/nginx/conf/nginx.conf ist erfolgreichZu diesem Zeitpunkt wurde Nginx konfiguriert. Sie können fortfahren, eine systemd-Dienstdatei für Nginx zu erstellen.
Erstellen Sie eine Systemd-Dienstdatei für Nginx
Als Nächstes müssen Sie eine systemd-Datei erstellen, um den Nginx-Dienst zu verwalten. Sie können es mit dem folgenden Befehl erstellen:
nano /etc/systemd/system/nginx.serviceFügen Sie die folgenden Zeilen hinzu:
[Unit]Description=Der nginx-ServerAfter=network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/run/nginx.pidExecStartPre=/usr/bin/rm -f /run/ nginx.pidExecStartPre=/usr/sbin/nginx -tExecStart=/usr/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDKillSignal=SIGQUITTimeoutStopSec=5KillMode=mixedPrivateTmp=true[Install]WantedBy=multi-user.targetSpeichern und schließen Sie die Datei, wenn Sie fertig sind. Laden Sie dann den systemd-Daemon mit dem folgenden Befehl neu:
systemctl daemon-reloadStarten Sie als Nächstes den Nginx-Dienst und aktivieren Sie ihn nach dem Systemneustart mit dem folgenden Befehl:
systemctl start nginx
systemctl enable --now nginxSie sollten die folgende Ausgabe sehen:
Symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /etc/systemd/system/nginx.service erstellt.Als nächstes überprüfen Sie den Nginx-Dienst mit dem folgenden Befehl:
systemctl status nginxSie sollten die folgende Ausgabe sehen:
? nginx.service - Der nginx HTTP- und Reverse-Proxy-Server Geladen:geladen (/etc/systemd/system/nginx.service; aktiviert; Herstellervoreinstellung:deaktiviert) Aktiv:aktiv (läuft) seit Mo 30.12.2019 10:20:01 EST; Vor 41s Prozess:17730 ExecStart=/usr/sbin/nginx (Code=beendet, Status=0/SUCCESS) Prozess:17728 ExecStartPre=/usr/sbin/nginx -t (Code=beendet, Status=0/SUCCESS) Prozess: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? 30. Dez 10:20:00 nginx nginx[17728]:nginx:Die Syntax der Konfigurationsdatei /usr/local/nginx/conf/nginx.conf ist okDec 30 10:20:00 nginx nginx[17728]:nginx:Konfigurationsdatei / usr/local/nginx/conf/nginx.conf-Test ist erfolgreichDec 30 10:20:01 nginx systemd[1]:nginx.service:Fehler beim Parsen der PID aus der Datei /run/nginx.pid:Ungültiges ArgumentDec 30 10:20:01 nginx systemd[1]:Der nginx HTTP- und Reverse-Proxy-Server wurde gestartet.
Zu diesem Zeitpunkt wurde Nginx gestartet und ausgeführt. Sie können nun mit der Konfiguration von ModSecurity fortfahren.
Sicherheitsmodus konfigurieren
Standardmäßig ist ModSecurity auf den Nur-Erkennungs-Modus eingestellt. Sie müssen also die Regel-Engine von ModSecurity aktivieren. Sie können dies tun, indem Sie die Datei modsecurity.conf:
bearbeitennano /usr/local/nginx/conf/modsecurity.conf
Suchen Sie die folgende Zeile:
SecRuleEngine DetectionOnly
Und ersetzen Sie es durch die folgende Zeile:
SecRuleEngine ein
Suchen Sie auch die folgende Zeile:
/var/log/modsec_audit.log
Und ersetzen Sie es durch die folgende Zeile:
/var/log/nginx/modsec_audit.log
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Laden Sie als Nächstes die neueste Version von ModSecurity Core Rule Set mit dem folgenden Befehl aus dem Git-Repository herunter:
git-Klon https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs
Benennen Sie nach dem Herunterladen die CRS-Beispielkonfigurationsdatei mit dem folgenden Befehl um:
mv /usr/local/nginx/conf/owasp-crs/crs-setup.conf.example /usr/local/nginx/conf/owasp-crs/crs-setup.conf
Als nächstes konfigurieren Sie ModeSecurity so, dass diese Regeln verwendet werden, indem Sie die Datei /usr/local/nginx/conf/modsecurity.conf:
bearbeitennano /usr/local/nginx/conf/modsecurity.conf
Fügen Sie am Ende der Datei die folgenden Zeilen hinzu:
Owasp-crs/crs-setup.conf einschließenOwasp-crs/rules/*.conf einschließen
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Nginx-Dienst neu, um die Änderungen zu implementieren:
systemctl startet nginx neu
ModSecurity testen
ModSecurity ist nun installiert und konfiguriert. Es ist Zeit zu testen, ob es funktioniert oder nicht.
Um ModSecurity gegen Command Injection zu testen, öffnen Sie Ihren Webbrowser und geben Sie die URL http://localhost/index.html?exec=/bin/bash ein. Auf der folgenden Seite sollte der Fehler 403 Forbidden angezeigt werden:
Um ModSecurity gegen CSS-Angriffe zu testen, öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl aus:
curl http://localhost/?q=">"
Sie sollten die folgende Ausgabe erhalten:
403 verboten 403 verboten
nginx/1.17 .6
Schlussfolgerung
Herzliche Glückwünsche! Sie haben LibModSecurity erfolgreich mit Nginx heruntergeladen und kompiliert. Ihr Server ist nun vor verschiedenen Angriffen geschützt. Weitere Informationen finden Sie in der ModSecurity-Dokumentation unter ModSecurity Doc.