Zum Inhalt

Sicherheit: ModSecurity v3 Nginx Connector

Installation

CentOS/RHEL/RockyLinux/etc. und Amazon Linux werden unterstützt und erfordern ein Abonnement.

Fedora Linux wird kostenlos unterstützt und benötigt kein Abonnement.

Betriebssystem-spezifische vollständige Installations- und Konfigurationsanleitungen verfügbar:

Weitere unterstützte Betriebssysteme

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-security

Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_http_modsecurity_module.so;

Dieses Dokument beschreibt nginx-module-security v1.0.4, das am 21. Mai 2025 veröffentlicht wurde.


Der ModSecurity-nginx Connector ist der Verbindungspunkt zwischen nginx und libmodsecurity (ModSecurity v3). Anders ausgedrückt, dieses Projekt bietet einen Kommunikationskanal zwischen nginx und libmodsecurity. Dieser Connector ist erforderlich, um LibModSecurity mit nginx zu verwenden.

Der ModSecurity-nginx Connector liegt in Form eines nginx Moduls vor. Das Modul dient einfach als Kommunikationsschicht zwischen nginx und ModSecurity.

Bitte beachten Sie, dass dieses Projekt von libmodsecurity abhängt und nicht von ModSecurity (Version 2.9 oder älter).

Was ist der Unterschied zwischen diesem Projekt und dem alten ModSecurity-Add-on für nginx?

Die alte Version verwendet ModSecurity eigenständig, was ein Wrapper für die internen Funktionen von Apache ist, um ModSecurity mit nginx zu verbinden. Diese aktuelle Version ist näher an nginx und verwendet die neue libmodsecurity, die nicht mehr von Apache abhängig ist. Infolgedessen hat diese aktuelle Version weniger Abhängigkeiten, weniger Fehler und ist schneller. Darüber hinaus wird auch einige neue Funktionalität bereitgestellt - wie die Möglichkeit, globale Regelkonfigurationen mit benutzerdefinierten Anpassungen pro Verzeichnis/Standort zu verwenden (z.B. SecRuleRemoveById).

Verwendung

ModSecurity für nginx erweitert Ihre nginx-Konfigurationsdirektiven. Es fügt vier neue Direktiven hinzu, und sie sind:

modsecurity

Syntax: modsecurity on | off

Kontext: http, server, location

Standard: off

Aktiviert oder deaktiviert die Funktionalität von ModSecurity. Bitte beachten Sie, dass diese Konfigurationsdirektive nicht mehr mit dem SecRule-Zustand verbunden ist. Stattdessen dient sie jetzt ausschließlich als nginx-Flag, um das Modul zu aktivieren oder zu deaktivieren.

modsecurity_rules_file

Syntax: modsecurity_rules_file <Pfad zur Regeldatei>

Kontext: http, server, location

Standard: nein

Gibt den Speicherort der ModSecurity-Konfigurationsdatei an, z.B.:

server {
    modsecurity on;
    location / {
        root /var/www/html;
        modsecurity_rules_file /etc/my_modsecurity_rules.conf;
    }
}

modsecurity_rules_remote

Syntax: modsecurity_rules_remote <Schlüssel> <URL zu Regeln>

Kontext: http, server, location

Standard: nein

Gibt an, von wo (im Internet) eine ModSecurity-Konfigurationsdatei heruntergeladen wird. Es gibt auch den Schlüssel an, der zur Authentifizierung bei diesem Server verwendet wird:

server {
    modsecurity on;
    location / {
        root /var/www/html;
        modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
    }
}

modsecurity_rules

Syntax: modsecurity_rules <ModSecurity-Regel>

Kontext: http, server, location

Standard: nein

Ermöglicht die direkte Einbindung einer ModSecurity-Regel in die nginx-Konfiguration. Das folgende Beispiel lädt Regeln aus einer Datei und injiziert spezifische Konfigurationen pro Verzeichnis/Alias:

server {
    modsecurity on;
    location / {
        root /var/www/html;
        modsecurity_rules_file /etc/my_modsecurity_rules.conf;
    }
    location /ops {
        root /var/www/html/opts;
        modsecurity_rules '
          SecRuleEngine On
          SecDebugLog /tmp/modsec_debug.log
          SecDebugLogLevel 9
          SecRuleRemoveById 10
        ';
    }
}

modsecurity_transaction_id

Syntax: modsecurity_transaction_id string

Kontext: http, server, location

Standard: nein

Ermöglicht das Übergeben der Transaktions-ID von nginx, anstatt sie in der Bibliothek zu generieren. Dies kann für Nachverfolgungszwecke nützlich sein, z.B. betrachten Sie diese Konfiguration:

log_format extended '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" $request_id';

server {
    server_name host1;
    modsecurity on;
    modsecurity_transaction_id "host1-$request_id";
    access_log logs/host1-access.log extended;
    error_log logs/host1-error.log;
    location / {
        ...
    }
}

server {
    server_name host2;
    modsecurity on;
    modsecurity_transaction_id "host2-$request_id";
    access_log logs/host2-access.log extended;
    error_log logs/host2-error.log;
    location / {
        ...
    }
}

Durch die Verwendung einer Kombination aus log_format und modsecurity_transaction_id können Sie Korrelationen zwischen Zugriffsprotokoll- und Fehlerprotokolleinträgen finden, die denselben eindeutigen Identifikator verwenden.

Der String kann Variablen enthalten.

GitHub

Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub Repository für nginx-module-security.