Startseite>Sicherer Webserver out of the box mit Caddy
Aus Raspberry Pi Geek 06/2018

Sicherer Webserver out of the box mit Caddy

© Michael Borgers, 123RF

HTTPS für alle

Frank Hofmann

Mit Caddy gelingt es auch unerfahrenen Anwendern, einen Webserver vernünftig und sicher aufzusetzen. Dabei reduziert er das üblicherweise komplexe Setup von HTTPS auf ein Minimum.

In erster Linie dient ein Webserver dazu, Webseiten und deren Inhalte bereitzustellen und auszuliefern. Er erhält die Anfrage beispielsweise dann, wenn Sie mit Ihrem Webbrowser eine Webseite via HTTP oder HTTPS ansurfen. Der Browser sendet eine Anfrage als HTTP-Request zum Webserver; der nimmt sie entgegen, bereitet die angeforderten Inhalte auf beziehungsweise rendert sie und stellt sie anschließend dem Webbrowser bereit.

Die Statistik der am meisten eingesetzten Webserver führen der Apache HTTP Server, Microsofts Internet Information Services (IIS) sowie Nginx an. Bei den ersten beiden handelt es sich um Veteranen aus den 1990ern, die über vorbereitete Konfigurationen oder Zusatzmodule immer wieder an die sich ändernden, komplexen Bedürfnisse der IT-Infrastruktur angepasst wurden. Die umfangreichen Bücher und Tutorials zu Apache und IIS sprechen Bände über deren Komplexität. Nginx erblickte im Jahr 2004 das Licht der Welt, gilt als modern, leichtgewichtig und flexibel und verrichtet seinen Dienst ebenso zuverlässig und flink wie die Konkurrenten.

Die vielfachen Angriffe auf Webserver und deren Dienste bringen Systemadministratoren immer stärker in Bedrängnis und verunsichern die Nutzer. Um das Vertrauen zu erhalten, gehen mehr und mehr Admins dazu über, ihre Webseiten SSL/TSL-verschlüsselt via HTTPS auszuliefern. Das erfordert üblicherweise mehrere Schritte zum Beantragen, Installieren, Pflegen und regelmäßigen Erneuern der dafür genutzten Zertifikate. Sie gelten nur zeitlich begrenzt, je nach Certification Authority und Budget zwischen 3 Monaten und 10 Jahren.

Die Initiative Let’s Encrypt [1] setzt sich zum Ziel, den ganzen Prozess zu vereinfachen, und verbucht damit bereits beachtliche Erfolge (siehe Kasten “Einfach verschlüsselt”). Zum derzeitigen Stand stellte das Projekt bereits für 63 Millionen Domains Zertifikate aus.

Einfach verschlüsselt

Das Projekt Let’s Encrypt ist die erste große Initiative der gemeinnützigen Organisation Internet Security Research Group (ISRG). Sie setzt sich zum Ziel, verschlüsselte WWW-Verbindungen zum Standard zu erheben – quasi HTTPS für jedermann. Let’s Encrypt setzt bei der Verschlüsselung auf das Ausstellen sogenannter Domainvalidierungszertifikate. Um zu prüfen, ob die Person, die eine Zertifizierungsanfrage stellt, auch tatsächlich Inhaber der Domain ist, erstellt und versendet Let’s Encrypt einen Token zu der anfragenden Domain. Danach erfolgt eine Web- oder DNS-Abfrage, bei der sich die Domain durch einen von diesem Token abgeleiteten Schlüssel verifiziert. Das stellt sicher, dass die Inhalte auch tatsächlich vom Betreiber der Webseite stammen. Für die eigene Vertrauenswürdigkeit setzt Let’s Encrypt außerdem auf größtmögliche Transparenz. Dafür nutzt das Projekt freie Software und offene Standards in Kombination mit der regelmäßigen Veröffentlichung von Transparenzberichten.

Caddy

An dieser Stelle kommt der Webserver Caddy [2] ins Spiel, der sowohl HTTP/2 (siehe Kasten “Von HTTP 1.1 zu HTTP/2”) als auch eine Anbindung an Let’s Encrypt von Haus aus mitbringt. Seit seiner Veröffentlichung 2015 gilt er als erster Allzweck-Webserver, der für diese Kombination dem Webmaster nur eine minimale Vorbereitung abfordert. Für Apache [3], Nginx [4] und IIS [5] gibt es zwar zu diesem Zweck ebenfalls Module und Lösungen, doch die befinden sich entweder noch in der Entwicklung oder ihr Setup gestaltet sich deutlich komplexer.

Von HTTP 1.1 zu HTTP/2

Nach langer Diskussion der Entwicklergruppen der unterschiedlichen Webbrowser steht seit Februar 2015 die Version 2.0 des Hypertext Transfer Protocols [10] zur Verfügung. Im RFC 7540 [11] beschrieben, löst HTTP/2 nach und nach das aus dem Jahr 1997 stammende HTTP 1.1 ab. Auswertungen des WWW-Datenverkehrs ergaben Ende 2017 bereits einen Anteil von 20 Prozent für HTTP/2. HTTP/2 bringt etliche Neuerungen [12] mit sich, darunter eine Datenkompression der HTTP-Header sowie das parallele Ausführen von Requests über eine einzige TCP-Verbindung (“Pipelining”). Generell zielt das Protokoll darauf ab, die zur Verfügung stehende Rechenleistung besser auszunutzen und die Zeit für die Übermittlung der Anfrage zu minimieren.

Das in der Programmiersprache Go entwickelte Caddy steht für den privaten Einsatz als kostenfreie Community-Version bereit. Möchten Sie den Webserver kommerziell nutzen, freuen sich die Entwickler über eine einmalige Zahlung von 25 US-Dollar. Das Projekt steht unter der Apache-2.0-Lizenz.

Die folgende, auf Debian 9 alias “Stretch” angepasste Beschreibung basiert auf dem Blogbeitrag von Supriyo Biswas [6]. Sie lässt sich komplett auf Raspbian übertragen, das ja bekanntermaßen auf Debian basiert. Darüber hinaus wurden die Entwicklungen seit seiner Veröffentlichung des Beitrags sowie die stärkere Verwendung von Markdown berücksichtigt.

Installation

Für Caddy stehen derzeit noch keine spezifischen Pakete für bestimmte Distributionen bereit. Im Download-Bereich der Projektseite finden Sie jedoch einen Konfigurator, mit dessen Hilfe Sie das für Ihr System passende Binary auswählen. Dazu zählen auch Varianten für ARMv5 bis ARMv7. Darüber hinaus legen Sie hier auch fest, welche Plugins Sie integrieren möchten (Abbildung 1). Abschließend generiert die Software das nach Ihren Wünschen zusammengestellte Paket. Caddy gibt es daneben unter anderem auch für Windows, viele BSD-Varianten und Mac OS.

Abbildung 1: Bereits auf der Projektseite legen Sie fest, welche Erweiterungen die Software enthalten soll.

Abbildung 1: Bereits auf der Projektseite legen Sie fest, welche Erweiterungen die Software enthalten soll.

Möchten Sie Caddy lieber über die Kommandozeile einrichten, etwa für den Einsatz auf einem Headless-System, beziehen Sie dazu als Erstes als Nutzer Root ein Shell-Skript von der Caddy-Projektwebseite (Listing 1, Zeile 1), geben diesem Ausführungsrechte (Zeile 2) und laden über den Aufruf des Skripts das gewünschte Software-Image herunter (Zeile 3). Zusätzliche Plugins geben Sie im Aufruf als durch Kommas separierte Parameter an (Zeile 4). Die Tabelle “Caddy-Plugins” zeigt eine kleine Auswahl der verfügbaren Erweiterungen.

Listing 1

 

# wget https://getcaddy.com -O getcaddy
# chmod +x getcaddy
# ./getcaddy personal
# ./getcaddy personal http.ipfilter,http.cache

Caddy-Plugins

Name des Plugins

Bedeutung

dyndns

Dynamisches DNS, etwa via Cloudflare

http.cache

Caching für HTTP

http.cgi

Erweiterung um CGI-Skripte

http.expires

Setzen eines Verfallsdatums

http.git

Veröffentlichung/Aktualisierung via Git-Kommandos

http.ipfilter

Zugriff ausgewählter IP-Adressen blockieren

http.webdav

Erweiterung um WebDAV

Grundlegendes Setup

Zum Funktionstest legen Sie im aktuellen Verzeichnis der Einfachheit halber eine index.html an, die lediglich aus dem HTML-Header sowie dem Body mit der Überschrift “Hallo Welt” besteht. Danach starten Sie Caddy aus demselben Verzeichnis. Zum Aufruf der Seite im Webbrowser verwenden Sie entweder die IP-Adresse des Hosts oder localhost beziehungsweise 127.0.0.1 und ergänzen die Angabe um die Portnummer 2015, auf der Caddy ohne weitere Einstellungen auf HTTP-Anfragen lauscht (Abbildung 2).

Abbildung 2: Die Webseite zum Funktionstest sowie der Aufruf im Webbrowser.

Abbildung 2: Die Webseite zum Funktionstest sowie der Aufruf im Webbrowser.

Um den Webserver abzusichern und ihn als Systemdienst einzurichten, legen Sie zunächst einen eigenen Benutzer für Caddy an, dem Sie über den Schalter -rmd das Heimatverzeichnis /opt/caddy/ zuordnen (Listing 2, erste Zeile). Darin befinden sich später auch die Konfigurationsdateien und die realen Inhalte der Webseite.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland