Nginx mit Modsecurity: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
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