ModSecurity ist eine beliebte, kostenlose Open-Source-Firewall für Webanwendungen, die verwendet wird, um Webanwendungen vor verschiedenen Arten von Angriffen zu schützen, darunter SQL-Injection, Cross-Site-Scripting und lokale Dateieinbindung. Es wird häufig zum Schutz von Websites, cPanel und anderen Hosting-Control-Panels eingesetzt. Während ModSecurity hauptsächlich für den Apache-Webserver entwickelt wurde, kann es auch mit dem Nginx-Webserver arbeiten.
In diesem Beitrag zeigen wir Ihnen, wie Sie ModSecurity mit Nginx auf Rocky Linux 8 installieren.
Voraussetzungen
- Ein Server, auf dem Rocky Linux 8 auf der Atlantic.Net Cloud Platform ausgeführt wird
- Ein auf Ihrem Server konfiguriertes Root-Passwort
Schritt 1 – Atlantic.Net Cloud-Server erstellen
Melden Sie sich zunächst bei Ihrem Atlantic.Net Cloud Server an. Erstellen Sie einen neuen Server und wählen Sie Rocky Linux 8 als Betriebssystem mit mindestens 2 GB RAM. Stellen Sie über SSH eine Verbindung zu Ihrem Cloud-Server her und melden Sie sich mit den oben auf der Seite hervorgehobenen Anmeldeinformationen an.
Sobald Sie sich bei Ihrem Server angemeldet haben, führen Sie den folgenden Befehl aus, um Ihr Basissystem mit den neuesten verfügbaren Paketen zu aktualisieren.
dnf update -y
Schritt 2 – Erforderliche Abhängigkeiten installieren
Zuerst müssen Sie alle erforderlichen Abhängigkeiten auf Ihrem Server installieren. Sie können alle mit dem folgenden Befehl installieren:
dnf install gcc-c++ flex bison yajl curl-devel curl zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config git wget openssl openssl-devel vim
dnf --enablerepo=powertools install doxygen yajl-devel -y
Installieren Sie als Nächstes die EPEL- und Remi-Repositorys mit dem folgenden Befehl:
dnf install epel-release https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
Als nächstes installieren Sie GeoIP mit dem folgenden Befehl:
dnf --enablerepo=remi install GeoIP-devel -y
Schritt 3 – ModSecurity installieren
Laden Sie zunächst die neueste Version von ModSecurity mit dem folgenden Befehl herunter:
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
Wechseln Sie als Nächstes in das Verzeichnis ModSecurity und installieren Sie die anderen Module mit dem folgenden Befehl:
cd ModSecurity git submodule init git submodule update
Als nächstes kompilieren und installieren Sie ModSecurity mit dem folgenden Befehl:
./build.sh ./configure make make install
Schritt 4 – Installieren Sie Nginx mit LibModsecurity Support
Um die LibModsecurity-Unterstützung in Nginx zu aktivieren, müssen Sie Nginx mit Unterstützung für LibModsecurity kompilieren.
Laden Sie zunächst den ModSecurity-nginx-Connector mit dem folgenden Befehl herunter:
cd ../ git clone 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.19.10.tar.gz
Extrahieren Sie als Nächstes die heruntergeladene Datei mit dem folgenden Befehl:
tar xzf nginx-1.19.10.tar.gz
Als nächstes erstellen Sie einen Benutzer für Nginx mit dem folgenden Befehl:
useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx
Als nächstes ändern Sie das Verzeichnis in die Nginx-Quelle und kompilieren Sie es mit dem folgenden Befehl:
cd nginx-1.19.10 ./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/root/ModSecurity-nginx
Als nächstes installieren Sie es mit dem folgenden Befehl:
make make install
Kopieren Sie als Nächstes die ModSecurity-Beispielkonfigurationsdatei und die Unicode-Zuordnungsdatei mit dem folgenden Befehl:
cp /root/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf cp /root/ModSecurity/unicode.mapping /usr/local/nginx/conf/
Als nächstes sichern Sie die Nginx-Konfigurationsdatei:
cp /usr/local/nginx/conf/nginx.conf{,.bak}
Bearbeiten Sie als Nächstes die Nginx-Konfigurationsdatei mit dem folgenden Befehl:
nano /usr/local/nginx/conf/nginx.conf
Entfernen Sie alle Zeilen und fügen Sie die folgenden Zeilen hinzu:
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 nginx.example.com; modsecurity on; modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf; access_log /var/log/nginx/access_kifarunix-demo.log; error_log /var/log/nginx/error_kifarunix-demo.log; location / { 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 und erstellen Sie dann ein Nginx-Protokollverzeichnis:
mkdir /var/log/nginx
Schritt 5 – Erstellen Sie eine Systemd-Dienstdatei für Nginx
Als Nächstes müssen Sie eine systemd-Dienstdatei erstellen, um den Nginx-Dienst zu verwalten. Sie können es mit dem folgenden Befehl erstellen:
nano /etc/systemd/system/nginx.service
Fügen Sie die folgenden Zeilen hinzu:
[Unit] Description=The nginx HTTP and reverse proxy 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 und erstellen Sie dann mit dem folgenden Befehl einen Symlink der Nginx-Binärdatei:
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
Als nächstes laden Sie den systemd-Daemon neu, um die Änderungen zu übernehmen:
systemctl daemon-reload
Starten Sie als Nächstes den Nginx-Dienst und aktivieren Sie ihn so, dass er beim Systemneustart gestartet wird:
systemctl enable --now nginx
Sie können den Status von Nginx mit dem folgenden Befehl überprüfen:
systemctl status nginx
Sie erhalten die folgende Ausgabe:
● 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 2021-11-08 09:59:48 UTC; 5s ago Process: 73046 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 73044 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 73043 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 73048 (nginx) Tasks: 2 (limit: 11411) Memory: 3.2M CGroup: /system.slice/nginx.service ├─73048 nginx: master process /usr/sbin/nginx └─73049 nginx: worker process Nov 08 09:59:48 rockylinux systemd[1]: Starting The nginx HTTP and reverse proxy server... Nov 08 09:59:48 rockylinux nginx[73044]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok Nov 08 09:59:48 rockylinux nginx[73044]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful Nov 08 09:59:48 rockylinux systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Nov 08 09:59:48 rockylinux systemd[1]: Started The nginx HTTP and reverse proxy server.
Schritt 6 – Aktivieren Sie die ModSecurity-Regel
Sie können es mit dem folgenden Befehl aktivieren:
sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /usr/local/nginx/conf/modsecurity.conf
Aktivieren Sie außerdem das Überwachungsprotokoll mit dem folgenden Befehl:
sed -i 's#/var/log/modsec_audit.log#/var/log/nginx/modsec_audit.log#' /usr/local/nginx/conf/modsecurity.conf
Schritt 7 – OWASP ModSecurity Core Rule Set installieren
OWASP stellt generische Angriffserkennungsregeln für ModSecurity bereit. Sie können es mit dem folgenden Befehl herunterladen:
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs
Als nächstes benennen Sie die OWASP-Regelkonfigurationsdatei mit dem folgenden Befehl um:
cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}
Als nächstes definieren Sie die OWASP-Regel in der ModSecurity-Konfigurationsdatei:
echo -e "Include owasp-crs/crs-setup.conf\nInclude owasp-crs/rules/*.conf" >> /usr/local/nginx/conf/modsecurity.conf
Starten Sie als Nächstes den Nginx-Dienst neu, um die Änderungen zu übernehmen:
systemctl restart nginx
Schritt 8 – ModSecurity überprüfen
An diesem Punkt ist Nginx mit ModSecurity-Unterstützung installiert und konfiguriert. Jetzt ist es an der Zeit, es zu testen.
Führen Sie die folgende Befehlsinjektion mit dem Curl-Befehl aus:
curl localhost/index.html?exec=/bin/bash
Wenn alles in Ordnung ist, sollten Sie den unten gezeigten Fehler „403 Forbidden“ erhalten:
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.19.10</center> </body> </html>
Weitere Informationen finden Sie auch im ModSecurity-Protokoll:
tail -100 /var/log/nginx/modsec_audit.log
Sie sollten die folgende Ausgabe sehen:
---imefFQJy---D-- ---imefFQJy---E-- <html>\x0d\x0a<head><title>403 Forbidden</title></head>\x0d\x0a<body>\x0d\x0a<center><h1>403 Forbidden</h1></center>\x0d\x0a<hr><center>nginx/1.19.10</center>\x0d\x0a</body>\x0d\x0a</html>\x0d\x0a ---imefFQJy---F-- HTTP/1.1 403 Server: nginx/1.19.10 Date: Mon, 08 Nov 2021 10:00:55 GMT Content-Length: 154 Content-Type: text/html Connection: keep-alive ---imefFQJy---H-- ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [file "/usr/local/nginx/conf/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/bash found within ARGS:exec: /bin/bash"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "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"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "1636365655"] [ref "o1,8v21,9t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"] ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `5' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "80"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [data ""] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "1636365655"] [ref ""]
Schlussfolgerung
In der obigen Anleitung haben wir erklärt, wie Sie ModSecurity mit Nginx auf Rocky Linux 8 installieren. Ihr Nginx-Webserver ist jetzt mit ModSecurity WAF gesichert. ModSecurity kann Ihren Server vor einer Vielzahl von Angriffen schützen. Beginnen Sie noch heute mit dem VPS-Hosting von Atlantic.Net!