<?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_-_Caddy_Reverse_Proxy</id>
	<title>OPNsense - Caddy Reverse Proxy - 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_-_Caddy_Reverse_Proxy"/>
	<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=OPNsense_-_Caddy_Reverse_Proxy&amp;action=history"/>
	<updated>2026-10-09T01:20:37Z</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_-_Caddy_Reverse_Proxy&amp;diff=3896&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_-_Caddy_Reverse_Proxy&amp;diff=3896&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-caddy 2.2 (Caddy 2.10 oder neuer)&lt;br /&gt;
| bereich     = IT-Security&lt;br /&gt;
| dauer       = ca. 30 Minuten (Grundeinrichtung und erste Webanwendung), Walkthrough komplett ca. 2 Stunden&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;Caddy&amp;#039;&amp;#039;&amp;#039; ist ein moderner Webserver und &amp;#039;&amp;#039;&amp;#039;[[Reverse Proxy]]&amp;#039;&amp;#039;&amp;#039; mit &amp;#039;&amp;#039;&amp;#039;automatischem HTTPS&amp;#039;&amp;#039;&amp;#039;: Für jede eingetragene Domain besorgt und verlängert Caddy selbstständig ein Zertifikat von [[Let&amp;#039;s Encrypt]] oder ZeroSSL. Mit dem Plugin &amp;#039;&amp;#039;&amp;#039;os-caddy&amp;#039;&amp;#039;&amp;#039; wird die OPNsense so in wenigen Minuten zum sicheren Eingangstor für interne Webanwendungen wie Nextcloud, Grafana, Home-Office-Portale oder die Weboberflächen von Servern – inklusive Zugriffsbeschränkung, Basic Auth, Client-Zertifikaten und Single Sign-On über authentik.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel stellt das Plugin vor und führt in einem durchgehenden &amp;#039;&amp;#039;&amp;#039;Walkthrough&amp;#039;&amp;#039;&amp;#039; von der Installation bis zu fortgeschrittenen Szenarien.&lt;br /&gt;
&lt;br /&gt;
== Was ist Caddy und wann ist es die richtige Wahl? ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Automatisches HTTPS:&amp;#039;&amp;#039;&amp;#039; Zertifikate werden ohne zusätzliche Konfiguration ausgestellt und verlängert; HTTP wird automatisch auf HTTPS umgeleitet.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Einfache Oberfläche:&amp;#039;&amp;#039;&amp;#039; Domains und &amp;#039;&amp;#039;Handler&amp;#039;&amp;#039; (Weiterleitungen an interne Dienste) statt komplexer Frontend/Backend-Logik.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Moderne Protokolle:&amp;#039;&amp;#039;&amp;#039; HTTP/1.1, HTTP/2 und optional HTTP/3 ([[QUIC]]), WebSockets.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Zugriffsschutz pro Domain:&amp;#039;&amp;#039;&amp;#039; Access Lists, Basic Auth, mTLS und Forward Auth (authentik, Authelia).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Layer4-Proxy:&amp;#039;&amp;#039;&amp;#039; TCP/UDP-Weiterleitung, auch mit Protokollerkennung (SSH, RDP, TLS mit SNI, OpenVPN u. a.).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Kriterium !! Caddy (os-caddy) !! HAProxy (os-haproxy) !! OPNWAF (os-OPNWAF)&lt;br /&gt;
|-&lt;br /&gt;
| Schwerpunkt || Einfacher Reverse Proxy mit Auto-HTTPS || Lastverteilung, sehr fein steuerbar || Reverse Proxy mit Web Application Firewall&lt;br /&gt;
|-&lt;br /&gt;
| Zertifikate || Automatisch integriert || Über os-acme-client || Integriert&lt;br /&gt;
|-&lt;br /&gt;
| Einrichtung || Sehr einfach || Komplex || Mittel&lt;br /&gt;
|-&lt;br /&gt;
| WAF || Nein || Nein || Ja&lt;br /&gt;
|-&lt;br /&gt;
| Lizenz || Open Source (Community-Plugin) || Open Source || Kommerziell (Business Edition)&lt;br /&gt;
|}&lt;br /&gt;
Für die meisten Veröffentlichungen interner Webdienste in kleinen und mittleren Umgebungen ist Caddy die bequemste Lösung. Wer eine Web Application Firewall benötigt, greift zu OPNWAF; für komplexe Lastverteilung zu HAProxy (siehe [[OPNsense - HAProxy mit Passwortauthentifizierung]]).&lt;br /&gt;
&lt;br /&gt;
[[Datei:OPNsense-Caddy-Walkthrough.png|thumb|center|750px|Walkthrough-Szenario: Caddy auf der OPNsense nimmt HTTPS-Anfragen für mehrere Domains an, besorgt die Zertifikate automatisch und leitet je nach Domain an Nextcloud, an das per authentik geschützte Grafana oder – nur intern – an die OPNsense-Weboberfläche weiter.]]&lt;br /&gt;
&lt;br /&gt;
== Das Walkthrough-Szenario ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Domain !! Ziel (Upstream) !! Schutz&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;cloud.example.com&amp;lt;/code&amp;gt; || Nextcloud, &amp;lt;code&amp;gt;http://192.168.10.30:80&amp;lt;/code&amp;gt; || öffentlich (Anmeldung in Nextcloud)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;grafana.example.com&amp;lt;/code&amp;gt; || Grafana, &amp;lt;code&amp;gt;http://192.168.10.40:3000&amp;lt;/code&amp;gt; || nur nach Anmeldung bei &amp;#039;&amp;#039;&amp;#039;authentik&amp;#039;&amp;#039;&amp;#039; (Forward Auth)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wiki.example.com&amp;lt;/code&amp;gt; || interner Webserver, &amp;lt;code&amp;gt;https://192.168.10.50&amp;lt;/code&amp;gt; (selbstsigniert) || nur aus internen Netzen (Access List)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opn.example.com&amp;lt;/code&amp;gt; || OPNsense-Weboberfläche || nur intern, Access List&lt;br /&gt;
|}&lt;br /&gt;
Öffentliche IPv4-Adresse der Firewall: &amp;lt;code&amp;gt;203.0.113.1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Schritt 1: Plugin installieren und OPNsense vorbereiten ==&lt;br /&gt;
=== Installation ===&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-caddy&amp;#039;&amp;#039;&amp;#039; installieren und die Seite neu laden. Das Menü befindet sich anschließend unter &amp;#039;&amp;#039;&amp;#039;Services → Caddy&amp;#039;&amp;#039;&amp;#039; mit den Punkten &amp;#039;&amp;#039;General Settings&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Reverse Proxy&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Layer4 Proxy&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Diagnostics&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Log File&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Ports 80 und 443 freimachen ===&lt;br /&gt;
Caddy benötigt die Ports &amp;#039;&amp;#039;&amp;#039;80&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;443&amp;#039;&amp;#039;&amp;#039; – die OPNsense-Weboberfläche darf sie nicht mehr belegen:&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; auf z. B. &amp;lt;code&amp;gt;8443&amp;lt;/code&amp;gt; ändern.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;HTTP Redirect – Disable web GUI redirect rule&amp;#039;&amp;#039;&amp;#039; aktivieren.&lt;br /&gt;
# Speichern und die Weboberfläche künftig über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://&amp;lt;firewall&amp;gt;:8443&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; aufrufen. Auf dem LAN regelt die Anti-Lockout-Regel den Zugriff automatisch; auf anderen Interfaces eigene Regeln anlegen.&lt;br /&gt;
&lt;br /&gt;
=== DNS-Einträge ===&lt;br /&gt;
Für jede Domain einen öffentlichen &amp;#039;&amp;#039;&amp;#039;A-Record&amp;#039;&amp;#039;&amp;#039; (bei IPv6 zusätzlich &amp;#039;&amp;#039;&amp;#039;AAAA&amp;#039;&amp;#039;&amp;#039;) auf die WAN-Adresse setzen, z. B. &amp;lt;code&amp;gt;cloud.example.com → 203.0.113.1&amp;lt;/code&amp;gt;. Alternativ ein Wildcard-Eintrag &amp;lt;code&amp;gt;*.example.com&amp;lt;/code&amp;gt; (siehe Schritt 6).&lt;br /&gt;
&lt;br /&gt;
=== Firewall-Regeln ===&lt;br /&gt;
Unter &amp;#039;&amp;#039;&amp;#039;Firewall → Rules&amp;#039;&amp;#039;&amp;#039; auf dem Interface &amp;#039;&amp;#039;&amp;#039;WAN&amp;#039;&amp;#039;&amp;#039; und ebenso auf &amp;#039;&amp;#039;&amp;#039;LAN&amp;#039;&amp;#039;&amp;#039; (damit interne Clients die Dienste unter demselben Namen erreichen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll !! Quelle !! Ziel !! Port !! Zweck&lt;br /&gt;
|-&lt;br /&gt;
| TCP || any || This Firewall || 80 (HTTP) || ACME-Challenge und Umleitung auf HTTPS&lt;br /&gt;
|-&lt;br /&gt;
| TCP || any || This Firewall || 443 (HTTPS) || Reverse Proxy&lt;br /&gt;
|-&lt;br /&gt;
| UDP || any || This Firewall || 443 || nur wenn HTTP/3 (QUIC) aktiviert wird&lt;br /&gt;
|}&lt;br /&gt;
Eine Portweiterleitung (Destination NAT), NAT Reflection oder Split-DNS ist &amp;#039;&amp;#039;&amp;#039;nicht&amp;#039;&amp;#039;&amp;#039; nötig: Caddy läuft auf der Firewall selbst, und auch interne Zugriffe auf die öffentliche Adresse bleiben innerhalb der OPNsense. Regeln von der Firewall zu den internen Servern sind ebenfalls nicht nötig.&lt;br /&gt;
&lt;br /&gt;
== Schritt 2: Caddy aktivieren ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Services → Caddy → General Settings&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Enable Caddy&amp;#039;&amp;#039;&amp;#039; aktivieren.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ACME Email&amp;#039;&amp;#039;&amp;#039;: eine gültige Adresse eintragen – Pflicht für automatische Zertifikate.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Auto HTTPS&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;On (default)&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;HTTP Versions&amp;#039;&amp;#039;&amp;#039;: Standard ist HTTP/1.1 und HTTP/2. HTTP/3 nur bei Bedarf ergänzen (dann UDP 443 freigeben).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Apply&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Schritt 3: Erste Anwendung veröffentlichen (Nextcloud) ==&lt;br /&gt;
=== Domain anlegen ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Services → Caddy → Reverse Proxy → Domains&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 !! Wert&lt;br /&gt;
|-&lt;br /&gt;
| Protocol || &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Domain || &amp;lt;code&amp;gt;cloud.example.com&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Port || leer (443)&lt;br /&gt;
|-&lt;br /&gt;
| Certificate || Auto HTTPS&lt;br /&gt;
|-&lt;br /&gt;
| Description || &amp;#039;&amp;#039;Nextcloud&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Handler anlegen ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Reverse Proxy → Handlers&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 !! Wert&lt;br /&gt;
|-&lt;br /&gt;
| Domain || &amp;lt;code&amp;gt;https://cloud.example.com&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Path (Abschnitt &amp;#039;&amp;#039;Handler&amp;#039;&amp;#039;) || leer (alle Pfade)&lt;br /&gt;
|-&lt;br /&gt;
| Protocol (Abschnitt &amp;#039;&amp;#039;Upstream&amp;#039;&amp;#039;) || &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Upstream Domain || &amp;lt;code&amp;gt;192.168.10.30&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Upstream Port || &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Save&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;Apply&amp;#039;&amp;#039;&amp;#039;. Caddy holt nun automatisch das Zertifikat. Unter &amp;#039;&amp;#039;&amp;#039;Services → Caddy → Log File&amp;#039;&amp;#039;&amp;#039; erscheint bei Erfolg &amp;#039;&amp;#039;certificate obtained successfully&amp;#039;&amp;#039;; das Zertifikat ist zudem unter &amp;#039;&amp;#039;System → Trust → Certificates&amp;#039;&amp;#039; und im Dashboard-Widget sichtbar.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Test:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://cloud.example.com&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; von außen und von innen aufrufen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Nextcloud muss dem Proxy vertrauen: In der &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; die Firewall-Adresse unter &amp;lt;code&amp;gt;trusted_proxies&amp;lt;/code&amp;gt; eintragen, die Domain unter &amp;lt;code&amp;gt;trusted_domains&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;#039;overwriteprotocol&amp;#039; =&amp;gt; &amp;#039;https&amp;#039;&amp;lt;/code&amp;gt; setzen. Viele andere Anwendungen benötigen eine vergleichbare Einstellung (&amp;#039;&amp;#039;Base URL&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Trusted Proxy&amp;#039;&amp;#039;).}}&lt;br /&gt;
&lt;br /&gt;
== Schritt 4: Zugriff auf interne Netze beschränken (Access List) ==&lt;br /&gt;
Ein Reverse Proxy nimmt zunächst Verbindungen von überall an. Eine Firewall-Regel würde alle Domains gleichzeitig betreffen – &amp;#039;&amp;#039;&amp;#039;Access Lists&amp;#039;&amp;#039;&amp;#039; wirken dagegen pro Domain.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Reverse Proxy → HTTP Access → Access Lists&amp;#039;&amp;#039;&amp;#039; → &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039;: Name &amp;lt;code&amp;gt;intern&amp;lt;/code&amp;gt;, &amp;#039;&amp;#039;&amp;#039;Client IP Addresses&amp;#039;&amp;#039;&amp;#039; &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; (zusätzlich ggf. das VPN-Tunnelnetz).&lt;br /&gt;
# Domain &amp;lt;code&amp;gt;wiki.example.com&amp;lt;/code&amp;gt; anlegen und im Abschnitt &amp;#039;&amp;#039;&amp;#039;Access&amp;#039;&amp;#039;&amp;#039; die Access List &amp;lt;code&amp;gt;intern&amp;lt;/code&amp;gt; auswählen.&lt;br /&gt;
# Handler für &amp;lt;code&amp;gt;wiki.example.com&amp;lt;/code&amp;gt; anlegen (siehe Schritt 5) und &amp;#039;&amp;#039;&amp;#039;Apply&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Verbindungen von außen werden nun abgewiesen. Im &amp;#039;&amp;#039;advanced mode&amp;#039;&amp;#039; der Access List lässt sich statt des Verbindungsabbruchs ein HTTP-Statuscode (z. B. 403) zurückgeben – hilfreich für Monitoring-Systeme.&lt;br /&gt;
&lt;br /&gt;
=== Alternativen: Basic Auth und Client-Zertifikate ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Basic Auth:&amp;#039;&amp;#039;&amp;#039; Unter &amp;#039;&amp;#039;HTTP Access → Basic Auth&amp;#039;&amp;#039; Benutzer mit Passwort anlegen und im Abschnitt &amp;#039;&amp;#039;Access&amp;#039;&amp;#039; der Domain auswählen – eine einfache Passwortabfrage vor der Anwendung.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Client Auth (mTLS):&amp;#039;&amp;#039;&amp;#039; Für höchsten Schutz im Abschnitt &amp;#039;&amp;#039;Access&amp;#039;&amp;#039; der Domain unter &amp;#039;&amp;#039;&amp;#039;Client Auth Trust Pool&amp;#039;&amp;#039;&amp;#039; die eigene CA (aus &amp;#039;&amp;#039;System → Trust&amp;#039;&amp;#039;) auswählen und den &amp;#039;&amp;#039;&amp;#039;Client Auth Mode&amp;#039;&amp;#039;&amp;#039; festlegen – nur Geräte mit einem Zertifikat dieser CA kommen durch.&lt;br /&gt;
&lt;br /&gt;
== Schritt 5: Interne HTTPS-Server mit selbstsignierten Zertifikaten ==&lt;br /&gt;
Viele interne Dienste (z. B. &amp;lt;code&amp;gt;wiki.example.com&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;https://192.168.10.50&amp;lt;/code&amp;gt;) sprechen nur HTTPS mit selbstsigniertem Zertifikat. Zwei Möglichkeiten:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sauber:&amp;#039;&amp;#039;&amp;#039; Das Zertifikat (bzw. die interne CA) unter &amp;#039;&amp;#039;System → Trust → Authorities&amp;#039;&amp;#039; importieren und im Handler unter &amp;#039;&amp;#039;&amp;#039;TLS Trust Pool&amp;#039;&amp;#039;&amp;#039; auswählen; unter &amp;#039;&amp;#039;&amp;#039;TLS Server Name&amp;#039;&amp;#039;&amp;#039; den Namen aus dem Zertifikat (SAN) eintragen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Schnell (nur in vertrauenswürdigen Netzen):&amp;#039;&amp;#039;&amp;#039; Im Handler &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt; wählen und &amp;#039;&amp;#039;&amp;#039;TLS Insecure Skip Verify&amp;#039;&amp;#039;&amp;#039; aktivieren.&lt;br /&gt;
Caddy akzeptiert keine Zertifikate, die den Namen nur im &amp;#039;&amp;#039;Common Name&amp;#039;&amp;#039; (ohne SAN) tragen.&lt;br /&gt;
&lt;br /&gt;
=== Sonderfall: OPNsense-Weboberfläche über Caddy ===&lt;br /&gt;
# Domain &amp;lt;code&amp;gt;opn.example.com&amp;lt;/code&amp;gt; mit Access List &amp;lt;code&amp;gt;intern&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
# Das selbstsignierte Zertifikat der Weboberfläche im Browser exportieren und unter &amp;#039;&amp;#039;System → Trust → Authorities&amp;#039;&amp;#039; als &amp;#039;&amp;#039;opnsense-selfsigned&amp;#039;&amp;#039; importieren.&lt;br /&gt;
# Handler: Upstream &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;, Port &amp;lt;code&amp;gt;8443&amp;lt;/code&amp;gt;, &amp;#039;&amp;#039;&amp;#039;TLS Trust Pool&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;opnsense-selfsigned&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;TLS Server Name&amp;#039;&amp;#039;&amp;#039; = SAN des Zertifikats (z. B. &amp;lt;code&amp;gt;OPNsense.localdomain&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Unter &amp;#039;&amp;#039;System → Settings → Administration&amp;#039;&amp;#039; bei &amp;#039;&amp;#039;&amp;#039;Alternate Hostnames&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;opn.example.com&amp;lt;/code&amp;gt; eintragen – sonst meldet die Weboberfläche einen HTTP_REFERER-Fehler.&lt;br /&gt;
&lt;br /&gt;
== Schritt 6: Wildcard-Domain mit DNS-01-Challenge ==&lt;br /&gt;
Statt jede Subdomain einzeln mit eigenem Zertifikat zu betreiben, kann Caddy ein &amp;#039;&amp;#039;&amp;#039;Wildcard-Zertifikat&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;*.example.com&amp;lt;/code&amp;gt; verwenden – praktisch bei vielen Diensten und um interne Hostnamen nicht in öffentlichen Zertifikatsprotokollen (Certificate Transparency) zu veröffentlichen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mit Cloudflare-DNS:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;General Settings → DNS Provider&amp;#039;&amp;#039;: &amp;#039;&amp;#039;Cloudflare&amp;#039;&amp;#039;, API-Token eintragen, &amp;#039;&amp;#039;Resolvers&amp;#039;&amp;#039; z. B. &amp;lt;code&amp;gt;1.1.1.1&amp;lt;/code&amp;gt;. Dann die Domain &amp;lt;code&amp;gt;*.example.com&amp;lt;/code&amp;gt; mit aktivierter &amp;#039;&amp;#039;&amp;#039;DNS-01 Challenge&amp;#039;&amp;#039;&amp;#039; anlegen und darunter &amp;#039;&amp;#039;&amp;#039;Subdomains&amp;#039;&amp;#039;&amp;#039; wie &amp;lt;code&amp;gt;cloud.example.com&amp;lt;/code&amp;gt; erstellen; Handler zeigen dann auf &amp;#039;&amp;#039;Domain&amp;#039;&amp;#039; &amp;lt;code&amp;gt;*.example.com&amp;lt;/code&amp;gt; + &amp;#039;&amp;#039;Subdomain&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mit anderen DNS-Anbietern:&amp;#039;&amp;#039;&amp;#039; Seit Plugin-Version 2.0 ist Cloudflare der einzige integrierte DNS-Provider. Für andere Anbieter das Wildcard-Zertifikat 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; ausstellen, in der Caddy-Domain als &amp;#039;&amp;#039;Certificate&amp;#039;&amp;#039; auswählen und im ACME-Client eine Automatisierung anlegen, die Caddy nach jeder Verlängerung &amp;#039;&amp;#039;&amp;#039;neu lädt&amp;#039;&amp;#039;&amp;#039; (nicht neu startet).&lt;br /&gt;
Ein Wildcard-Zertifikat enthält nicht die Basisdomain &amp;lt;code&amp;gt;example.com&amp;lt;/code&amp;gt; – dafür bei Bedarf eine eigene Domain anlegen.&lt;br /&gt;
&lt;br /&gt;
== Schritt 7: Single Sign-On mit authentik (Forward Auth) ==&lt;br /&gt;
Mit &amp;#039;&amp;#039;&amp;#039;Forward Auth&amp;#039;&amp;#039;&amp;#039; fragt Caddy vor jedem Zugriff bei &amp;#039;&amp;#039;&amp;#039;[[Authentik – Open-Source-Identity-Provider für Single Sign-On|authentik]]&amp;#039;&amp;#039;&amp;#039; nach, ob der Benutzer angemeldet und berechtigt ist. So lassen sich auch Anwendungen ohne eigene Benutzerverwaltung mit SSO und MFA schützen – im Walkthrough Grafana.&lt;br /&gt;
&lt;br /&gt;
=== In authentik ===&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Applications → Create with Provider&amp;#039;&amp;#039;&amp;#039;: Name &amp;#039;&amp;#039;Grafana&amp;#039;&amp;#039;, Provider-Typ &amp;#039;&amp;#039;&amp;#039;Proxy Provider&amp;#039;&amp;#039;&amp;#039; im Modus &amp;#039;&amp;#039;&amp;#039;Forward auth (single application)&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;External host&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://grafana.example.com&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Die Anwendung dem &amp;#039;&amp;#039;&amp;#039;Embedded Outpost&amp;#039;&amp;#039;&amp;#039; zuweisen (&amp;#039;&amp;#039;Applications → Outposts&amp;#039;&amp;#039;).&lt;br /&gt;
# Zugriff über &amp;#039;&amp;#039;Policy / Group / User Bindings&amp;#039;&amp;#039; auf die gewünschte Gruppe beschränken.&lt;br /&gt;
&lt;br /&gt;
=== In Caddy ===&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;General Settings&amp;#039;&amp;#039;&amp;#039; (advanced mode), Bereich Forward Auth: &amp;#039;&amp;#039;&amp;#039;Forward Auth Provider&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;Authentik&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Protocol&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;, &amp;#039;&amp;#039;&amp;#039;Forward Auth Domain&amp;#039;&amp;#039;&amp;#039; = authentik-Server (z. B. &amp;lt;code&amp;gt;192.168.10.60&amp;lt;/code&amp;gt;), &amp;#039;&amp;#039;&amp;#039;Forward Auth Port&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;9000&amp;lt;/code&amp;gt; (HTTP) bzw. &amp;lt;code&amp;gt;9443&amp;lt;/code&amp;gt;, &amp;#039;&amp;#039;&amp;#039;Forward Auth URI&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;/outpost.goauthentik.io/auth/caddy&amp;lt;/code&amp;gt;. Speichern.&lt;br /&gt;
# Domain &amp;lt;code&amp;gt;grafana.example.com&amp;lt;/code&amp;gt; und Handler zu &amp;lt;code&amp;gt;http://192.168.10.40:3000&amp;lt;/code&amp;gt; anlegen; im Handler (advanced mode) &amp;#039;&amp;#039;&amp;#039;Forward Auth&amp;#039;&amp;#039;&amp;#039; aktivieren.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Apply&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Das Plugin ergänzt automatisch die nötige Weiterleitung von &amp;lt;code&amp;gt;/outpost.goauthentik.io/*&amp;lt;/code&amp;gt; an authentik und übergibt die authentik-Header (Benutzername, Gruppen, E-Mail) an die Anwendung. Auf derselben Domain sollten dann keine Access Lists oder Basic Auth zusätzlich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Schritt 8: Kontrolle und Diagnose ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Services → Caddy → Diagnostics&amp;#039;&amp;#039;&amp;#039; zeigt das erzeugte &amp;#039;&amp;#039;&amp;#039;Caddyfile&amp;#039;&amp;#039;&amp;#039; und die JSON-Konfiguration – ideal, um zu prüfen, was die Oberfläche tatsächlich konfiguriert hat.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Log File&amp;#039;&amp;#039;&amp;#039; für Zertifikatsausstellung, Fehler bei Upstreams und Startprobleme; für Detailanalysen in den &amp;#039;&amp;#039;Log Settings&amp;#039;&amp;#039; das Log-Level erhöhen.&lt;br /&gt;
* Das &amp;#039;&amp;#039;&amp;#039;Dashboard-Widget&amp;#039;&amp;#039;&amp;#039; zeigt Domains und Gültigkeit der Zertifikate.&lt;br /&gt;
&lt;br /&gt;
== Fortgeschrittene Funktionen ==&lt;br /&gt;
=== Mehrere Handler pro Domain ===&lt;br /&gt;
Pro Domain können mehrere Handler mit unterschiedlichen Pfaden angelegt werden, z. B. &amp;lt;code&amp;gt;/api/*&amp;lt;/code&amp;gt; an einen anderen Server als der Rest. Handler ohne Pfad werden automatisch zuletzt ausgewertet. Mit &amp;#039;&amp;#039;handle_path&amp;#039;&amp;#039; wird der Pfad vor der Weiterleitung entfernt, mit &amp;#039;&amp;#039;handle&amp;#039;&amp;#039; bleibt er erhalten. Access Lists und Basic Auth lassen sich auch pro Handler setzen – etwa um nur &amp;lt;code&amp;gt;/admin/*&amp;lt;/code&amp;gt; auf interne Netze zu beschränken.&lt;br /&gt;
&lt;br /&gt;
=== Lastverteilung und Health Checks ===&lt;br /&gt;
Werden in einem Handler mehrere &amp;#039;&amp;#039;&amp;#039;Upstream Domains&amp;#039;&amp;#039;&amp;#039; eingetragen, verteilt Caddy die Last. Passive und aktive &amp;#039;&amp;#039;&amp;#039;Health Checks&amp;#039;&amp;#039;&amp;#039; nehmen ausgefallene Server automatisch aus der Verteilung.&lt;br /&gt;
&lt;br /&gt;
=== Header anpassen (vHosts) ===&lt;br /&gt;
Erwartet ein interner Webserver einen anderen Hostnamen, unter &amp;#039;&amp;#039;Reverse Proxy → Headers&amp;#039;&amp;#039; einen Eintrag &amp;#039;&amp;#039;header_up&amp;#039;&amp;#039; &amp;#039;&amp;#039;Host&amp;#039;&amp;#039; &amp;lt;code&amp;gt;{upstream_hostport}&amp;lt;/code&amp;gt; anlegen und im Handler auswählen.&lt;br /&gt;
&lt;br /&gt;
=== ACME-Challenge an interne Server durchreichen ===&lt;br /&gt;
Braucht eine Anwendung hinter Caddy ein eigenes Zertifikat (HTTP-01), in der Domain (advanced mode) unter &amp;#039;&amp;#039;&amp;#039;HTTP-01 Challenge Redirection&amp;#039;&amp;#039;&amp;#039; die IP des internen Servers eintragen. Caddy nutzt dann selbst TLS-ALPN-01 und reicht die HTTP-01-Challenge durch.&lt;br /&gt;
&lt;br /&gt;
=== Layer4-Proxy ===&lt;br /&gt;
Nach Aktivieren von &amp;#039;&amp;#039;&amp;#039;Enable Layer4 Proxy&amp;#039;&amp;#039;&amp;#039; kann Caddy unter &amp;#039;&amp;#039;Services → Caddy → Layer4 Proxy&amp;#039;&amp;#039; auch Nicht-HTTP-Verkehr weiterleiten:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;listener_wrappers:&amp;#039;&amp;#039;&amp;#039; Auf Port 443 wird z. B. SSH erkannt und an einen Server weitergeleitet, während HTTPS weiter beim Reverse Proxy landet.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;global:&amp;#039;&amp;#039;&amp;#039; Beliebige freie TCP/UDP-Ports, optional mit Protokollerkennung (TLS mit SNI, RDP, SSH, OpenVPN, WireGuard, DNS u. a.) – z. B. TLS-Durchleitung ohne Entschlüsselung an einen Server, der sein Zertifikat selbst verwaltet.&lt;br /&gt;
Der Layer4-Proxy ist für fortgeschrittene Szenarien gedacht und sollte bei Problemen zuerst deaktiviert werden.&lt;br /&gt;
&lt;br /&gt;
=== CrowdSec-Anbindung ===&lt;br /&gt;
Caddy bietet keine Web Application Firewall, lässt sich aber mit &amp;#039;&amp;#039;&amp;#039;CrowdSec&amp;#039;&amp;#039;&amp;#039; (Plugin &amp;#039;&amp;#039;os-crowdsec&amp;#039;&amp;#039;) kombinieren, das anhand der Zugriffslogs bekannte Angreifer-IPs sperrt. Einrichtung, Funktionsweise und weitere Möglichkeiten von CrowdSec beschreibt der Artikel [[OPNsense - CrowdSec]]. Für Caddy genügen folgende Schritte:&lt;br /&gt;
# &amp;#039;&amp;#039;General Settings → Log Settings&amp;#039;&amp;#039;: &amp;#039;&amp;#039;&amp;#039;Log HTTP Access in JSON Format&amp;#039;&amp;#039;&amp;#039; aktivieren, in jeder überwachten Domain unter &amp;#039;&amp;#039;Access&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;HTTP Access Log&amp;#039;&amp;#039;&amp;#039; einschalten.&lt;br /&gt;
# Per SSH die CrowdSec-Collection installieren und die Logquelle eintragen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cscli collections install crowdsecurity/caddy&lt;br /&gt;
cat &amp;gt; /usr/local/etc/crowdsec/acquis.d/caddy.yaml &amp;lt;&amp;lt;&amp;#039;EOF&amp;#039;&lt;br /&gt;
filenames:&lt;br /&gt;
  - /var/log/caddy/access/*.log&lt;br /&gt;
force_inotify: true&lt;br /&gt;
poll_without_inotify: true&lt;br /&gt;
labels:&lt;br /&gt;
  type: caddy&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# CrowdSec in der Weboberfläche neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Hochverfügbarkeit (CARP) ===&lt;br /&gt;
Bei zwei Firewalls mit CARP muss auch die Backup-Firewall Zertifikate erhalten. Möglich sind eigene Zertifikate aus &amp;#039;&amp;#039;System → Trust&amp;#039;&amp;#039;, die &amp;#039;&amp;#039;&amp;#039;DNS-01 Challenge&amp;#039;&amp;#039;&amp;#039; oder die &amp;#039;&amp;#039;&amp;#039;HTTP-01 Challenge Redirection&amp;#039;&amp;#039;&amp;#039; auf die Sync-Adresse der Backup-Firewall – jeweils mit Synchronisation per XMLRPC.&lt;br /&gt;
&lt;br /&gt;
=== Caddy ohne Root-Rechte ===&lt;br /&gt;
Unter &amp;#039;&amp;#039;General Settings → Advanced Settings&amp;#039;&amp;#039; kann Caddy als Benutzer &amp;#039;&amp;#039;&amp;#039;www&amp;#039;&amp;#039;&amp;#039; laufen. Dann sind nur Ports ab 1024 möglich (z. B. 8080/8443); die Standardports werden per Destination NAT dorthin weitergeleitet.&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;
| Caddy startet nicht, Port belegt || Weboberfläche oder ein anderes Plugin nutzt noch Port 80/443 – Schritt 1 prüfen.&lt;br /&gt;
|-&lt;br /&gt;
| Kein Zertifikat, Fehler im Log || A/AAAA-Record fehlt oder zeigt woanders hin; WAN-Regel für Port 80/443 fehlt; bei IPv6 ohne globale Adresse auf dem WAN schlägt TLS-ALPN-01 fehl.&lt;br /&gt;
|-&lt;br /&gt;
| Fehler 502 Bad Gateway || Upstream nicht erreichbar oder falsches Protokoll (http/https) bzw. Port im Handler.&lt;br /&gt;
|-&lt;br /&gt;
| Upstream-HTTPS-Fehler || Zertifikat des internen Servers nicht vertrauenswürdig – TLS Trust Pool + TLS Server Name setzen oder (intern) TLS Insecure Skip Verify.&lt;br /&gt;
|-&lt;br /&gt;
| Anwendung erzeugt falsche Links/Umleitungen || Anwendung kennt den Proxy nicht – Trusted Proxy, Base URL bzw. &amp;lt;code&amp;gt;overwriteprotocol&amp;lt;/code&amp;gt; in der Anwendung setzen.&lt;br /&gt;
|-&lt;br /&gt;
| Internes ACME der Anwendung scheitert || Caddy fängt &amp;lt;code&amp;gt;/.well-known/acme-challenge&amp;lt;/code&amp;gt; ab – HTTP-01 Challenge Redirection nutzen.&lt;br /&gt;
|-&lt;br /&gt;
| Echte Client-IP fehlt (hinter Cloudflare) || &amp;#039;&amp;#039;Trusted Proxies&amp;#039;&amp;#039; auf die Cloudflare-Netze und &amp;#039;&amp;#039;Client IP Headers&amp;#039;&amp;#039; auf &amp;lt;code&amp;gt;Cf-Connecting-Ip&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sicherheitsempfehlungen ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nur veröffentlichen, was nötig ist&amp;#039;&amp;#039;&amp;#039; – interne Dienste per Access List auf interne Netze/VPN beschränken.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Anwendungen ohne starke Anmeldung&amp;#039;&amp;#039;&amp;#039; per Forward Auth (authentik mit MFA) oder mTLS schützen; Basic Auth nur als einfache Zusatzhürde.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Anwendungen aktuell halten&amp;#039;&amp;#039;&amp;#039; – der Reverse Proxy schützt nicht vor Schwachstellen der Anwendung; dafür ist eine WAF (OPNWAF) oder zumindest [[OPNsense - CrowdSec|CrowdSec]] sinnvoll.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Port 80 schließen&amp;#039;&amp;#039;&amp;#039;, wenn Anwendungen Cookies ohne &amp;#039;&amp;#039;Secure&amp;#039;&amp;#039;-Flag setzen und keine HTTP-01-Challenge benötigt wird (dann DNS-01 nutzen).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Logs auswerten:&amp;#039;&amp;#039;&amp;#039; Zugriffslogs (JSON) an ein SIEM weiterleiten, z. B. ein [https://www.max-it.de/it-services/siem-open-source/ Open-Source-SIEM auf Wazuh-Basis].&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
Mit os-caddy wird die OPNsense zum komfortablen Reverse Proxy: Domain anlegen, Handler definieren, fertig – die Zertifikate kümmern sich um sich selbst. Access Lists, Basic Auth, mTLS und Forward Auth mit authentik bieten abgestufte Schutzmöglichkeiten, und für Spezialfälle stehen Wildcard-Zertifikate, Lastverteilung, Layer4-Routing und CrowdSec bereit. Für die Veröffentlichung interner Webdienste in kleinen und mittleren Unternehmen ist Caddy damit eine der elegantesten Lösungen auf der OPNsense.&lt;br /&gt;
&lt;br /&gt;
== Unterstützung von m.a.x. it ==&lt;br /&gt;
Sie möchten interne Webanwendungen sicher veröffentlichen, Single Sign-On mit authentik vorschalten oder Ihren Reverse Proxy um eine Web Application Firewall ergänzen? 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 einer [https://www.max-it.de/it-services/managed-firewall/ Managed Firewall 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 - CrowdSec]]&lt;br /&gt;
* [[Authentik – Open-Source-Identity-Provider für Single Sign-On]]&lt;br /&gt;
* [[OPNsense - HAProxy mit Passwortauthentifizierung]]&lt;br /&gt;
* [[OPNsense - Stunnel-Plugin]]&lt;br /&gt;
* [[OPNsense - Plugin-Liste]]&lt;br /&gt;
* [[Reverse Proxy]]&lt;br /&gt;
* [[Let&amp;#039;s Encrypt]]&lt;br /&gt;
* [[ACME]]&lt;br /&gt;
* [[HTTP/3]]&lt;br /&gt;
* [[Web Application Firewall]]&lt;br /&gt;
&lt;br /&gt;
== Links und Quellen ==&lt;br /&gt;
* [https://docs.opnsense.org/manual/how-tos/caddy.html OPNsense-Doku – Caddy Reverse Proxy und Layer4 Proxy]&lt;br /&gt;
* [https://caddyserver.com/docs/ Caddy – offizielle Dokumentation]&lt;br /&gt;
* [https://github.com/opnsense/plugins/tree/master/www/caddy Quellcode und Changelog des Plugins os-caddy]&lt;br /&gt;
* [https://docs.goauthentik.io/add-secure-apps/providers/proxy/server_caddy/ authentik – Forward Auth mit Caddy]&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>