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
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 doxygen2. 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.
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 installNach 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:
nginx -vAusgabe in meinem Fall:
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.
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 modules4. 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
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.
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:
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:
SecRuleEngine On
SecAuditEngine RelevantOnly
SecAuditLog /var/log/modsec_audit.log7. 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:
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:
sudo nano /etc/nginx/modsec/modsec_test.confUnd fügst folgenden Inhalt ein:
# 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:
sudo nano /etc/nginx/modsec/modsecurity.confUnd fügst am Ende eine Include-Zeile hinzu:
Include /etc/nginx/modsec/modsec_test.confDu musst nun nginx neu laden:
sudo nginx -t && sudo systemctl reload nginxVon deinem lokalen Computer aus sende einen Test-Request z. B. mittels curl. Du kannst auch die Adresse einfach in deinem Webbrowser eingeben.
curl -i "https://softworx.at/test/?test=blockme"Wenn du curl verwendest, sollte das Ergebnis ähnlich wie folgt aussehen:
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; preloadAusschlaggebend 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.
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.