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 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.
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:
nginx -v
Ausgabe 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 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
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.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:
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.conf
Und 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.conf
Und fügst am Ende eine Include
-Zeile hinzu:
Include /etc/nginx/modsec/modsec_test.conf
Du musst nun nginx
neu laden:
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.
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; 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.
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.