diff --git a/README.md b/README.md new file mode 100644 index 0000000..90422dd --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# Homelab-Dokumentation + +Diese Dokumentation beschreibt Aufbau, Betrieb und bekannte Themen des Homelabs. + +## Bereiche + +- [VPS-Dokumentation](VPS/README.md) + diff --git a/VPS/README.md b/VPS/README.md new file mode 100644 index 0000000..9d3505c --- /dev/null +++ b/VPS/README.md @@ -0,0 +1,23 @@ +# VPS-Dokumentation + +Die VPS dient als öffentliche Edge-Infrastruktur des Homelabs. Die Dokumentation ist nach Verantwortungsbereichen gegliedert. + +## Einstieg + +- [Übersicht](overview.md) +- [Dienste](services.md) +- [Bekannte Themen und Verbesserungspotenzial](known-issues.md) + +## Infrastruktur + +- [Netzwerk](networking.md) +- [WireGuard](wireguard.md) +- [Docker](docker.md) +- [Sicherheit](security.md) + +## Betrieb + +- [Monitoring](monitoring.md) +- [Backup](backup.md) +- [Wartung und Betrieb](maintenance.md) + diff --git a/VPS/backup.md b/VPS/backup.md index 12fe1ba..46562b8 100644 --- a/VPS/backup.md +++ b/VPS/backup.md @@ -5,14 +5,16 @@ Die VPS wird per restic auf eine Hetzner Storage Box gesichert. Transport: + - SFTP Backup Tool: + - restic -— +--- -# Gesicherte Verzeichnisse +## Gesicherte Verzeichnisse ```text /opt @@ -21,11 +23,11 @@ Backup Tool: /etc/letsencrypt ``` -— +--- -# Backup Ziel +## Backup Ziel -## Hetzner Storage Box +### Hetzner Storage Box Repository Struktur: @@ -33,48 +35,51 @@ Repository Struktur: backups/vps ``` -— +--- -# Retention Policy +## Retention Policy | Typ | Anzahl | -|—|—| +|---|---| | Daily | 7 | | Weekly | 4 | | Monthly | 6 | Zusätzlich: + - regelmäßiges prune -— +--- -# Backup Zeitplan +## Backup Zeitplan -## systemd timer +### systemd timer Nächster Lauf: + - täglich um 02:30 UTC Timer: + - restic-backup.timer -— +--- -# Ziele der Backupstrategie +## Ziele der Backupstrategie - vollständige Wiederherstellbarkeit der VPS - schnelle Recovery - Schutz vor Fehlkonfigurationen - Schutz vor Datenverlust -— +--- -# Wiederherstellungsziele +## Wiederherstellungsziele Die folgenden Bereiche müssen wiederherstellbar sein: | Bereich | Wichtigkeit | -|—|—| +|---|---| | Docker Stacks | kritisch | | Reverse Proxy | kritisch | | authentik | kritisch | @@ -82,11 +87,11 @@ Die folgenden Bereiche müssen wiederherstellbar sein: | Zertifikate | kritisch | | SSH Zugriff | kritisch | -— +--- -# Verbesserungspotenzial +## Verbesserungspotenzial -## Noch offen +### Noch offen - Restore-Test dokumentieren - Backup Monitoring ergänzen @@ -94,8 +99,8 @@ Die folgenden Bereiche müssen wiederherstellbar sein: - Alerting bei Fehlern - Dokumentierte Recovery-Anleitung -— +--- -# Langfristiges Ziel +## Langfristiges Ziel -Die VPS soll vollständig reproduzierbar und innerhalb kurzer Zeit wiederherstellbar sein. \ No newline at end of file +Die VPS soll vollständig reproduzierbar und innerhalb kurzer Zeit wiederherstellbar sein. diff --git a/VPS/docker.md b/VPS/docker.md index d4531a3..fd793a4 100644 --- a/VPS/docker.md +++ b/VPS/docker.md @@ -3,32 +3,33 @@ ## Docker Netzwerke | Netzwerk | Zweck | -|—|—| +|---|---| | proxy | Hauptnetzwerk für Reverse Proxy und Dienste | | authentik_authentik | internes authentik Netzwerk | | nextcloud_internal | internes Nextcloud Netzwerk | | teamspeak_default | isoliertes TeamSpeak Netzwerk | -— +--- -# Hauptnetzwerk „proxy“ +## Hauptnetzwerk „proxy“ -## Netzwerk +### Netzwerk - Name: proxy - Subnetz: 172.20.0.0/16 Das proxy-Netzwerk dient als zentrale Kommunikationsschicht zwischen: + - Nginx Proxy Manager - öffentlichen Diensten - internen Reverse-Proxy-Zielen -— +--- -# Container +## Container | Container | Aufgabe | Netzwerk | -|—|—|—| +|---|---|---| | npm | Reverse Proxy | proxy | | authentik-server | SSO Frontend | proxy | | authentik-worker | Hintergrundprozesse | authentik_authentik | @@ -46,12 +47,12 @@ Das proxy-Netzwerk dient als zentrale Kommunikationsschicht zwischen: | teamspeak | Voice Server | teamspeak_default | | site | Statische Webseite | proxy | -— +--- -# Öffentlich erreichbare Ports +## Öffentlich erreichbare Ports | Port | Dienst | -|—|—| +|---|---| | 80 | NPM HTTP | | 443 | NPM HTTPS | | 9000 | authentik | @@ -62,21 +63,21 @@ Das proxy-Netzwerk dient als zentrale Kommunikationsschicht zwischen: | 30033 | TeamSpeak Dateitransfer | | 51820/UDP | WireGuard | -— +--- -# Localhost-only Bindings +## Localhost-only Bindings | Port | Dienst | -|—|—| +|---|---| | 81 | NPM Admin | | 3001 | Uptime Kuma | | 3002 | AdGuard UI | -— +--- -# Docker Speicherstruktur +## Docker Speicherstruktur -## Basisverzeichnis +### Basisverzeichnis ```text /opt/ @@ -92,27 +93,29 @@ Beispiele: /opt/npm ``` -— +--- -# Persistenzstrategie +## Persistenzstrategie Die VPS nutzt überwiegend: + - Bind Mounts - lokale persistente Verzeichnisse anstatt vieler benannter Docker-Volumes. Vorteile: + - einfachere Backups - einfachere Migration - einfachere Wiederherstellung - bessere Übersichtlichkeit -— +--- -# Aktuelle Beobachtungen +## Aktuelle Beobachtungen -## Positiv +### Positiv - saubere Trennung der Dienste - wenige Netzwerke @@ -120,9 +123,9 @@ Vorteile: - minimale Anzahl ungenutzter Volumes - strukturierter Aufbau -## Verbesserungspotenzial +### Verbesserungspotenzial - unnötige öffentliche Portfreigaben reduzieren - Compose-Strukturen vereinheitlichen - Labels und Restart Policies standardisieren -- Netzwerk-Namenskonventionen vereinheitlichen \ No newline at end of file +- Netzwerk-Namenskonventionen vereinheitlichen diff --git a/VPS/known-issues.md b/VPS/known-issues.md index e6b0253..02a56a7 100644 --- a/VPS/known-issues.md +++ b/VPS/known-issues.md @@ -6,7 +6,7 @@ - Forgejo öffentlich exposed - öffentliche Ports teilweise historisch gewachsen -— +--- ## Dokumentation @@ -14,7 +14,7 @@ - Domains/Subdomains noch nicht dokumentiert - Compose Standards noch nicht vereinheitlicht -— +--- ## Monitoring @@ -22,7 +22,7 @@ - Backup Monitoring fehlt - VPN Monitoring ausbaufähig -— +--- ## Docker @@ -30,18 +30,18 @@ - Netzwerk-Namenskonventionen uneinheitlich - Logging noch nicht standardisiert -— +--- ## Backups - Restore-Prozess noch nicht dokumentiert - kein regelmäßiger Restore-Test -— +--- ## Langfristige Themen - Matrix Server - zentrale Benachrichtigungen - vollständige Infrastructure-as-Code Struktur -- automatische Inventarisierung \ No newline at end of file +- automatische Inventarisierung diff --git a/VPS/maintenance.md b/VPS/maintenance.md index 345d5d7..f95d281 100644 --- a/VPS/maintenance.md +++ b/VPS/maintenance.md @@ -8,7 +8,7 @@ - Uptime Kuma Alerts prüfen - CrowdSec Events prüfen -— +--- ### Wöchentlich @@ -17,7 +17,7 @@ - Backup Logs prüfen - freien Speicherplatz prüfen -— +--- ### Monatlich @@ -26,40 +26,41 @@ - Logs prüfen - Sicherheitsreview durchführen -— +--- -# Automatische Wartung +## Automatische Wartung -## Bereits vorhanden +### Bereits vorhanden | Funktion | Status | -|—|—| +|---|---| | apt Updates | aktiv | | Security Updates | aktiv | | restic Backup | aktiv | | logrotate | aktiv | | CrowdSec Updates | aktiv | -— +--- -# Geplante Automatisierung +## Geplante Automatisierung | Funktion | Status | -|—|—| +|---|---| | Docker Cleanup | geplant | | Journal Cleanup | geplant | | Backup Validation | geplant | | Health Reports | geplant | | Matrix Alerts | geplant | -— +--- -# Wartungsziele +## Wartungsziele Die VPS soll möglichst: + - wartungsarm - stabil - nachvollziehbar - automatisiert -betrieben werden. \ No newline at end of file +betrieben werden. diff --git a/VPS/monitoring.md b/VPS/monitoring.md index 0fe1e48..e76e5e5 100644 --- a/VPS/monitoring.md +++ b/VPS/monitoring.md @@ -4,24 +4,25 @@ Die VPS nutzt aktuell mehrere Monitoring-Lösungen mit unterschiedlichen Aufgabenbereichen. -— +--- -# Verwendete Systeme +## Verwendete Systeme | Dienst | Aufgabe | -|—|—| +|---|---| | Netdata | Live-Systemmonitoring | | Uptime Kuma | Verfügbarkeitsmonitoring | | CrowdSec | Sicherheitsmonitoring | | Ubuntu Timer | Wartung / Updates | -— +--- -# Netdata +## Netdata -## Aufgabe +### Aufgabe Netdata überwacht: + - CPU - RAM - Prozesse @@ -31,15 +32,17 @@ Netdata überwacht: - Systemmetriken Container: + - netdata -— +--- -# Uptime Kuma +## Uptime Kuma -## Aufgabe +### Aufgabe Uptime Kuma überwacht: + - externe Erreichbarkeit - HTTPS Checks - Zertifikate @@ -47,6 +50,7 @@ Uptime Kuma überwacht: - Domains Container: + - uptime-kuma Localhost Binding: @@ -55,41 +59,43 @@ Localhost Binding: 127.0.0.1:3001 ``` -— +--- -# CrowdSec +## CrowdSec -## Aufgabe +### Aufgabe CrowdSec überwacht: + - Loginversuche - Angriffe - bekannte Bad IPs Integration: + - nftables - Docker - Reverse Proxy -— +--- -# Systemd Timer +## Systemd Timer -## Aktive Wartungstimer +### Aktive Wartungstimer | Timer | Aufgabe | -|—|—| +|---|---| | apt-daily.timer | Paketupdates | | apt-daily-upgrade.timer | Sicherheitsupdates | | restic-backup.timer | Backups | | logrotate.timer | Logrotation | | crowdsec-hub-update.timer | CrowdSec Updates | -— +--- -# Aktuelle Beobachtungen +## Aktuelle Beobachtungen -## Positiv +### Positiv - mehrere Monitoring-Ebenen vorhanden - Backups automatisiert @@ -97,11 +103,11 @@ Integration: - geringe Systemlast - ausreichende Leistungsreserven -— +--- -# Verbesserungspotenzial +## Verbesserungspotenzial -## Noch offen +### Noch offen - zentrales Alerting - Matrix Integration @@ -110,12 +116,13 @@ Integration: - VPN Health Checks - Docker Health Alerts -— +--- -# Langfristiges Ziel +## Langfristiges Ziel Das Monitoring soll: + - frühzeitig Probleme erkennen - automatisch benachrichtigen - Fehlkonfigurationen sichtbar machen -- möglichst wartungsarm funktionieren \ No newline at end of file +- möglichst wartungsarm funktionieren diff --git a/VPS/networking.md b/VPS/networking.md index bb3088c..aab0a25 100644 --- a/VPS/networking.md +++ b/VPS/networking.md @@ -3,29 +3,32 @@ ## Öffentliches Netzwerk | Interface | Adresse | -|—|—| +|---|---| | eth0 | 46.225.176.170 | -— +--- -# VPN +## VPN -## WireGuard +### WireGuard Die VPS dient als zentraler WireGuard-Hub zwischen: + - VPS - Heimnetz - zusätzlichen Clients Interface: + - wg0 Listening Port: + - 51820/UDP -— +--- -# Heimnetz Routing +## Heimnetz Routing Folgende Route wird aktuell über WireGuard bereitgestellt: @@ -35,35 +38,36 @@ Folgende Route wird aktuell über WireGuard bereitgestellt: Dadurch kann die VPS interne Dienste im Heimnetz sicher über VPN erreichen. -— +--- -# Firewall / Paketfilterung +## Firewall / Paketfilterung -## Aktueller Zustand +### Aktueller Zustand UFW ist nicht aktiv. Stattdessen nutzt die VPS: + - nftables - Docker-verwaltete Firewallregeln - CrowdSec Integration -— +--- -# Sicherheitslayer +## Sicherheitslayer | Layer | Aufgabe | -|—|—| +|---|---| | Docker nftables Regeln | Container-Isolation | | CrowdSec | Dynamische Blockierung | | WireGuard | Sicherer privater Zugriff | | NPM | TLS Terminierung | -— +--- -# Docker Netzwerkarchitektur +## Docker Netzwerkarchitektur -## proxy Netzwerk +### proxy Netzwerk Subnetz: @@ -72,6 +76,7 @@ Subnetz: ``` Wichtige Dienste: + - NPM - authentik - Nextcloud @@ -79,19 +84,19 @@ Wichtige Dienste: - Forgejo - Monitoring-Dienste -— +--- -# Aktuelle Sicherheitsbeobachtungen +## Aktuelle Sicherheitsbeobachtungen -## Positiv +### Positiv - interne Docker-Segmentierung vorhanden - RAW nftables Isolationsregeln aktiv - Localhost Bindings bereits genutzt - CrowdSec in INPUT Chain integriert -## Mögliche Verbesserungen +### Mögliche Verbesserungen - direkten öffentlichen Zugriff auf authentik entfernen - öffentliche Erreichbarkeit von Forgejo prüfen -- Rolle von AdGuard auf der VPS bewerten \ No newline at end of file +- Rolle von AdGuard auf der VPS bewerten diff --git a/VPS/overview.md b/VPS/overview.md index df1053d..8ac04c0 100644 --- a/VPS/overview.md +++ b/VPS/overview.md @@ -3,7 +3,7 @@ ## Allgemeine Informationen | Eigenschaft | Wert | -|—|—| +|---|---| | Hostname | ubuntu-8gb-nbg1-1 | | Anbieter | Hetzner Cloud | | Standort | nbg1 (Nürnberg) | @@ -13,9 +13,9 @@ | Hauptbenutzer | mbyte | | Container Runtime | Docker | -— +--- -# Aufgabe der VPS +## Aufgabe der VPS Die VPS dient als öffentliche Edge-Infrastruktur des Homelabs. @@ -28,12 +28,12 @@ Hauptaufgaben: - Öffentlicher Einstiegspunkt für interne Dienste - Externes Monitoring -— +--- -# Hauptdienste +## Hauptdienste | Dienst | Aufgabe | -|—|—| +|---|---| | Nginx Proxy Manager | Reverse Proxy und TLS | | authentik | SSO / Identity Provider | | CrowdSec | Intrusion Prevention | @@ -47,10 +47,11 @@ Hauptaufgaben: | Collabora | Office-Integration | | TeamSpeak | Voice-Server | -— +--- -# Infrastruktur-Architektur +## Infrastruktur-Architektur +```text Internet ↓ VPS @@ -68,15 +69,16 @@ Heimnetz ├── Seafile ├── Immich └── interne Dienste +``` -— +--- -# Ressourcenverbrauch +## Ressourcenverbrauch -## Aktueller Status (2026-05-26) +### Aktueller Status (2026-05-26) | Ressource | Nutzung | -|—|—| +|---|---| | CPU Load | niedrig | | RAM Nutzung | ~34% | | Festplattennutzung | ~17% | @@ -84,9 +86,9 @@ Heimnetz Die VPS besitzt aktuell deutliche Leistungsreserven. -— +--- -# Zielbild +## Zielbild Die VPS soll langfristig: @@ -98,4 +100,4 @@ Die VPS soll langfristig: - wartungsarm - vollständig überwacht -sein. \ No newline at end of file +sein. diff --git a/VPS/security.md b/VPS/security.md index d70b942..6115572 100644 --- a/VPS/security.md +++ b/VPS/security.md @@ -4,12 +4,12 @@ Die VPS nutzt mehrere Sicherheitslayer. -— +--- -# Sicherheitskomponenten +## Sicherheitskomponenten | Komponente | Aufgabe | -|—|—| +|---|---| | CrowdSec | Dynamische Angriffsblockierung | | nftables | Paketfilterung | | Docker Netzwerkisolierung | Segmentierung | @@ -17,36 +17,38 @@ Die VPS nutzt mehrere Sicherheitslayer. | Nginx Proxy Manager | TLS Terminierung | | authentik | Zentrale Authentifizierung | -— +--- -# Firewall +## Firewall -## Aktueller Zustand +### Aktueller Zustand UFW ist deaktiviert. Die VPS nutzt stattdessen: + - nftables - Docker-verwaltete Regeln - CrowdSec Integration -— +--- -# Docker Isolation +## Docker Isolation Die Docker-Netzwerke sind durch nftables-Regeln segmentiert. Vorhanden: + - RAW Regeln - Netzwerkisolation - Interface-basierte Filterung -— +--- -# Öffentlich erreichbare Dienste +## Öffentlich erreichbare Dienste | Dienst | Port | -|—|—| +|---|---| | NPM | 80 / 443 | | Forgejo | 3000 | | Forgejo SSH | 2222 | @@ -54,23 +56,23 @@ Vorhanden: | TeamSpeak | 9987 / 10011 / 30033 | | WireGuard | 51820 | -— +--- -# Lokale Bindings +## Lokale Bindings Folgende Dienste sind nur lokal erreichbar: | Dienst | Binding | -|—|—| +|---|---| | NPM Admin | 127.0.0.1:81 | | Uptime Kuma | 127.0.0.1:3001 | | AdGuard UI | 127.0.0.1:3002 | -— +--- -# Sicherheitsbeobachtungen +## Sicherheitsbeobachtungen -## Positiv +### Positiv - CrowdSec aktiv - Docker Netzwerksegmentierung @@ -78,30 +80,30 @@ Folgende Dienste sind nur lokal erreichbar: - VPN sauber getrennt - geringe Angriffsfläche des Hosts -— +--- -# Verbesserungspotenzial +## Verbesserungspotenzial -## Hohe Priorität +### Hohe Priorität - authentik nicht direkt öffentlich exposen - Forgejo Exposure prüfen - öffentliche Ports reduzieren -— +--- -# Mittlere Priorität +### Mittlere Priorität - Compose Standards vereinheitlichen - zentrale Loggingstrategie - automatische Sicherheitsbenachrichtigungen -— +--- -# Langfristige Ziele +## Langfristige Ziele - minimale Angriffsfläche - vollständig dokumentierte Infrastruktur - automatisierte Sicherheitsüberwachung - reproduzierbare Konfiguration -- wartungsarme Architektur \ No newline at end of file +- wartungsarme Architektur diff --git a/VPS/services.md b/VPS/services.md index 52072d7..795f682 100644 --- a/VPS/services.md +++ b/VPS/services.md @@ -3,69 +3,69 @@ ## Reverse Proxy | Dienst | Beschreibung | -|—|—| +|---|---| | Nginx Proxy Manager | Öffentlicher Reverse Proxy | | authentik | Zentrale Authentifizierung | -— +--- ## Cloud / Produktivität | Dienst | Beschreibung | -|—|—| +|---|---| | Nextcloud | Cloud Plattform | | Collabora | Office Integration | | Vaultwarden | Passwortmanager | -— +--- ## Infrastruktur | Dienst | Beschreibung | -|—|—| +|---|---| | WireGuard | VPN | | CrowdSec | Angriffsschutz | | AdGuard Home | DNS | | Forgejo | Git Hosting | -— +--- ## Monitoring | Dienst | Beschreibung | -|—|—| +|---|---| | Netdata | Live Monitoring | | Uptime Kuma | Uptime Monitoring | -— +--- ## Kommunikation | Dienst | Beschreibung | -|—|—| +|---|---| | TeamSpeak | Voice Server | -— +--- -# SSO Status +## SSO Status | Dienst | SSO | -|—|—| +|---|---| | Nextcloud | aktiv | | Vaultwarden | aktiv | | Immich | aktiv | | Forgejo | geplant | | Matrix | geplant | -— +--- -# Bekannte Abhängigkeiten +## Bekannte Abhängigkeiten | Dienst | Abhängigkeit | -|—|—| +|---|---| | Nextcloud | MariaDB | | Nextcloud | Redis | | authentik | PostgreSQL | | authentik | Redis | | Collabora | Nextcloud | -| NPM | proxy Netzwerk | \ No newline at end of file +| NPM | proxy Netzwerk | diff --git a/VPS/wireguard.md b/VPS/wireguard.md index b68b146..11731a0 100644 --- a/VPS/wireguard.md +++ b/VPS/wireguard.md @@ -3,30 +3,33 @@ ## Allgemein Die VPS dient als zentraler WireGuard-Hub zwischen: + - VPS - Heimnetz - mobilen Clients - zusätzlichen Geräten Interface: + - wg0 Listening Port: + - 51820/UDP -— +--- -# VPN Netzwerk +## VPN Netzwerk -## WireGuard Subnetz +### WireGuard Subnetz ```text 10.100.0.0/24 ``` -— +--- -# Heimnetz Routing +## Heimnetz Routing Folgende Route wird über den Heimnetz-Peer bereitgestellt: @@ -36,12 +39,12 @@ Folgende Route wird über den Heimnetz-Peer bereitgestellt: Dadurch kann die VPS interne Dienste zuhause sicher erreichen. -— +--- -# Aktuelle Peers +## Aktuelle Peers | Peer | Allowed IPs | Beschreibung | -|—|—|—| +|---|---|---| | 10.100.0.4 | 10.100.0.4/32 | Client | | 10.100.0.6 | 10.100.0.6/32 | Client | | 10.100.0.55 | 10.100.0.55/32 | Client | @@ -51,24 +54,25 @@ Dadurch kann die VPS interne Dienste zuhause sicher erreichen. | 10.100.0.10 | 10.100.0.10/32 + 192.168.0.0/24 | Heimnetz Gateway | | 10.100.0.7 | 10.100.0.7/32 | Client | -— +--- -# Beobachtungen +## Beobachtungen -## Positiv +### Positiv - Saubere /32 Zuordnung pro Client - Heimnetz sauber über separaten Peer geroutet - Keine offensichtlichen Routing-Konflikte - Keepalive sauber konfiguriert -— +--- -# Verbesserungspotenzial +## Verbesserungspotenzial -## Dokumentation ergänzen +### Dokumentation ergänzen Aktuell fehlen: + - Gerätenamen - Zuordnung der Peers - Zweck einzelner Clients @@ -76,17 +80,17 @@ Aktuell fehlen: Empfehlung: | VPN IP | Gerät | Zweck | -|—|—|—| +|---|---|---| | 10.100.0.x | MacBook | Mobiler Zugriff | | 10.100.0.x | Unraid | Heimnetz Gateway | | ... | ... | ... | -— +--- -# Langfristige Ziele +## Langfristige Ziele - Vollständige Peer-Dokumentation - Backup der WireGuard-Konfiguration - Monitoring des VPN-Tunnels - Alerting bei Tunnel-Ausfall -- Optional QR-Code Archivierung \ No newline at end of file +- Optional QR-Code Archivierung