nginx: Web Application Firewall
Diese Seite ist nur für fortgeschrittene Benutzer. Eine Fehlkonfiguration hier kann Anfragen an Ihre API-Endpunkte oder Website blockieren.
Eine Web Application Firewall ist kein Ersatz für richtig implementierte Sicherheit im Front- und Backend.
Hintergrundinformationen
Die Schulrouter Plus WAF verwendet NAXSI, ein ladbares Modul für den Webserver nginx. NAXSI hat zwei Regeltypen:
-
Hauptregeln: Diese Regeln sind global gültig. Üblicher Anwendungsfall: Blockieren von Codefragmenten, die dazu verwendet werden können, sich unerlaubt Zugriff auf den Server zu verschaffen (z. B. SQL-/XPATH-Injektion für Datenzugriff) oder die Kontrolle über einen fremden Client zu erlangen (z. B. XSS).
-
Grundregeln: Diese Regeln werden normalerweise in den Standorten verwendet, um Hauptregeln nach ID innerhalb eines Standorts oder für zusätzliche Regeln zu whitelisten.
Ein guter Startpunkt sind die OWASP Cheat Sheets.
Zusätzlich zu den selbst definierten Regeln enthält NAXSI libinjection, die direkt in der Standortkonfiguration verfügbar ist. Das NAXSI-Projekt selbst hat eine hochwertige Dokumentation für das Modul online. Ein guter Regelsatz für den Anfang findet sich bei GitHub auf der Projektseite. Es kann aus lizenzrechtlichen Gründen (GPL kann nicht in BSD 2 Clause Code verwendet werden) nicht vom Plugin bereitgestellt werden, aber Sie können es selbst manuell eingeben.
Schulrouter Plus spezifische Informationen
-
Schulrouter Plus blockiert von Bots verwendete User-Agents automatisch - dies kann nicht konfiguriert werden
-
Die Fehlerseiten werden unter /usr/local/etc/nginx/views gespeichert
Konfiguration
WAF-Regeln
WAF-Regeln werden verwendet, um eine Aktion auszulösen, wenn eine Bedingung zu wahr oder falsch (negiert) ausgewertet wird. Der übliche Anwendungsfall ist das Erhöhen eines Scores, der anschließend überprüft werden kann, aber eine Regel kann zum Beispiel auch sofort blockieren (das Plugin unterstützt nur einen Score). WAF-Regeln werden zu einer WAF-Richtlinie gruppiert, die dann den aggregierten Score auswerten kann.
Die Beschreibung wird in der GUI angezeigt und die Meldung erscheint im Protokoll. Negate schaltet die Bedingung von „if“ auf „unless“ um. Die ID muss eindeutig sein. Sie sollten ein Schema wie 1000 bis 2000 sind SQL-Injection oder ähnliches verwenden, weil das die Log-Auswertung bei Bedarf verbessert (Sie könnten z. B. Tortendiagramme erstellen, weil Sie nach dem ID-Bereich gruppieren können).
Der nächste Abschnitt beschreibt den Regeltyp und die Übereinstimmung. Sie können den Übereinstimmungswert wie truncate (ein SQL-Schlüsselwort, um den Inhalt der Tabelle zu löschen) an verschiedenen Stellen in der HTTP-Anfrage überprüfen. Meistens können alle geprüft werden, oder als Alternative können Sie einen Namen verwenden, so dass er z. B. nur auf einen bestimmten Header passt. Bitte beachten Sie, dass nicht alle von ihnen miteinander kompatibel sind, also konsultieren Sie bitte die NAXSI-Dokumente.
WAF-Richtlinie
Der Name wird im Ortsauswahlfeld verwendet, die Regeln sind eine Sammlung der zuvor erstellten Regeln.
Die Wiederverwendung von Hauptregeln wird nicht funktionieren, klonen Sie sie bei Bedarf. Der Grund ist, dass sie in der id + score-Variable in Konflikt geraten würden
Name | ein guter Name wie „block sql injection“ |
Regeln | die zu gruppierenden Regeln auswählen |
Wert | einen Vergleichswert |
Bediener | Wählen Sie einen Vergleichsoperator, um den Wert des Score-Operators zu vergleichen |
Aktion | normalerweise blockieren |
Als (unvollständiges) Beispiel:
Name | Block SQLi |
Regeln | enthält select, enthält from, enthält union, enthält delete |
Wert | 16 |
Bediener | größer oder gleich |
Aktion | blockieren |
Position
Im letzten Schritt müssen die Regeln auf den Standort angewendet werden.
Um die WAF an einem Standort zu aktivieren, müssen Sie das Kontrollkästchen „Enable Security Rules“ aktivieren. Am Anfang wäre es sinnvoll, wenn der „Lernmodus“ aktiviert ist (es wird nichts geblockt, aber protokolliert, so dass Sie Whitelists hinzufügen können, bis Sie keine False Positives mehr erhalten).
Die nächsten beiden Felder sind die Punkte für die Libinjektion. Beide addieren eine Punktzahl von 8, wenn sie auslösen. Werte bis zu 8 werden also blockiert.
In der nächsten Auswahlliste können Sie Ihre benutzerdefinierten Richtlinien auswählen, die nun angewendet werden.
Testen
Wenn Sie die WAF auslösen, indem Sie eine böse aussehende Anfrage an die WAF stellen, sollten Sie eine Meldung im Server-Fehlerprotokoll sowie eine mit Schulrouter Plus gebrandete Fehlerseite (Request Denied For Security Reasons) erhalten.
Sie können curl verwenden, um es auszulösen (wenn Sie die folgenden SQL-Schlüsselwörter blockieren):
curl "http://example.com/index.php?a=select&b=union&c=from"
Sie können „NAXSI“ als Filter im Filterfeld der Protokollanzeige verwenden, wenn Sie das Fehlerprotokoll betrachten.