<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://techcorner.max-it.de/index.php?action=history&amp;feed=atom&amp;title=OPNsense_-_NGINX_Reverse_Proxy_und_WAF</id>
	<title>OPNsense - NGINX Reverse Proxy und WAF - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://techcorner.max-it.de/index.php?action=history&amp;feed=atom&amp;title=OPNsense_-_NGINX_Reverse_Proxy_und_WAF"/>
	<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=OPNsense_-_NGINX_Reverse_Proxy_und_WAF&amp;action=history"/>
	<updated>2026-10-09T01:20:39Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in maxTechCorner</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://techcorner.max-it.de/index.php?title=OPNsense_-_NGINX_Reverse_Proxy_und_WAF&amp;diff=3956&amp;oldid=prev</id>
		<title>imported&gt;TechCorner-Redaktion: Verlinkung auf den Artikel OPNsense - ACME-Client für Let&#039;s Encrypt-Zertifikate ergänzt</title>
		<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=OPNsense_-_NGINX_Reverse_Proxy_und_WAF&amp;diff=3956&amp;oldid=prev"/>
		<updated>2026-10-08T00:00:00Z</updated>

		<summary type="html">&lt;p&gt;Verlinkung auf den Artikel OPNsense - ACME-Client für Let&amp;#039;s Encrypt-Zertifikate ergänzt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Steckbrief&lt;br /&gt;
| gilt_fuer   = OPNsense 26.1/26.7 mit Plugin os-nginx 1.36, os-acme-client&lt;br /&gt;
| bereich     = IT-Security&lt;br /&gt;
| dauer       = ca. 45 Minuten (erste Veröffentlichung), Walkthrough inkl. WAF ca. 3 Stunden plus Lernphase&lt;br /&gt;
| rechte      = Administrator (OPNsense-WebUI), Zugriff auf die öffentliche DNS-Zone&lt;br /&gt;
| stand       = Oktober 2026&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NGINX&amp;#039;&amp;#039;&amp;#039; ist einer der meistgenutzten Webserver und &amp;#039;&amp;#039;&amp;#039;[[Reverse Proxy|Reverse Proxys]]&amp;#039;&amp;#039;&amp;#039; der Welt. Das Plugin &amp;#039;&amp;#039;&amp;#039;os-nginx&amp;#039;&amp;#039;&amp;#039; bringt ihn auf die OPNsense – mit einem Funktionsumfang, der über einen reinen Proxy deutlich hinausgeht: Lastverteilung, Caching, IP-Zugriffslisten, Basic Auth, Client-Zertifikate, Sicherheits-Header, automatische Sperre von Angreifern und vor allem eine integrierte &amp;#039;&amp;#039;&amp;#039;[[Web Application Firewall]] (WAF)&amp;#039;&amp;#039;&amp;#039; auf Basis von &amp;#039;&amp;#039;&amp;#039;NAXSI&amp;#039;&amp;#039;&amp;#039;. Zusätzlich kann NGINX TCP- und UDP-Datenströme weiterleiten und anhand des TLS-Servernamens (SNI) verteilen.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel stellt die Bausteine des Plugins vor und führt in einem &amp;#039;&amp;#039;&amp;#039;Walkthrough&amp;#039;&amp;#039;&amp;#039; von der ersten Veröffentlichung bis zur WAF.&lt;br /&gt;
&lt;br /&gt;
== Wann NGINX auf der OPNsense? ==&lt;br /&gt;
* Wenn eine &amp;#039;&amp;#039;&amp;#039;WAF&amp;#039;&amp;#039;&amp;#039; gegen SQL-Injection und Cross-Site-Scripting vor einer Webanwendung gewünscht ist – ohne kommerzielle Lizenz.&lt;br /&gt;
* Wenn &amp;#039;&amp;#039;&amp;#039;Caching&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Sicherheits-Header&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;Bot-/Angreifersperren&amp;#039;&amp;#039;&amp;#039; direkt am Proxy umgesetzt werden sollen.&lt;br /&gt;
* Wenn neben HTTP auch &amp;#039;&amp;#039;&amp;#039;TCP/UDP-Streams&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;SNI-basiertes Routing&amp;#039;&amp;#039;&amp;#039; benötigt werden.&lt;br /&gt;
Für die einfache Veröffentlichung mit automatischem HTTPS ist [[OPNsense - Caddy Reverse Proxy|Caddy]] bequemer, für komplexe Lastverteilung [[OPNsense - HAProxy Reverse Proxy und Load Balancer|HAProxy]].&lt;br /&gt;
&lt;br /&gt;
== Die Bausteine des Plugins ==&lt;br /&gt;
Die Konfiguration befindet sich unter &amp;#039;&amp;#039;&amp;#039;Services → Nginx → Configuration&amp;#039;&amp;#039;&amp;#039; und ist in Reiter gegliedert:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bereich !! Element !! Aufgabe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Upstream&amp;#039;&amp;#039;&amp;#039; || Upstream Server || Ein einzelner Zielserver (IP/Name, Port, Priorität)&lt;br /&gt;
|-&lt;br /&gt;
| || Upstream || Gruppe von Upstream Servern mit Lastverteilung und TLS-Einstellungen zum Backend&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;HTTP(S)&amp;#039;&amp;#039;&amp;#039; || Location || Ordnet URL-Pfade einem Upstream (oder Verzeichnis) zu – inkl. WAF, Auth, Caching&lt;br /&gt;
|-&lt;br /&gt;
| || HTTP Server || Der eigentliche virtuelle Host: Server Name, Ports, Zertifikat, Locations, Sicherheitseinstellungen&lt;br /&gt;
|-&lt;br /&gt;
| || Naxsi WAF Policy / Rule || Regeln und Richtlinien der Web Application Firewall&lt;br /&gt;
|-&lt;br /&gt;
| || Security Headers, Error Pages, Cache Path, URL Rewriting || Zusatzfunktionen für HTTP Server und Locations&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Access&amp;#039;&amp;#039;&amp;#039; || IP ACLs, User List, Credential, Limit Zone, Connection Limits || Zugriffssteuerung und Begrenzungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Data Streams&amp;#039;&amp;#039;&amp;#039; || Stream Servers, SNI Based Routing || TCP/UDP-Weiterleitung, Routing nach SNI&lt;br /&gt;
|}&lt;br /&gt;
Weitere Menüpunkte: &amp;#039;&amp;#039;&amp;#039;Banned&amp;#039;&amp;#039;&amp;#039; (automatisch gesperrte IPs), &amp;#039;&amp;#039;&amp;#039;TLS Fingerprints&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Traffic Statistic&amp;#039;&amp;#039;&amp;#039; sowie die Logs für HTTP- und Stream-Zugriffe und -Fehler.&lt;br /&gt;
&lt;br /&gt;
[[Datei:OPNsense-NGINX-Walkthrough.png|thumb|center|750px|Aufbau in NGINX: Upstream Server werden zu einem Upstream gruppiert, eine Location ordnet Pfade dem Upstream zu und aktiviert WAF und Zugriffsschutz, der HTTP Server bündelt Domain, Zertifikat und Locations.]]&lt;br /&gt;
&lt;br /&gt;
== Das Walkthrough-Szenario ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Domain !! Ziel !! Schutz&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;portal.example.com&amp;lt;/code&amp;gt; || Webanwendung auf &amp;lt;code&amp;gt;192.168.10.70:8080&amp;lt;/code&amp;gt; || öffentlich, &amp;#039;&amp;#039;&amp;#039;NAXSI-WAF&amp;#039;&amp;#039;&amp;#039;, Sicherheits-Header, Honeypot&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intern.example.com&amp;lt;/code&amp;gt; || Intranet auf &amp;lt;code&amp;gt;https://192.168.10.50&amp;lt;/code&amp;gt; || nur interne Netze (IP ACL) + Basic Auth&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Schritt 1: Vorbereitung ==&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;System → Firmware → Plugins&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;&amp;#039;os-nginx&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;os-acme-client&amp;#039;&amp;#039;&amp;#039; installieren.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;System → Settings → Administration&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;&amp;#039;TCP Port&amp;#039;&amp;#039;&amp;#039; der Weboberfläche z. B. auf &amp;lt;code&amp;gt;8443&amp;lt;/code&amp;gt; ändern und &amp;#039;&amp;#039;&amp;#039;HTTP Redirect – Disable web GUI redirect rule&amp;#039;&amp;#039;&amp;#039; aktivieren.&lt;br /&gt;
# Öffentliche A-/AAAA-Records für beide Domains auf die WAN-Adresse setzen.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Firewall → Rules&amp;#039;&amp;#039;&amp;#039;, Interface &amp;#039;&amp;#039;WAN&amp;#039;&amp;#039; (und &amp;#039;&amp;#039;LAN&amp;#039;&amp;#039;): TCP 80 und 443 von &amp;#039;&amp;#039;any&amp;#039;&amp;#039; auf &amp;#039;&amp;#039;This Firewall&amp;#039;&amp;#039;. Eine Portweiterleitung ist nicht nötig – NGINX läuft direkt auf der Firewall.&lt;br /&gt;
&lt;br /&gt;
== Schritt 2: Zertifikate ==&lt;br /&gt;
Das Plugin besorgt keine Zertifikate selbst, arbeitet aber mit &amp;#039;&amp;#039;&amp;#039;[[OPNsense - ACME-Client für Let&amp;#039;s Encrypt-Zertifikate|os-acme-client]]&amp;#039;&amp;#039;&amp;#039; zusammen:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;HTTP-01:&amp;#039;&amp;#039;&amp;#039; Im HTTP Server die Option &amp;#039;&amp;#039;&amp;#039;Enable Let&amp;#039;s Encrypt Plugin Support&amp;#039;&amp;#039;&amp;#039; aktivieren – NGINX reicht dann die ACME-Challenges an den ACME-Client weiter.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DNS-01:&amp;#039;&amp;#039;&amp;#039; Unabhängig vom Webserver und auch für Wildcard-Zertifikate geeignet (API des DNS-Anbieters im ACME-Client hinterlegen).&lt;br /&gt;
Im ACME-Client unter &amp;#039;&amp;#039;Automations&amp;#039;&amp;#039; einen &amp;#039;&amp;#039;&amp;#039;Neustart von NGINX&amp;#039;&amp;#039;&amp;#039; nach jeder Erneuerung hinterlegen. Die Zertifikate erscheinen anschließend unter &amp;#039;&amp;#039;System → Trust → Certificates&amp;#039;&amp;#039; und lassen sich im HTTP Server auswählen.&lt;br /&gt;
&lt;br /&gt;
== Schritt 3: Upstream Server und Upstream ==&lt;br /&gt;
=== Upstream Server ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Upstream → Upstream Server&amp;#039;&amp;#039;&amp;#039; → &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;portal1&amp;lt;/code&amp;gt;, &amp;#039;&amp;#039;&amp;#039;Server:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;192.168.10.70&amp;lt;/code&amp;gt;, &amp;#039;&amp;#039;&amp;#039;Port:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;8080&amp;lt;/code&amp;gt;, &amp;#039;&amp;#039;&amp;#039;Server Priority:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Für das Intranet entsprechend &amp;lt;code&amp;gt;intranet1&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;192.168.10.50&amp;lt;/code&amp;gt;, Port &amp;lt;code&amp;gt;443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;#039;&amp;#039;Maximum Failures&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Fail Timeout&amp;#039;&amp;#039; steuern, wann ein Server vorübergehend aus der Verteilung genommen wird.&lt;br /&gt;
&lt;br /&gt;
=== Upstream ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Upstream → Upstream&amp;#039;&amp;#039;&amp;#039; → &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! up_portal !! up_intranet&lt;br /&gt;
|-&lt;br /&gt;
| Server Entries || portal1 (weitere für Lastverteilung) || intranet1&lt;br /&gt;
|-&lt;br /&gt;
| Load Balancing Algorithm || Weighted Round Robin (Standard) oder IP Hash || Standard&lt;br /&gt;
|-&lt;br /&gt;
| Enable TLS (HTTPS) || aus (Backend spricht HTTP) || &amp;#039;&amp;#039;&amp;#039;an&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| TLS: Verify Certificate || – || an, mit &amp;#039;&amp;#039;&amp;#039;TLS: Trusted Certificate&amp;#039;&amp;#039;&amp;#039; (interne CA) und &amp;#039;&amp;#039;&amp;#039;TLS: Servername override&amp;#039;&amp;#039;&amp;#039; = Name im Zertifikat&lt;br /&gt;
|}&lt;br /&gt;
{{Hinweis|Die Zertifikatsprüfung zum Backend ist standardmäßig aktiv. Damit sie gelingt, muss die OPNsense der ausstellenden CA vertrauen (CA unter &amp;#039;&amp;#039;System → Trust → Authorities&amp;#039;&amp;#039; importieren) und der Servername muss passen. Nur in vertrauenswürdigen Netzen und bewusst die Prüfung deaktivieren.}}&lt;br /&gt;
&lt;br /&gt;
== Schritt 4: Locations ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HTTP(S) → Location&amp;#039;&amp;#039;&amp;#039; → &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! loc_portal !! loc_intranet&lt;br /&gt;
|-&lt;br /&gt;
| URL Pattern || &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Match Type || leer (Präfix-Abgleich) || leer&lt;br /&gt;
|-&lt;br /&gt;
| Upstream Servers || up_portal || up_intranet&lt;br /&gt;
|-&lt;br /&gt;
| Force HTTPS || an || an&lt;br /&gt;
|-&lt;br /&gt;
| WebSocket Support || bei Bedarf || –&lt;br /&gt;
|-&lt;br /&gt;
| Enable Security Rules (WAF) || zunächst aus (Schritt 7) || –&lt;br /&gt;
|-&lt;br /&gt;
| Basic Authentication / Basic Credentials List || – || an / Benutzerliste (Schritt 6)&lt;br /&gt;
|-&lt;br /&gt;
| IP ACL || – || &amp;#039;&amp;#039;nur_intern&amp;#039;&amp;#039; (Schritt 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Schritt 5: HTTP Server ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HTTP(S) → HTTP Server&amp;#039;&amp;#039;&amp;#039; → &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039; (je ein Server pro Domain):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Wert (portal.example.com)&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Listen Address / HTTPS Listen Address || &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;443&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Server Name || &amp;lt;code&amp;gt;portal.example.com&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Locations || loc_portal&lt;br /&gt;
|-&lt;br /&gt;
| TLS Certificate || das ACME-Zertifikat&lt;br /&gt;
|-&lt;br /&gt;
| Enable Let&amp;#039;s Encrypt Plugin Support || an (bei HTTP-01)&lt;br /&gt;
|-&lt;br /&gt;
| HTTPS Only || an&lt;br /&gt;
|-&lt;br /&gt;
| HTTP/2 || an; HTTP/3 (QUIC) optional (dann UDP 443 freigeben)&lt;br /&gt;
|-&lt;br /&gt;
| TLS Protocols || TLSv1.2, TLSv1.3&lt;br /&gt;
|-&lt;br /&gt;
| Block Configuration Files || an&lt;br /&gt;
|-&lt;br /&gt;
| Security Header || Richtlinie aus Schritt 8&lt;br /&gt;
|-&lt;br /&gt;
| Default Server || bei genau einem Server als Fallback, sonst einen eigenen „Catch-all“-Server anlegen&lt;br /&gt;
|}&lt;br /&gt;
Anschließend unten auf &amp;#039;&amp;#039;&amp;#039;Apply&amp;#039;&amp;#039;&amp;#039; klicken. Über &amp;#039;&amp;#039;&amp;#039;Config Preview&amp;#039;&amp;#039;&amp;#039; lässt sich die erzeugte NGINX-Konfiguration ansehen und testen. Danach &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://portal.example.com&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; aufrufen.&lt;br /&gt;
&lt;br /&gt;
== Schritt 6: Zugriff beschränken (IP ACL und Basic Auth) ==&lt;br /&gt;
=== IP ACL ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Access → IP ACLs&amp;#039;&amp;#039;&amp;#039; → &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039;: Name &amp;#039;&amp;#039;nur_intern&amp;#039;&amp;#039;, Einträge &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt; (ggf. VPN-Netz) mit &amp;#039;&amp;#039;allow&amp;#039;&amp;#039;, Standardaktion &amp;#039;&amp;#039;deny&amp;#039;&amp;#039;. Die ACL in der Location &amp;#039;&amp;#039;loc_intranet&amp;#039;&amp;#039; (oder im HTTP Server) auswählen.&lt;br /&gt;
&lt;br /&gt;
=== Basic Auth ===&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Access → Credential&amp;#039;&amp;#039;&amp;#039;: Benutzer mit Passwort anlegen.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Access → User List&amp;#039;&amp;#039;&amp;#039;: Benutzer zu einer Liste zusammenfassen.&lt;br /&gt;
# In der Location &amp;#039;&amp;#039;&amp;#039;Basic Authentication&amp;#039;&amp;#039;&amp;#039; aktivieren und die Liste unter &amp;#039;&amp;#039;&amp;#039;Basic Credentials List&amp;#039;&amp;#039;&amp;#039; wählen.&lt;br /&gt;
Mit &amp;#039;&amp;#039;&amp;#039;Satisfy&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;any&amp;#039;&amp;#039; genügt wahlweise IP oder Passwort, mit &amp;#039;&amp;#039;all&amp;#039;&amp;#039; müssen beide Bedingungen erfüllt sein.&lt;br /&gt;
&lt;br /&gt;
=== Client-Zertifikate (mTLS) ===&lt;br /&gt;
Für Maschine-zu-Maschine-Zugriffe oder besonders schützenswerte Dienste im HTTP Server unter &amp;#039;&amp;#039;&amp;#039;Client CA Certificate&amp;#039;&amp;#039;&amp;#039; die eigene CA wählen und &amp;#039;&amp;#039;&amp;#039;Verify Client Certificate&amp;#039;&amp;#039;&amp;#039; auf &amp;#039;&amp;#039;on&amp;#039;&amp;#039; setzen – ohne gültiges Client-Zertifikat wird die Verbindung abgewiesen.&lt;br /&gt;
&lt;br /&gt;
== Schritt 7: Web Application Firewall (NAXSI) ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NAXSI&amp;#039;&amp;#039;&amp;#039; prüft Anfragen auf typische Angriffsmuster (SQL-Injection, Cross-Site-Scripting, Directory Traversal) und vergibt Punkte; überschreitet eine Anfrage die Schwelle, wird sie blockiert.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Regeln laden:&amp;#039;&amp;#039;&amp;#039; In der Plugin-Oberfläche die Schaltfläche &amp;#039;&amp;#039;&amp;#039;Download NAXSI Rules&amp;#039;&amp;#039;&amp;#039; wählen und der Lizenz der NAXSI-Kernregeln zustimmen (sie dürfen aus Lizenzgründen nicht direkt mitgeliefert werden).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;In der Location aktivieren:&amp;#039;&amp;#039;&amp;#039; In &amp;#039;&amp;#039;loc_portal&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Enable Security Rules&amp;#039;&amp;#039;&amp;#039; und zunächst &amp;#039;&amp;#039;&amp;#039;Learning Mode&amp;#039;&amp;#039;&amp;#039; einschalten. Die Schwellen &amp;#039;&amp;#039;&amp;#039;Block XSS Score&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;Block SQL Injection Score&amp;#039;&amp;#039;&amp;#039; auf Standardwerten belassen.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Lernphase:&amp;#039;&amp;#039;&amp;#039; Die Anwendung einige Tage normal nutzen. Unter &amp;#039;&amp;#039;Logs / HTTP Error&amp;#039;&amp;#039; erscheinen Regelverletzungen, die im Lernmodus nur protokolliert werden.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Fehlalarme ausnehmen:&amp;#039;&amp;#039;&amp;#039; Für legitime Treffer unter &amp;#039;&amp;#039;HTTP(S) → Naxsi WAF Rule&amp;#039;&amp;#039; Ausnahmen (Whitelist-Regeln für bestimmte Regel-IDs, Parameter oder Pfade) anlegen, zu einer &amp;#039;&amp;#039;Naxsi WAF Policy&amp;#039;&amp;#039; zusammenfassen und in der Location als &amp;#039;&amp;#039;Custom Security Policy&amp;#039;&amp;#039; auswählen.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Scharf schalten:&amp;#039;&amp;#039;&amp;#039; Learning Mode deaktivieren. Blockierte Anfragen erhalten die unter &amp;#039;&amp;#039;Violation Error Page&amp;#039;&amp;#039; gewählte Fehlerseite.&lt;br /&gt;
{{Hinweis|Eine WAF ersetzt keine sichere Anwendung und keine Updates. Ohne Lernphase drohen Fehlalarme, die legitime Nutzer aussperren – besonders bei Anwendungen mit komplexen Formularen oder APIs. Unter &amp;#039;&amp;#039;Naxsi Trusted Source IPs&amp;#039;&amp;#039; im HTTP Server lassen sich z. B. interne Prüfsysteme von der WAF ausnehmen.}}&lt;br /&gt;
&lt;br /&gt;
== Schritt 8: Sicherheits-Header, Bot-Schutz und automatische Sperren ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Security Headers&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;HTTP(S) → Security Headers&amp;#039;&amp;#039;): Richtlinie mit &amp;#039;&amp;#039;&amp;#039;HSTS&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Content-Security-Policy&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;X-Content-Type-Options&amp;#039;&amp;#039;, &amp;#039;&amp;#039;X-Frame-Options&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Referrer-Policy&amp;#039;&amp;#039; anlegen und im HTTP Server auswählen. Die CSP vorsichtig einführen und mit den Browser-Entwicklertools testen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Bot-Schutz:&amp;#039;&amp;#039;&amp;#039; Bekannte Bot- und Scanner-User-Agents werden standardmäßig blockiert (abschaltbar über &amp;#039;&amp;#039;Disable Bot Protection&amp;#039;&amp;#039;).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Honeypot&amp;#039;&amp;#039;&amp;#039; (advanced mode): In einer eigenen Location für einen Köderpfad (z. B. &amp;lt;code&amp;gt;/wp-admin&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;/phpmyadmin&amp;lt;/code&amp;gt; auf einer Seite, die diese nicht nutzt) &amp;#039;&amp;#039;&amp;#039;Honeypot&amp;#039;&amp;#039;&amp;#039; aktivieren. Wer den Pfad aufruft, landet in einem besonderen Log und als Adresse in einem &amp;#039;&amp;#039;&amp;#039;Firewall-Alias&amp;#039;&amp;#039;&amp;#039; – unter &amp;#039;&amp;#039;Firewall → Rules&amp;#039;&amp;#039; auf dem WAN eine Block-Regel mit diesem Alias als Quelle anlegen, damit die Sperre greift. Die erfassten Adressen zeigt &amp;#039;&amp;#039;&amp;#039;Services → Nginx → Banned&amp;#039;&amp;#039;&amp;#039;. Vorsicht: Auch Suchmaschinen oder Nutzer können versehentlich gesperrt werden.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Limit Requests&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;Access → Limit Zone&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Connection Limits&amp;#039;&amp;#039;): Anfragen pro IP begrenzen, z. B. für Login-Seiten.&lt;br /&gt;
&lt;br /&gt;
== Weitere Funktionen ==&lt;br /&gt;
=== Caching ===&lt;br /&gt;
Mit einem &amp;#039;&amp;#039;&amp;#039;Cache Path&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;HTTP(S) → Cache Path&amp;#039;&amp;#039;) und den Cache-Optionen in der Location speichert NGINX Antworten zwischen – entlastet langsame Backends und beschleunigt statische Inhalte. Über &amp;#039;&amp;#039;Response Code Caching&amp;#039;&amp;#039; wird festgelegt, welche Antworten wie lange gecacht werden.&lt;br /&gt;
&lt;br /&gt;
=== TCP/UDP-Streams und SNI-Routing ===&lt;br /&gt;
Unter &amp;#039;&amp;#039;&amp;#039;Data Streams&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Stream Servers&amp;#039;&amp;#039;&amp;#039; leiten TCP- oder UDP-Dienste an Upstreams weiter (z. B. DNS, proprietäre Protokolle) – optional mit TLS-Terminierung.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SNI Based Routing&amp;#039;&amp;#039;&amp;#039; verteilt TLS-Verbindungen anhand des Servernamens im Handshake an verschiedene Upstreams, &amp;#039;&amp;#039;&amp;#039;ohne&amp;#039;&amp;#039;&amp;#039; sie zu entschlüsseln – ideal, wenn Server ihre Zertifikate selbst verwalten.&lt;br /&gt;
Protokolle mit Zusatzverbindungen wie FTP oder SIP funktionieren nicht.&lt;br /&gt;
&lt;br /&gt;
=== Statistik und Logs ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Traffic Statistic&amp;#039;&amp;#039;&amp;#039; zeigt Anfragen, Antwortcodes und Datenvolumen pro Server und Upstream; die HTTP-Zugriffs- und Fehlerlogs lassen sich direkt in der Oberfläche filtern und per &amp;#039;&amp;#039;SYSLOG Targets&amp;#039;&amp;#039; an externe Systeme senden.&lt;br /&gt;
&lt;br /&gt;
== Typische Probleme und Lösungen ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Symptom !! Ursache und Lösung&lt;br /&gt;
|-&lt;br /&gt;
| NGINX startet nicht, Port belegt || Weboberfläche nutzt noch Port 80/443 – Schritt 1; &amp;#039;&amp;#039;Config Preview&amp;#039;&amp;#039; zeigt Syntaxfehler.&lt;br /&gt;
|-&lt;br /&gt;
| 502 Bad Gateway || Backend nicht erreichbar, falscher Port oder TLS-Prüfung zum Backend schlägt fehl (CA/Servername prüfen).&lt;br /&gt;
|-&lt;br /&gt;
| Falsche Seite/Zertifikat für eine Domain || Server Name falsch oder anderer HTTP Server ist &amp;#039;&amp;#039;Default Server&amp;#039;&amp;#039;.&lt;br /&gt;
|-&lt;br /&gt;
| Legitime Anfragen werden blockiert || WAF ohne Lernphase scharfgeschaltet – Learning Mode aktivieren, Treffer im Error-Log auswerten, Whitelist-Regeln anlegen.&lt;br /&gt;
|-&lt;br /&gt;
| Eigene IP wurde gesperrt || Unter &amp;#039;&amp;#039;Banned&amp;#039;&amp;#039; entsperren; Honeypot-Pfad und Ratenbegrenzung prüfen.&lt;br /&gt;
|-&lt;br /&gt;
| Zertifikat wird nicht erneuert || &amp;#039;&amp;#039;Enable Let&amp;#039;s Encrypt Plugin Support&amp;#039;&amp;#039; im HTTP Server fehlt oder Automation zum Neustart nicht hinterlegt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sicherheitsempfehlungen ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;WAF mit Lernphase&amp;#039;&amp;#039;&amp;#039; für öffentlich erreichbare Anwendungen einsetzen, interne Oberflächen per IP ACL/mTLS schützen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;TLS 1.2/1.3&amp;#039;&amp;#039;&amp;#039;, HSTS und Sicherheits-Header konsequent nutzen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Backend-Zertifikate prüfen&amp;#039;&amp;#039;&amp;#039; statt die Verifizierung abzuschalten.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Logs zentral auswerten&amp;#039;&amp;#039;&amp;#039; (WAF-Treffer, Sperren, Fehler), z. B. in einem [https://www.max-it.de/it-services/siem-open-source/ Open-Source-SIEM auf Wazuh-Basis].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Plugin und Anwendungen aktuell halten&amp;#039;&amp;#039;&amp;#039; – auch NAXSI-Regeln regelmäßig neu laden.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
Das NGINX-Plugin ist der funktionsreichste Reverse Proxy auf der OPNsense: Mit Upstreams, Locations und HTTP Servern ist die Grundstruktur schnell aufgebaut, und darauf setzen WAF, Sicherheits-Header, Honeypot, Ratenbegrenzung, Caching und Stream-Routing auf. Wer eine Web Application Firewall ohne Zusatzlizenz benötigt und bereit ist, eine Lernphase einzuplanen, findet in os-nginx eine sehr gute Lösung.&lt;br /&gt;
&lt;br /&gt;
== Unterstützung von m.a.x. it ==&lt;br /&gt;
Sie möchten Webanwendungen mit einer Web Application Firewall schützen, die Lernphase von NAXSI begleiten lassen oder Ihre Reverse-Proxy-Landschaft auf der OPNsense neu aufstellen? m.a.x. it unterstützt Sie als OPNsense-Gold-Partner mit [https://www.max-it.de/it-services/opnsense/ OPNsense-Firewall-Services von m.a.x. it] und [https://www.max-it.de/it-services/cybersecurity/ Cybersecurity-Leistungen von m.a.x. it].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[OPNsense - ACME-Client für Let&amp;#039;s Encrypt-Zertifikate]]&lt;br /&gt;
* [[OPNsense - Caddy Reverse Proxy]]&lt;br /&gt;
* [[OPNsense - HAProxy Reverse Proxy und Load Balancer]]&lt;br /&gt;
* [[OPNsense - HAProxy mit Passwortauthentifizierung]]&lt;br /&gt;
* [[OPNsense - Plugin-Liste]]&lt;br /&gt;
* [[Reverse Proxy]]&lt;br /&gt;
* [[Web Application Firewall]]&lt;br /&gt;
* [[Let&amp;#039;s Encrypt]]&lt;br /&gt;
* [[HTTP/3]]&lt;br /&gt;
&lt;br /&gt;
== Links und Quellen ==&lt;br /&gt;
* [https://docs.opnsense.org/manual/how-tos/nginx.html OPNsense-Doku – nginx (Einstieg und Unterseiten zu WAF, IP ACL, TLS-Auth, Streams, Header)]&lt;br /&gt;
* [https://docs.opnsense.org/manual/how-tos/nginx_waf.html OPNsense-Doku – nginx Web Application Firewall]&lt;br /&gt;
* [https://nginx.org/en/docs/ NGINX – offizielle Dokumentation]&lt;br /&gt;
* [https://github.com/opnsense/plugins/tree/master/www/nginx Quellcode und Changelog des Plugins os-nginx]&lt;br /&gt;
* [https://www.max-it.de/it-services/opnsense/ m.a.x. it – OPNsense-Firewall-Services]&lt;br /&gt;
&lt;br /&gt;
{{Uebermax}}&lt;br /&gt;
[[Kategorie:IT-Security]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;TechCorner-Redaktion</name></author>
	</entry>
</feed>