NGINX + ModSecurity v3 + OWASP CRS unter Ubuntu 24.04 LTS – Schritt für Schritt – Teil 1

Teil 1 – Compilieren und Installation der Module und Aktivierung von ModSecurity v3

Diese Anleitung zeigt die vollständige Installation von ModSecurity v3 mit NGINX und OWASP Core Rule Set (CRS) auf einem Ubuntu-Server – inklusive korrekter Modulpfade, Symlink-Konvention und Beispieltests.

  • In Teil 1 installierst du die benötigen Module und aktivierst ModSecurity v3.
  • In Teil 2 fügen wir das OWASP Core Rule Set (CRS) hinzu.
  • In Teil 3 behandeln wir die nötigen Ausnahmen für das OWASP Core Rule Set um eine WordPress Website damit betreiben zu können.

1. Abhängigkeiten installieren

Bash
sudo apt update
sudo apt install -y git g++ build-essential autoconf automake libtool \
  libpcre3 libpcre3-dev libpcre2-dev libxml2 libxml2-dev libyajl-dev \
  pkg-config zlib1g zlib1g-dev libcurl4-openssl-dev \
  liblua5.3-dev libgeoip-dev doxygen

2. ModSecurity v3 compilieren und installieren

Zuerst erstellst du ModSecurity. Danach musst du in einem weiteren Schritt das Modul für die Integration in NGINX bauen.

Bash
cd /usr/local/src
sudo git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
sudo git submodule init
sudo git submodule update
sudo ./build.sh
sudo ./configure
sudo make -j"$(nproc)"
sudo make install

Nach erfolgreicher Installation wurde ModSecurity eingerichtet und unter anderem das Verzeichnis /usr/local/modsecurity erstellt.

3. NGINX-Modul bauen

Du musst die auf deinem System verwendete Version von NGINX ermitteln:

Bash
nginx -v

Ausgabe in meinem Fall:

Output
nginx version: nginx/1.24.0 (Ubuntu)

Abhängig davon benötigst du die Quellen von NGINX für die Erstellung des ModSecurity-Moduls. Im Beispielcode wird zuerst das ModSecurity-nginx.git Repository heruntergeladen und anschließend der Sourcecode für NGINX 1.24.0.

Du erzeugst nur die NGINX-Module mit sudo make modules.

Bash
cd /usr/local/src
sudo git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz
sudo tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
sudo ./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
sudo make modules

4. Modul platzieren und aktivieren

Du solltest dich im Verzeichnis /usr/local/src/nginx-1.24.0 befinden.

Das erstelle NGINX-Modul kopierst du in das Modulverzeichnis und anschließend erzeugst du die Datei mod-modsecurity.conf und den Link in nginx/modules-available.

Es wird dabei folgende Konfiguration angenommen:

  • die vorhandenen Module befinden sich in /usr/share/nginx/modules-available
  • die Links für die aktivierten Module befinden sich in /etc/nginx/modules-enabled
Bash
sudo cp objs/ngx_http_modsecurity_module.so /usr/lib/nginx/modules/
sudo chmod 0644 /usr/lib/nginx/modules/ngx_http_modsecurity_module.so
echo "load_module modules/ngx_http_modsecurity_module.so;" | sudo tee /usr/share/nginx/modules-available/mod-modsecurity.conf
sudo ln -s /usr/share/nginx/modules-available/mod-modsecurity.conf /etc/nginx/modules-enabled/50-modsecurity.conf

5. ModSecurity-Konfiguration erstellen

Als nächstes erstellst du die Basiskonfiguration für ModSecurity.

Bash
sudo mkdir -p /etc/nginx/modsec
cd /etc/nginx/modsec
sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended ./modsecurity.conf
sudo cp /usr/local/src/ModSecurity/unicode.mapping .

Falls die Datei unicode.mapping nicht vorhanden ist, kannst du sie mittels wget herunterladen:

Bash
wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/unicode.mapping -O /etc/nginx/modsec/unicode.mapping

6. Basisregeln aktivieren

Du hast die Datei modsecurity.conf gerade nach /etc/nginx/modsec kopiert.

Überprüfe in der Datei ob nachfolgende Parameter richtig gesetzt sind:

modsecurity.conf excerpt
SecRuleEngine On
SecAuditEngine RelevantOnly
SecAuditLog /var/log/modsec_audit.log

7. Wir binden das Modul jetzt in unsere Website ein und testen ob es funktioniert

Öffne die NGINX-Konfigurationsdatei zu deiner Website.

Im server-Abschnitt, gleich unter listen füge folgenden Text ein:

example.com.conf excerpt
server {
  listen ...
  server_name ...
  
  	# activate ModSecurity
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;

Du erstellst nun die Datei /etc/nginx/modsec/modsec_test.conf:

Bash
sudo nano /etc/nginx/modsec/modsec_test.conf

Und fügst folgenden Inhalt ein:

modsec_test.conf
# For testing purpose
SecRule REQUEST_URI "@contains blockme" "id:1001,phase:1,deny,status:403,msg:'Test rule triggered'"

Anschließend bearbeitest du die Datei /etc/nginx/modsec/modsecurity.conf:

Bash
sudo nano /etc/nginx/modsec/modsecurity.conf

Und fügst am Ende eine Include-Zeile hinzu:

modsecurity.conf excerpt
Include /etc/nginx/modsec/modsec_test.conf

Du musst nun nginx neu laden:

Bash
sudo nginx -t && sudo systemctl reload nginx

Von deinem lokalen Computer aus sende einen Test-Request z. B. mittels curl. Du kannst auch die Adresse einfach in deinem Webbrowser eingeben.

Bash
curl -i "https://softworx.at/test/?test=blockme"

Wenn du curl verwendest, sollte das Ergebnis ähnlich wie folgt aussehen:

Output
HTTP/2 403 
server: nginx/1.24.0 (Ubuntu)
date: Wed, 11 Jun 2025 15:21:00 GMT
content-type: text/html
content-length: 162
strict-transport-security: max-age=63072000; includeSubDomains; preload

Ausschlaggebend ist HTTP/2 403, das ist der HTTP Statuscode für Forbidden, d. h. die Anfrage wurde blockiert und ModSecurity funktioniert.

Installation des OWASP Core Rule Sets

In Teil 2 erfährst du, wei du das OWASP Core Rule Set installierst und aktivierst.

Kommentare

Schreibe einen Kommentar