4 Minuten Lesezeit (730 Worte)

Caddy: Reverse-Proxy in einfach?

Die Absicherung von HTTP-Verbindungen ist heutzutage relevant wie nie zuvor und auch an vielen Stellen vorgeschrieben. Die Implementierung ist aber je nach Infrastruktur kompliziert und erfordert häufig mehrere verschiedene Softwarekomponenten, um die Erstellung und auch den Austausch der benötigten HTTPS-Zertifikate sicherzustellen. Im Rahmen eines Projektes hatte sich daher die Frage gestellt, ob dieses Verfahren optimiert werden kann, um Zeit und Aufwand zu sparen und zu vermeiden, dass ein ablaufendes Zertifikat den produktiven Betrieb stört. Als hilfreiche und einfach zu konfigurierende Lösung hat sich hier Caddy herausgestellt, welchen wir Ihnen in diesem Beitrag vorstellen möchten.

Caddy ist ein in Go geschriebener Webserver, welcher eine sehr schnelle und einfache Einrichtung eines Reverse-Proxies mit automatischer Generierung und Verwaltung der SSL-Zertifikate ermöglicht.

Reverse-Proxy mit automatischer HTTPS-Konfiguration

Von den auf Linux-Systemen häufig genutzten Reverse-Proxy Varianten wie nginx, Apache HTTP Server oder HAProxy ist bekannt, dass die HTTPS-Konfiguration teilweise etwas aufwändiger sein kann und die Bereitstellung und Erneuerung der SSL-Zertifikate jeweils zusätzliche Schritte erfordert. Können Sie sich daher vorstellen, mit einem einzigen Befehl bereits einen funktionierenden Reverse-Proxy zu erhalten, der automatisch ein passendes SSL-Zertifikat hat?

Der Befehl …

caddy reverse-proxy --from www.example.com --to localhost:8080

… reicht aus, um Anfragen an die (eigene) Domain www.example.com an einen lokalen Dienst, der auf Port 8080 läuft, weiterzuleiten. Das notwendige HTTPS-Zertifikat für https://www.example.com wird in diesem Fall automatisch generiert. Diese manuelle Vorgehensweise ist für schnelle Tests sehr hilfreich, aber sollte so eher nicht produktiv verwendet werden.

Eine persistente Konfiguration ist stattdessen über die separate Konfigurationsdatei Caddyfile möglich, welche ein eigenes, sehr simples Format nutzt. Alternativ kann die Konfiguration auch im JSON-Format bereitgestellt werden. Nachfolgend finden Sie den oben genannten Befehl als Caddyfile:

www.example.com {
	reverse_proxy localhost:8080
}
 

Dieser simple Code reicht aus, um alle Anfragen an „www.example.com“ an einen Backend-Service auf HTTP-Port „8080“ weiterzuleiten. Zusätzlich baut Caddy „out of the box“ eine Verbindung mit ACME-Servern auf, um automatisch ein kostenloses SSL-Zertifikat über ZeroSSL oder Let'sEncrypt zu beziehen. Caddy kümmert sich auch komplett automatisch um eine notwendige Aktualisierung der Zertifikate. Die Validierung beim ACME-Server erfolgt standardmäßig über HTTP. 

Reverse-Proxy ohne öffentlich erreichbaren Webserver

Es gibt natürlich viele Umgebungen, in denen eine direkte HTTP-Validierung nicht ermöglicht werden kann, weil der Caddy Server nicht aus dem Internet erreichbar ist. Für diese Fälle gibt es weitere Möglichkeiten, um die SSL-Zertifikate zu validieren:

1.  Falls in der internen Infrastruktur ein eigener ACME-Server betrieben wird, kann dieser genutzt werden. Dies ergibt vor allem Sinn, wenn eine interne Zertifizierungsstelle zur Ausstellung und Verwaltung der Zertifikate betrieben wird und von dieser die Zertifikate bezogen werden sollen.

2.  Über passende TXT-Einträge in der DNS-Zone können ebenfalls Zertifikate validiert werden. Zu diesem Zweck muss der Caddy Server eine Verbindung über die API eines passenden (internen oder externen) DNS-Anbieters aufbauen können, um die für die Validierung erforderlichen Einträge zu setzen.

Beispiel-Konfiguration für einen Reverse-Proxy mit ACME-Anpassung in Cloudflare:

www.example.com {
    reverse_proxy backend-server:8080
    tls {
        dns cloudflare
    }
}
 

Beispiel-Konfiguration für einen Reverse-Proxy mit eigenem ACME-Server:

{
  acme_server
}
tls {
  issuer acme {
    ca https://acme-server-url/
  }
}
www.example.com {
    reverse_proxy backend-server:8080
}
 

Verwendung mit Docker

Caddy kann auch sehr einfach als Docker-Container betrieben und beispielsweise in eine Docker Compose Konfiguration integriert werden, um einen Web-Service mit HTTPS erreichbar zu machen. Eine docker-compose.yml könnte beispielsweise wie folgt aussehen: 

services:
   caddy:
     image: caddy:latest
     ports:
       - 80:80
       - 443:443
     volumes:
       - ./Caddyfile:/etc/caddy/Caddyfile
       - ./certs:/data
     restart: always

   webapp:
     image: my-webapp:latest
     ports:
       - 8080:8080
     restart: always
 

Damit Caddy funktioniert muss vorher noch das Verzeichnis „certs“ angelegt werden, in dem die Zertifikate persistent gespeichert werden, sowie das Caddyfile: 

www.example.com {
     reverse_proxy webapp:8080
}
 

Anschließend lassen sich die Container mit „docker compose up -d“ starten 

Plugins

Caddy kann mit vielen Plugins erweitert werden, die eine Vielzahl von freiwilligen Entwicklern bereitstellen. Über diese Erweiterungen können neben verschiedenen DNS-Providern auch Features wie WebDAV, verschiedene Autorisierungsmöglichkeiten, Rate-Limits, Webhooks und vieles Weitere implementiert werden. Weitere Informationen dazu sind hier zu finden:

https://caddyserver.com/download

https://github.com/caddyserver/xcaddy

Fazit

Der Caddy Webserver vereinfacht die Einrichtung von Reverse-Proxies mit HTTPS-Zugriff deutlich und unterstützt damit gleichzeitig bei der Verbesserung der Sicherheit. Mit seiner Benutzerfreundlichkeit, der automatischen HTTPS-Konfiguration, dynamischen Reverse-Proxy-Funktionen und dem Plugin-System bietet er eine moderne und umfassende Lösung.

Für weitere Informationen sind die offizielle Dokumentation und die Caddy-Community zu empfehlen:

https://caddyserver.com/docs/

https://caddy.community/

Seminarempfehlungen

Paul Kozber hat noch keine Informationen über sich angegeben
 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Freitag, 03. Mai 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie