Nginx mit Modsecurity: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
== Nginx mit ModSecurity und OWASP Core Ruleset schützen ==
+
= NGINX mit ModSecurity v3 und OWASP CRS als Reverse Proxy =
  
;Dieser Artikel zeigt, wie man Nginx als Reverse Proxy mit ModSecurity v3 und OWASP CRS einrichtet, um Angriffe wie SQL-Injection oder Command-Injection zu blockieren.
+
== Voraussetzungen ==
 +
* Ubuntu 22.04 oder Debian 12
 +
* Zielsystem z. B. unter http://127.0.0.1:8080 erreichbar
  
=== Voraussetzungen ===
+
== Installation ==
 +
* NGINX und ModSecurity installieren
 +
sudo apt update
 +
sudo apt install nginx libmodsecurity3 libnginx-mod-http-modsecurity git -y
  
;Du benötigst ein Debian/Ubuntu-System mit Root-Rechten und einen Backend-Server (z. B. mail.it113.int).
+
== ModSecurity aktivieren ==
 +
* Konfigurationsverzeichnis erstellen
 +
sudo mkdir -p /etc/nginx/modsec
  
* apt-get update
+
* Standardkonfiguration kopieren
 +
sudo cp /usr/share/modsecurity-crs/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
  
=== Installation der Komponenten ===
+
* DetectionOnly deaktivieren
 +
sudo sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf
  
;Installiere Nginx, ModSecurity und das OWASP CRS.
+
== OWASP Core Rule Set installieren ==
 +
* In das ModSecurity-Verzeichnis wechseln
 +
cd /etc/nginx/modsec
  
* apt-get install nginx libnginx-mod-security modsecurity-crs -y
+
* CRS klonen
* git clone https://github.com/coreruleset/coreruleset /etc/nginx/modsec/crs
+
sudo git clone https://github.com/coreruleset/coreruleset.git
* cp /etc/nginx/modsec/crs/crs-setup.conf.example /etc/nginx/modsec/crs/crs-setup.conf
 
  
=== ModSecurity global aktivieren ===
+
* Setup-Datei aktivieren
 +
sudo cp coreruleset/crs-setup.conf.example coreruleset/crs-setup.conf
  
;Bearbeite die globale Nginx-Konfiguration.
+
== ModSecurity-Snippet erstellen ==
 
+
* Konfigurationsdatei erstellen
* nano /etc/nginx/nginx.conf
+
sudo nano /etc/nginx/modsec/main.conf
  
 +
* Inhalt:
 
  modsecurity on;
 
  modsecurity on;
  modsecurity_rules_file /etc/nginx/modsec/main.conf;
+
  modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;
 
+
  include /etc/nginx/modsec/coreruleset/crs-setup.conf;
=== Hauptregeldatei erstellen ===
+
  include /etc/nginx/modsec/coreruleset/rules/*.conf;
 
 
;Erstelle die ModSecurity-Regeldatei mit CRS-Einbindung.
 
 
 
* nano /etc/nginx/modsec/main.conf
 
 
 
  Include /etc/nginx/modsec/crs/crs-setup.conf
 
  Include /etc/nginx/modsec/crs/rules/*.conf
 
 
 
=== Virtuellen Host konfigurieren ===
 
  
;Richte einen Reverse Proxy mit SSL und WAF ein.
+
== Reverse Proxy konfigurieren ==
 +
* Standard-VHost ersetzen
 +
sudo nano /etc/nginx/sites-available/default
  
* nano /etc/nginx/conf.d/revproxy.it113.int.conf
+
* Inhalt:
<pre>
 
 
  server {
 
  server {
     listen 443 ssl;
+
     listen 80;
     server_name revproxy.it113.int;
+
     server_name localhost;
 
 
    ssl_certificate /etc/nginx/ssl/revproxy.it113.int.crt;
 
    ssl_certificate_key /etc/nginx/ssl/revproxy.it113.int.key;
 
  
     modsecurity on;
+
     include /etc/nginx/modsec/main.conf;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;
 
  
 
     location / {
 
     location / {
         proxy_pass https://mail.it113.int;
+
         proxy_pass http://127.0.0.1:8080;
 
         proxy_set_header Host $host;
 
         proxy_set_header Host $host;
 
         proxy_set_header X-Real-IP $remote_addr;
 
         proxy_set_header X-Real-IP $remote_addr;
Zeile 58: Zeile 58:
 
     }
 
     }
 
  }
 
  }
</pre>
 
 
=== Nginx starten ===
 
 
;Starte Nginx, um die Konfiguration zu laden.
 
 
* systemctl restart nginx
 
 
=== Schutzmechanismen testen ===
 
 
;Teste den WAF mit simulierten Angriffen.
 
 
* curl "https://revproxy.it113.int/?q=' or '1'='1"
 
* curl "https://revproxy.it113.int/?cmd=cat%20/etc/passwd"
 
 
;Erwartete Ausgabe: 403 Forbidden, da ModSecurity die Angriffe blockiert.
 
 
=== Fehlerbehandlung ===
 
  
;Falls nichts blockiert wird, prüfe die Logs und Konfiguration.
+
== NGINX prüfen und neu laden ==
 +
* Syntax testen
 +
sudo nginx -t
  
* cat /var/log/modsecurity/audit.log
+
* Dienst neu laden
* nginx -V
+
sudo systemctl reload nginx
  
;Stelle sicher, dass "--with-http_modsecurity_module" in der Ausgabe von nginx -V erscheint.
+
== Test ==
 +
* Beispielziel: Python-Testserver
 +
python3 -m http.server 8080
  
=== Hinweise ===
+
* Angriff simulieren
 +
curl "http://localhost/?param=<script>alert(1)</script>"
  
;ModSecurity v3 mit OWASP CRS schützt vor SQLi, XSS, RCE, LFI, RFI und mehr.
+
* Audit-Log (wenn aktiviert) prüfen:
;Die Regeln können in /etc/nginx/modsec/crs/crs-setup.conf angepasst werden.
+
/var/log/nginx/error.log

Version vom 20. Juni 2025, 05:49 Uhr

NGINX mit ModSecurity v3 und OWASP CRS als Reverse Proxy

Voraussetzungen

Installation

  • NGINX und ModSecurity installieren
sudo apt update
sudo apt install nginx libmodsecurity3 libnginx-mod-http-modsecurity git -y

ModSecurity aktivieren

  • Konfigurationsverzeichnis erstellen
sudo mkdir -p /etc/nginx/modsec
  • Standardkonfiguration kopieren
sudo cp /usr/share/modsecurity-crs/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
  • DetectionOnly deaktivieren
sudo sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf

OWASP Core Rule Set installieren

  • In das ModSecurity-Verzeichnis wechseln
cd /etc/nginx/modsec
  • CRS klonen
sudo git clone https://github.com/coreruleset/coreruleset.git
  • Setup-Datei aktivieren
sudo cp coreruleset/crs-setup.conf.example coreruleset/crs-setup.conf

ModSecurity-Snippet erstellen

  • Konfigurationsdatei erstellen
sudo nano /etc/nginx/modsec/main.conf
  • Inhalt:
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;
include /etc/nginx/modsec/coreruleset/crs-setup.conf;
include /etc/nginx/modsec/coreruleset/rules/*.conf;

Reverse Proxy konfigurieren

  • Standard-VHost ersetzen
sudo nano /etc/nginx/sites-available/default
  • Inhalt:
server {
    listen 80;
    server_name localhost;
    include /etc/nginx/modsec/main.conf;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

NGINX prüfen und neu laden

  • Syntax testen
sudo nginx -t
  • Dienst neu laden
sudo systemctl reload nginx

Test

  • Beispielziel: Python-Testserver
python3 -m http.server 8080
  • Angriff simulieren
curl "http://localhost/?param=<script>alert(1)</script>"
  • Audit-Log (wenn aktiviert) prüfen:
/var/log/nginx/error.log