Einführung ins Self-Hosting – Anwendungen selbst betreiben

Bevor du loslegst, solltest du dir überlegen, ob Self-Hosting wirklich das Richtige für dich ist. Es ist nicht immer einfach und erfordert regelmäßige Wartung. Wenn du bereits mit Servern arbeitest, ist es einfacher, aber es ist auch eine tolle Möglichkeit, mehr über Server und Technologien zu lernen.

Ich wollte mir das alles auch irgendwann „einfach nur mal ansehen“ und betreibe heute vom einfachen Werbeblocker oder Passwort-Manager über Cloudspeicher bis zum privaten Video- und Musik-Streaming selbst, also vorsichtig – Suchtgefahr..;-)

 

Solltest du Self-Hosting betreiben? Es hängt davon ab.

Ja, wenn:

  • Du gerne tüftelst und dich über Details freust, auch wenn es Stunden dauert.

  • Du bereit bist und viel über Computer und Technik lernen willst.

  • Du die kleinen Erfolge genießt, wenn du das, was große Firmen machen, für wenig Geld selbst erreichst.

Nein, wenn:

  • Du immer Bequemlichkeit und Zuverlässigkeit erwartest.

  • Du keine Lust auf kleine Probleme hast.

  • Dir deine Daten und Privatsphäre egal sind.

Vorteile des Self-Hostings im Überblick

Self-Hosting bietet viele Vorteile. Du verstehst Technik und das Internet besser. Du entscheidest über deine Daten, wo sie gespeichert werden und wer Zugriff hat.

Einige Beispiele:

  • Datenkraken adieu: Wechsle von Google, Microsoft, Apple u.a. zu Nextcloud für Dateien, Kalender, Kontakte, Dokumente, Wetter, Nachrichten und mehr.

  • Privater Media-Server: Nutze Jellyfin oder Plex für Filme, Serien und Musik

  • Werbeblocker im Netzwerk: Pi-Hole oder AdGuard Home blockieren Werbung auf allen Geräten, erhöhen deine Privatsphäre und beschleunigen das Laden von Seiten.

  • Home Assistant für Smart Home-Anwendungen, Vaultwarden als Passwort-Manager und Immich oder Ente für Foto- und Video-Backups sind weitere interessante Optionen.

Was kostet Self-Hosting?

Die Kosten sind zunächst Strom und deine Zeit. Du kannst mit vorhandener Hardware starten. Packt dich jedoch der Virus, kommen Kosten für Festplatten, Netzwerk-Switches, Kabel, RAM usw. hinzu. Es gibt gute Angebote für ältere Hardware, besonders gebrauchte Server, solange Strom kein Problem ist.

Die richtige Hardware für dein Self-Hosting Projekt

Du brauchst Hardware: ein alter Computer, dein aktueller Rechner (wenn er immer läuft oder zum Testen), oder ein Raspberry Pi. Aktuelle Modelle wie der Raspberry Pi 4 oder 5 sind sehr leistungsfähig, relativ günstig und bieten eine gute Kombination aus Leistung und Energieeffizienz. Das ist eine kleine Investition mit geringem Stromverbrauch, ideal zum Tüfteln.

Die Basics

Begriffe und Erklärungen, die du als Anfänger kennen solltest.

IP-Adresse verbergen: Schutz deiner Privatsphäre

Wenn du eine Website auf deinem Server hostest, hat das Auswirkungen auf deine Privatsphäre und Sicherheit. Schütze dich vor DDoS-Angriffen und halte deine Adresse geheim.

Nutze ein Edge-CDN wie Cloudflare, um eine Barriere vor deinem Server zu schaffen.

Wie Cloudflare Anfragen weiterleitet:

Deine Domain zeigt auf Cloudflare-Server, die den gefilterten Traffic (nur bestimmte Ports wie 80 und 443 für HTTP/HTTPS) an deinen Server weiterleiten.

Das gilt, wenn du eine Domain nutzen und Dienste im Internet anbieten möchtest.

SSH absichern: Schutz vor unbefugtem Zugriff

Wenn du Linux-Server kennst, weißt du, worauf ich hinaus will: Schütze deinen SSH-Zugriff.

  • Nutze SSH-Schlüssel, deaktiviere Passwort-Authentifizierung und Root-Zugriff.

  • Verwende fail2ban.

  • Der SSH-Benutzer sollte keinen passwortlosen Sudo-Zugriff haben, nur im Notfall.

  • Überwache SSH-Zugriffsprotokolle auf erfolgreiche Einträge.

  • Zwei-Faktor-Authentifizierung (2FA) bietet zusätzliche Sicherheit.

Grundlegende SSHd_config-Einstellungen:

PasswordAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
GSSAPIAuthentication no
PubkeyAuthentication yes

Füge diese am Ende von /etc/ssh/sshd_config hinzu, starte SSH neu und stelle sicher, dass dein SSH-Schlüssel hinzugefügt wurde.

Umgang mit dynamischen IP-Adressen: Immer erreichbar sein

Wenn sich deine IP-Adresse regelmäßig ändert, hast du eine dynamische IP-Adresse. Das ist ein Problem, wenn deine Domain (z. B. meinedomain.de) von deinem Server zu Hause bedient werden soll.

Es gibt viele Dienste, die dir dabei helfen:

DuckDNS: Ein kostenloser Dienst, der eine Subdomain wie deinname.duckdns.org bereitstellt, die du auf deine dynamische IP-Adresse verweisen kannst. Installation ist einfach: erstelle ein Konto, wähle eine Subdomain und installiere den DuckDNS-Client auf deinem Server, der deine IP-Adresse aktualisiert.

 

No-IP: Bietet ähnliche Funktionen wie DuckDNS, jedoch mit zusätzlichen kostenpflichtigen Optionen.

 

Dynu: Ein weiterer Dienst mit kostenlosen und kostenpflichtigen Optionen für dynamisches DNS.

 

Wann welchen Dienst nutzen?

Nutze DuckDNS, No-IP oder Dynu, wenn du eine einfache, kostenlose Lösung für eine Subdomain benötigst.

Cloudflare bietet auch eine integrierte Lösung für dynamische DNS-Updates. Dies ist nützlich, wenn du Cloudflare bereits für deine Domain verwendest.

Mein Favorit ist ddclient, ein Programm, das deine öffentliche IP-Adresse regelmäßig abruft und deine DNS aktualisiert, wenn sie sich geändert hat. Es funktioniert gut mit Cloudflare, unterstützt aber viele Dienste.

Reverse Proxy: Flexibler Zugriff auf deine Dienste

Viele haben damit Probleme, deshalb versuche ich es zu erklären.

Was ist ein Reverse Proxy?

Ein Reverse Proxy ist ein Vermittler, der Anfragen von Clients an verschiedene Server im Internet weiterleitet.

Beispiel:

Du hast zwei Anwendungen (Nextcloud und Pi-Hole), die auf demselben Server laufen und auf die du zugreifen möchtest.

Deine Domain ist http://meinserver.domain

Nextcloud läuft auf Port 80, also öffnet sich Nextcloud, wenn du http://meinserver.domain in einem Browser öffnest.

Pi-Hole läuft auf Port 8888, also musst du deinen Browser auf http://meinserver.domain:8888 verweisen, um darauf zuzugreifen.

Das ist nicht optimal, du möchtest etwas Einfacheres wie nextcloud.meinserver.domain und pihole.meinserver.domain.

Ich verwende Nginx als Reverse Proxy, aber es gibt auch moderne Alternativen wie Traefik und Caddy, die einfacher zu konfigurieren sind und automatische SSL-Zertifikate unterstützen.

Nginx installieren:

Auf Ubuntu: sudo apt install nginx

Konfiguration für Nextcloud:

Ändere den Port, auf dem Nextcloud läuft, auf etwas anderes als 80, da Nginx diesen Port verwaltet.

Angenommen, Nextcloud läuft jetzt auf Port 8080.

Erstelle eine neue Datei /etc/nginx/sites-available/nextcloud.conf mit folgendem Inhalt:

server {
    listen 80;
    server_name nextcloud.meinserver.domain;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

Dies weist Nginx an, den gesamten Traffic von nextcloud.meinserver.domain auf Port 80 an Port 8080 (Nextcloud) weiterzuleiten. Speichere die Datei, starte Nginx neu und öffne deinen Browser auf http://nextcloud.meinserver.domain, und du solltest Nextcloud sehen.

Mache dasselbe für Pi-Hole und andere Dienste.

Backups: Lebensretter in der Not

Wenn du deinen Server für wichtige Daten nutzt, HABE IMMER BACKUPS. Sie werden dir das Leben retten.

RAID ist kein Backup! Fehler passieren, und dann sind Backups wichtig.

Warum RAID kein Backup ist:

  • Dateibeschädigung

  • Menschliches Versagen (versehentliches Löschen)

  • Katastrophale Schäden (Wasser auf dem Server)

  • Viren und Malware

  • Software-Bugs, die Daten löschen

  • Hardware-Probleme

Plane deine Backups nach der 3-2-1-Regel. Wähle einen vertrauenswürdigen Speicheranbieter mit guter Verfügbarkeit und schnellem Support.

Experimentiere, bis du das beste Tool findest. Rsync oder SCP können für einige reichen, andere nutzen borgbackup oder Duplicati.

Überwache deine Backups mit Diensten wie Healthchecks und lass dich benachrichtigen, wenn ein Backup Fehler aufweist.

Container: Halte deinen Server schlank

Container sind der beste Weg, deinen Server schlank zu halten. Ich rede von Docker-Containern. Eine weitere Option ist Podman, eine Docker-kompatible Alternative ohne Daemon.

Stell dir vor, eine Anwendung benötigt viele Abhängigkeiten, die für diese Anwendung konfiguriert werden müssen. Andere Anwendungen benötigen vielleicht dieselben Abhängigkeiten, aber anders konfiguriert. Das ist ein Albtraum. Aber stell dir vor, diese Anwendung ist in einer Box mit allen Abhängigkeiten und Konfigurationen, die bereits eingerichtet sind. Du stellst diese Box auf deinen Server, zusammen mit anderen Boxen, und keine stört die andere, es sei denn, du willst es.

Das ist Docker.

Beispiel:

docker run -d \
  --name=nextcloud \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -p 8080:80 \
  -v /opt/nextcloud/config:/config \
  -v /opt/nextcloud/data:/data \
  --restart unless-stopped \
  lscr.io/linuxserver/nextcloud

Dies lädt Nextcloud herunter und führt es auf Port 8080 aus. Nextcloud läuft unter Benutzer und Gruppe 1000, die Zeitzone ist London, und alle Konfigurationen und Daten werden in /opt/nextcloud gespeichert.

 

Docker Compose verwenden:

Erstelle eine docker-compose.yml-Datei:

---
version: "2.1"
services:
  nextcloud:
    image: lscr.io/linuxserver/nextcloud
    container_name: nextcloud
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London
    volumes:
      - /opt/nextcloud/config:/config
      - /opt/nextcloud/data:/data
    ports:
      - 8080:80
    restart: unless-stopped

Führe docker-compose up -d aus. Das Ergebnis ist dasselbe, aber du hast alles in einer Datei, die einfacher zu verwalten ist.

Container sparen Zeit und Nerven, da du dich nicht um die manuelle Verwaltung von Abhängigkeiten kümmern musst.

Automatisierung: Sparen von Zeit und Aufwand

Angenommen, du hast einen Server und brauchst 30-60 Minuten, um von einer frischen Ubuntu-Installation zu deinem Wunschzustand zu gelangen: Pakete installieren, SSH einrichten, Firewall, Dotfiles.

Was, wenn deine Boot-Disk stirbt oder du mehrere Raspberry Pi’s mit derselben Konfiguration brauchst? Musst du die ganze Zeit wieder aufwenden? Nein!

Es gibt Tools, die fast alles automatisieren: Firewall, Dotfiles, Bereitstellung der Infrastruktur auf neuen Servern. Sieh dir Ansible, Puppet oder Chef an. Alternativ kannst du Terraform verwenden, um deine Infrastruktur zu definieren.

Ich verwende Ansible, um fast meine gesamte Infrastruktur zu automatisieren. Das hat mir unzählige Stunden gespart. Ich musste bisher dreimal neu bereitstellen. Das erste Mal dauerte es zwei Tage, weil ich noch nichts in Ansible hatte. Die nächsten beiden Bereitstellungen dauerten etwa 15 Minuten.

Sicherheit: Schutz deiner Daten und Dienste

Ich möchte diesen Post mit dem Thema Sicherheit abschließen, weil es viele abschreckt: den eigenen Server im Internet zu betreiben und Angst vor Hackern zu haben.

Ich bin kein Sicherheitsexperte, aber ich rate dringend, auf Sicherheit zu achten. Egal, ob dein Server im Internet läuft oder nur in deinem Heimnetzwerk erreichbar ist, Sicherheit ist wichtig! Hier sind die Grundlagen, die du als Anfänger verstehen und umsetzen solltest:

 

1. Grundlagen des Heimnetzwerks verstehen

Was ist mein Heimnetzwerk? Dein Heimnetzwerk ist das Netzwerk, das dein Router zu Hause aufbaut. Es verbindet all deine Geräte (Computer, Smartphones, Smart-TVs usw.) mit dem Internet.

Was ist eine IP-Adresse? Jedes Gerät in deinem Netzwerk hat eine eigene IP-Adresse (z. B. 192.168.1.10). Diese Adresse ist wie eine Hausnummer für dein Gerät innerhalb des Netzwerks. Dein Router hat auch eine IP-Adresse, die er vom Internetanbieter (ISP) bekommt. Diese öffentliche IP-Adresse ist, wie dein Haus von außen im Internet gefunden wird.

Was ist Portweiterleitung? Stell dir vor, dein Router ist ein Pförtner. Wenn jemand an deine öffentliche IP-Adresse klopft, muss der Router wissen, an welches Gerät im Netzwerk er die Anfrage weiterleiten soll. Portweiterleitung ist wie eine Anweisung an den Pförtner, Anfragen für bestimmte „Dienste“ an das richtige Gerät zu schicken.

Zum Beispiel: Anfragen an Port 80 (normales Surfen im Internet) an deinen Webserver (z. B. Nextcloud). Anfragen an Port 22 (SSH-Zugriff) an deinen Server, damit du ihn aus der Ferne verwalten kannst.

 

2. Firewall einrichten: Deine erste Verteidigungslinie

Eine Firewall ist wie eine Tür, die den Verkehr in dein Netzwerk kontrolliert. Sie erlaubt nur bestimmte „Besucher“ und hält unerwünschte „Gäste“ fern. Es gibt zwei Arten von Firewalls:

Software-Firewall: Ein Programm, das auf deinem Server läuft und den Netzwerkverkehr filtert. Beispiele:

iptables: Ein sehr mächtiges, aber komplexes Tool für Linux.

ufw (Uncomplicated Firewall): Eine einfachere Möglichkeit, iptables zu konfigurieren (für Ubuntu-basierte Systeme).

Installation: sudo apt install ufw

Aktivieren: sudo ufw enable

Erlauben von SSH (wichtig, damit du dich einloggen kannst!): sudo ufw allow ssh oder sudo ufw allow 22

Erlauben von Webverkehr (Port 80 und 443): sudo ufw allow 80 und sudo ufw allow 443

Status anzeigen: sudo ufw status

firewall-cmd: Standard-Firewall für Fedora, CentOS und andere RPM-basierte Systeme.

Hardware-Firewall: Ein separates Gerät (oft im Router integriert), das den Netzwerkverkehr filtert, bevor er überhaupt deinen Server erreicht. Die Konfiguration hängt von deinem Router ab.

Wichtig: Wenn du eine Software-Firewall aktivierst, musst du sicherstellen, dass du die richtigen Ports öffnest, damit deine Dienste erreichbar bleiben!

 

3. Überwachen deiner Server-Aktivitäten

Was sind Logs? Logs sind Protokolldateien, die alle möglichen Ereignisse auf deinem Server aufzeichnen: Wer hat sich wann eingeloggt? Welche Fehler sind aufgetreten? Wenn du diese Logs regelmäßig überprüfst, kannst du verdächtige Aktivitäten erkennen.

Was sind Metriken? Metriken sind Zahlen, die den Zustand deines Servers beschreiben: Wie viel CPU-Leistung wird genutzt? Wie viel Speicher ist noch frei? Wenn diese Zahlen ungewöhnlich hoch oder niedrig sind, könnte das ein Zeichen für ein Problem sein.

Tools zur Überwachung:

Graylog/Loki: Sammeln und analysieren Logdateien.

Grafana/Prometheus: Zeigen Metriken in übersichtlichen Diagrammen an.

Diese Tools sind komplex, aber es lohnt sich, sich damit zu beschäftigen, wenn du deinen Server wirklich im Blick haben willst.

 

4. System und Anwendungen aktuell halten

Warum ist das wichtig? Sicherheitslücken werden ständig entdeckt. Wenn du dein System und deine Anwendungen nicht regelmäßig aktualisierst, können Hacker diese Lücken ausnutzen, um in deinen Server einzudringen.

Wie mache ich das?

Linux: Verwende den Paketmanager deines Systems (z. B. sudo apt update && sudo apt upgrade unter Ubuntu/Debian).

Anwendungen: Folge den Anweisungen der jeweiligen Anwendung, um sie zu aktualisieren.

Changelogs lesen: Bevor du etwas aktualisierst, lies die Changelogs (Änderungsprotokolle). So weißt du, ob es größere Änderungen gibt, die Probleme verursachen könnten.

 

5. SSH-Zugriff absichern

SSH (Secure Shell) ist der häufigste Weg, um sich aus der Ferne auf einem Linux-Server einzuloggen. Deshalb ist es wichtig, diesen Zugriff zu schützen:

Kein Passwort-Login: Deaktiviere die Passwort-Authentifizierung und verwende stattdessen SSH-Schlüssel. Das ist sicherer, weil ein Schlüssel viel schwerer zu knacken ist als ein Passwort.

Root-Login verbieten: Erlaube keinen direkten Login als Benutzer „root“. Stattdessen loggst du dich als normaler Benutzer ein und verwendest sudo, um administrative Aufgaben auszuführen.

Port ändern (optional): Ändere den Standard-Port für SSH (22) auf einen anderen Port. Das hält zumindest automatisierte Angriffe ab.

Firewall: Erlaube SSH-Zugriff nur von bestimmten IP-Adressen aus.

 

6. Nur notwendige Ports öffnen

Je mehr Ports du öffnest, desto größer ist die Angriffsfläche. Schließe alle Ports, die du nicht wirklich brauchst. Die wichtigsten Ports für Webanwendungen sind 80 (HTTP) und 443 (HTTPS).

 

7. Container absichern

Wenn du Docker oder Podman verwendest, sichere auch deine Container ab:

Regelmäßig aktualisieren: Halte die Container-Images aktuell, um Sicherheitslücken zu schließen.

Nicht als Root ausführen: Vermeide es, Container als Root-Benutzer auszuführen.

Trivy: Verwende Tools wie Trivy, um Container-Images auf Sicherheitslücken zu prüfen.

 

8. VPN nutzen

Ein VPN (Virtual Private Network) verschlüsselt deine Internetverbindung und leitet sie über einen Server deiner Wahl. Das erhöht deine Privatsphäre und Sicherheit, besonders wenn du dich in öffentlichen WLAN-Netzwerken befindest.

Wireguard: Eine moderne und schnelle VPN-Lösung, die sich immer größerer Beliebtheit erfreut. Es ist eine gute Alternative zu OpenVPN.

 

Zusammenfassung

Sicherheit ist ein fortlaufender Prozess. Du musst immer auf dem Laufenden bleiben und deine Konfigurationen anpassen, wenn neue Bedrohungen auftauchen. Fang mit den Grundlagen an und lerne nach und nach mehr dazu. Dein Ziel sollte sein, es Angreifern so schwer wie möglich zu machen, in deinen Server einzudringen.

 

Ich hoffe, dieser Artikel hilft dir, mit dem Self-Hosting zu beginnen. Peace.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert