Der ModSecurity-nginx-Connector ist der Verbindungspunkt zwischen nginx und libmodsecurity (ModSecurity v3). Anders ausgedrückt bietet dieses Projekt einen Kommunikationskanal zwischen Nginx und libmodsecurity. Dieser Connector ist erforderlich, um LibModSecurity mit Nginx zu verwenden.
Der ModSecurity-nginx-Connector hat die Form eines Nginx-Moduls. Das Modul dient lediglich als Kommunikationsschicht zwischen Nginx und ModSecurity.
Beachten Sie, dass dieses Projekt von libmodsecurity und nicht von ModSecurity (Version 2.9 oder niedriger) abhängt.
Die alte Version verwendet ModSecurity Standalone, einen Wrapper für Apache-Interna, um ModSecurity mit Nginx zu verknüpfen. Diese aktuelle Version ist näher an Nginx und nutzt die neue libmodsecurity, die nicht mehr von Apache abhängig ist. Dadurch weist diese aktuelle Version weniger Abhängigkeiten, weniger Fehler und ist schneller. Darüber hinaus werden auch einige neue Funktionen bereitgestellt – beispielsweise die Möglichkeit, die Konfiguration globaler Regeln mit Anpassungen pro Verzeichnis/Standort zu verwenden (z. B. SecRuleRemoveById).
Stellen Sie vor dem Kompilieren dieser Software sicher, dass Sie libmodsecurity installiert haben. Sie können es aus dem ModSecurity-Git-Repository herunterladen. Informationen zur Kompilierung und Installation von libmodsecurity finden Sie in der mitgelieferten Dokumentation.
Wenn libmodsecurity installiert ist, können Sie mit der Installation des ModSecurity-nginx-Connectors fortfahren, die dem Installationsverfahren für Nginx-Module von Drittanbietern folgt. Aus dem Nginx-Quellverzeichnis:
./configure --add-module=/path/to/ModSecurity-nginx
Oder um ein dynamisches Modul zu erstellen:
./configure --add-dynamic-module=/path/to/ModSecurity-nginx --with-compat
Beachten Sie, dass beim Erstellen eines dynamischen Moduls Ihre Nginx-Quellversion mit der Nginx-Version übereinstimmen muss, für die Sie es kompilieren.
Weitere Informationen zur Unterstützung von Nginx-Add-ons von Drittanbietern finden Sie hier: http://wiki.nginx.org/3rdPartyModules
ModSecurity für Nginx erweitert Ihre Nginx-Konfigurationsanweisungen. Es werden vier neue Richtlinien hinzugefügt:
Syntax: modsecurity on | aus
Kontext: http, Server, Standort
Standard: aus
Aktiviert oder deaktiviert die ModSecurity-Funktionalität. Beachten Sie, dass diese Konfigurationsanweisung nicht mehr mit dem SecRule-Status zusammenhängt. Stattdessen dient es jetzt ausschließlich als Nginx-Flag zum Aktivieren oder Deaktivieren des Moduls.
Syntax: modsecurity_rules_file
Kontext: http, Server, Standort
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;
}
}
Syntax: modsecurity_rules_remote
Kontext: http, Server, Standort
Standard: Nein
Gibt an, von wo (im Internet) eine Modsecurity-Konfigurationsdatei heruntergeladen wird. Außerdem wird der Schlüssel angegeben, 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;
}
}
Syntax: modsecurity_rules
Kontext: http, Server, Standort
Standard: Nein
Ermöglicht die direkte Einbindung einer ModSecurity-Regel in die Nginx-Konfiguration. Im folgenden Beispiel werden Regeln aus einer Datei geladen und bestimmte Konfigurationen pro Verzeichnis/Alias eingefügt:
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
' ;
}
}
Syntax: modsecurity_transaction_id string
Kontext: http, Server, Standort
Standard: Nein
Ermöglicht die Übergabe der Transaktions-ID von Nginx, anstatt sie in der Bibliothek zu generieren. Dies kann für Nachverfolgungszwecke nützlich sein. Betrachten Sie beispielsweise 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 / {
...
}
}
Mithilfe einer Kombination aus log_format und modsecurity_transaction_id können Sie Korrelationen zwischen Zugriffsprotokoll- und Fehlerprotokolleinträgen mithilfe derselben eindeutigen Kennung finden.
String kann Variablen enthalten.
Als Open-Source-Projekt laden wir jeden aus der Community ein (und ermutigen ihn), zu unserem Projekt beizutragen. Dies kann folgende Formen annehmen: neue Funktionen, Fehlerbehebungen, Fehlerberichte, Benutzerunterstützung für Anfänger und alles andere, bei dem Sie gerne helfen möchten. Danke schön.
Wir ziehen es vor, Ihren Patch in der GitHub-Infrastruktur zu haben, um unsere Überprüfungsarbeit und unsere QA-Integration zu erleichtern. GitHub bietet eine hervorragende Dokumentation zur Durchführung von „Pull Requests“. Weitere Informationen finden Sie hier: https://help.github.com/articles/using-pull-requests/
Bitte respektieren Sie den verwendeten Codierungsstil. Pull-Anfragen können verschiedene Commits umfassen. Stellen Sie daher pro Commit einen Fix oder eine Funktionalität bereit. Ändern Sie nichts außerhalb des Umfangs Ihrer Zielarbeit (z. B. den Codierungsstil in einer Funktion, an der Sie vorbeigegangen sind).
In unserem Code gibt es verschiedene Elemente, die als TODO oder FIXME gekennzeichnet sind und möglicherweise Ihre Aufmerksamkeit erfordern. Überprüfen Sie die Liste der Elemente, indem Sie einen grep ausführen:
$ cd /path/to/modsecurity-nginx
$ egrep -Rin "TODO|FIXME" -R *
Sie können auch einen Blick auf aktuelle Fehlerberichte und offene Probleme werfen, um eine Vorstellung davon zu bekommen, welche Art von Hilfe wir suchen.
Zusätzlich zum manuellen Test empfehlen wir Ihnen dringend, das Nginx-Testdienstprogramm zu verwenden, um sicherzustellen, dass Ihr Patch das Verhalten oder die Leistung von Nginx nicht beeinträchtigt.
Die Nginx-Tests sind verfügbar unter: http://hg.nginx.org/nginx-tests/
Um diese Tests zu verwenden, stellen Sie sicher, dass Sie über das Perl-Dienstprogramm „proe“ (Teil von Perl 5) verfügen, und fahren Sie mit den folgenden Befehlen fort:
$ cp /path/to/ModSecurity-nginx/tests/* /path/to/nginx/test/repository
$ cd /path/to/nginx/test/repository
$ TEST_NGINX_BINARY=/path/to/your/nginx prove .
Wenn Sie Probleme damit haben, dass Ihre zusätzlichen Funktionen alle Nginx-Tests bestehen, kontaktieren Sie uns oder die Nginx-Mailingliste unter: http://nginx.org/en/support.html
Wir respektieren das Nginx-Debugging-Schema. Durch die Verwendung der Konfigurationsoption „--with-debug“ während der Nginx-Konfiguration aktivieren Sie auch die Debug-Meldungen des Connectors. Es wird erwartet, dass Core-Dumps und Abstürze auf die gleiche Weise debuggt werden, die zum Debuggen von Nginx verwendet wird. Weitere Informationen finden Sie in den Nginx-Debugging-Informationen: http://wiki.nginx.org/Debugging
Wenn Sie ein Konfigurationsproblem haben oder etwas nicht wie erwartet funktioniert, nutzen Sie bitte die Mailingliste des ModSecurity-Benutzers. Probleme auf GitHub sind ebenfalls willkommen, aber wir bevorzugen es, wenn Benutzer ihre Fragen zuerst auf der Mailingliste stellen, wo Sie eine ganze Community erreichen können. Vergessen Sie auch nicht, nach einem bestehenden Problem zu suchen, bevor Sie ein neues eröffnen.
Wenn Sie vorhaben, ein Problem auf GitHub zu eröffnen, vergessen Sie bitte nicht, uns die Version Ihrer libmodsecurity und die Version des von Ihnen ausgeführten Nginx-Connectors mitzuteilen.
Bitte melden Sie Sicherheitsprobleme nicht öffentlich. Kontaktieren Sie uns stattdessen unter [email protected], um das Problem zu melden. Sobald das Problem behoben ist, erteilen wir Ihnen eine Gutschrift für die Entdeckung.
Wir würden gerne Ihre Ideen für eine neue Funktion besprechen. Bitte beachten Sie, dass es sich hierbei um ein von der Community betriebenes Projekt handelt. Nehmen Sie daher zunächst über die Mailingliste Kontakt mit der Community auf, um Feedback einzuholen. Alternativ können Sie gerne GitHub-Ausgaben öffnen und nach neuen Funktionen fragen. Bevor Sie eine neue Ausgabe öffnen, prüfen Sie bitte, ob eine Funktionsanfrage für die gewünschte Funktionalität vorliegt.
Wir wünschen uns sehr, dass unsere Pakete pünktlich in den Distributionen verfügbar sind. Teilen Sie uns mit, ob wir Ihnen die Arbeit als Paketierer erleichtern können.