GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So installieren Sie ModSecurity mit Nginx unter Rocky Linux 8

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!


Linux
  1. So installieren Sie Apache Tomcat 10 mit Nginx unter Rocky Linux 8

  2. So installieren Sie Varnish 7 für Nginx unter Rocky Linux 8

  3. So installieren Sie Gulp.js unter Rocky Linux 8

  4. So installieren Sie die Programmiersprache Rust unter Rocky Linux 8

  5. So installieren Sie Fail2ban mit Firewalld auf Rocky Linux 8

So installieren Sie Sails.js Framework mit Nginx unter Rocky Linux 8

So installieren Sie die neueste Nginx Mainline unter Rocky Linux 8

So installieren Sie phpBB mit LEMP auf Rocky Linux 8

So installieren Sie das Icinga 2-Überwachungstool unter Rocky Linux 8

So installieren Sie Nginx unter Rocky Linux 8

So installieren Sie Nginx unter Rocky Linux 9