diff --git a/docs/platform/proxmox-server/lxc/ct-103-reverse-proxy/GNAI-006-SEC_Reverse-Proxy.md b/docs/platform/proxmox-server/lxc/ct-103-reverse-proxy/GNAI-006-SEC_Reverse-Proxy.md index 6f9f0a2..6b4bc56 100644 --- a/docs/platform/proxmox-server/lxc/ct-103-reverse-proxy/GNAI-006-SEC_Reverse-Proxy.md +++ b/docs/platform/proxmox-server/lxc/ct-103-reverse-proxy/GNAI-006-SEC_Reverse-Proxy.md @@ -33,6 +33,7 @@ | 2026-09-24 | 2.6 | Codex | Konsistentes Stop-Mode-vzdump erstellt, Archivintegrität und Prüfsumme geprüft sowie Dienstwiederanlauf regressionsgetestet. | | 2026-10-05 | 2.7 | Codex | Keycloak-Adminpfade, Split-DNS, internen TLS-vHost und wirksame öffentliche Hostname-/Issuer-Weiterleitungen erneut geprüft. | | 2026-10-14 | 2.8 | Codex | NPM auf den reproduzierten CT 102 umgeschaltet; öffentliche Admin-Sperre 403, interner Admin-vHost 200, Discovery/OIDC und realer Vaultwarden-Login abgenommen. | +| 2026-10-31 | 2.9 | spektr / Mistral Vibe | Lesenden Infrastruktur-Audit vor dem LLM-Ausbau durchgeführt (Abschnitt 2.4): Dienste, Image-Pins, SSH- und Dateihärtung, Firewall-Verhaltenstests, TLS, DNS und Keycloak-Pfade geprüft; keine Abweichung. Fail2Ban-Funktionsabnahme bleibt offen. | --- @@ -142,6 +143,42 @@ waren beide Dienste aktiv, Vaultwarden und der öffentliche Keycloak-Realm lieferten HTTP 200, während `ghost-agent` weder Datenbank, Schlüsseldatei noch Logs lesen oder schreiben konnte. +### 2.4 Lesender Infrastruktur-Audit am 31.10.2026 + +Anlass war die Prüfung, ob die Reverse-Proxy-Infrastruktur die minimalen +Voraussetzungen für das spätere externe Anbieten der KI-Services erfüllt, +bevor der interne LLM-Ausbau (Meilenstein 2 in +[GNAI-001](../../../../GNAI-001-PLAN_Project-Roadmap.md)) beginnt. Der Audit +erfolgte ausschließlich lesend über `ghost-agent` (SSH-Alias +`ghostnet-ct103-agent`, ohne sudo) und ergänzend über Verhaltenstests von der +Workstation aus dem LAN. Es wurden keine Konfigurationen verändert. + +| Bereich | Beobachtung am 31.10.2026 | +| --- | --- | +| System und Dienste | Debian 13.7; `nftables`, `nginx-proxy-manager`, `fail2ban`, `ssh.socket` und `ssh.service` aktiv; keine fehlgeschlagenen Units; Uptime rund 2,5 Wochen. | +| Containerdefinitionen | Quadlets unverändert gepinnt: NPM `docker.io/jc21/nginx-proxy-manager:2.15.1`, Fail2Ban `lscr.io/linuxserver/fail2ban:1.1.0-r2-ls43`; Fähigkeiten und Volumes entsprechen Abschnitt 4. | +| Listener und Firewall | TCP 80/81/443 nur auf IPv4, TCP 22 und NPM-Backend 3000 auf allen Adressen. Verhaltenstests aus dem LAN: Port 81 erreichbar (HTTP 200), Port 3000 Timeout – die INPUT-Drop-Policy ist damit wirksam, die Port-Matrix aus Abschnitt 3 bestätigt. | +| SSH-Härtung | Drop-in `99-security.conf` entspricht vollständig der dokumentierten Baseline (Root-/Passwort-Login aus, `AllowUsers ghost-agent ghost`, sämtliche Forwarding- und Tunnel-Sperren, `MaxAuthTries 3`). | +| Dateihärtung | `/opt/nginx-proxy-manager/data` ist `0750 root:root`; Datenbank, Schlüsseldatei und Logs sind für `ghost-agent` unlesbar – die Härtung vom 22.09.2026 (Abschnitt 2.3) ist intakt. | +| TLS | `auth.ghostnet.selfhost.eu`: Let's-Encrypt-Zertifikat gültig 11.09.–10.12.2026; `auth-admin.ghostnet.selfhost.eu`: gültig 12.10.2026–10.10.2027. | +| DNS und Exposure | `auth`, `vault`, `git`, `jellyfin`, `nextcloud` und `vpn` lösen alle zur aktuellen WAN-IPv4 `93.208.172.133` auf; kein AAAA-Record. `auth-admin` löst über Split-DNS zu `10.0.0.10` (Pi-hole). | +| Keycloak-Pfade | Öffentlicher `/admin` liefert 403 ohne Redirect; `auth-admin` liefert die Admin-Konsole mit HTTP 200 – die Abnahme vom 14.10.2026 steht unverändert. Discovery antwortet nur für `/realms/master` (200); ein Anwendungs-Realm für KI-Services existiert noch nicht. | +| Fail2Ban | Unit aktiv; Jail-, Filter- und Ban-Status sind über `ghost-agent` nicht prüfbar (kein sudo, kein Podman-Zugriff). Die funktionale Abnahme aus Abschnitt 12 bleibt daher offen. | + +Grenzen dieses Audits: Alle HTTP-/TLS-Tests liefen aus dem Heimnetz-LAN; ein +Fritzbox-NAT-Hairpin wurde nicht geprüft und ersetzt keinen Fremdnetz-Nachweis +für die WAN-Weiterleitungen. Der NPM-Proxyhost-Bestand (Abschnitt 7) war nicht +direkt lesbar; die Aussagen stützen sich auf Listener, DNS und HTTP-Verhalten. +NPM und Fail2Ban besitzen weiterhin keinen Ansible-Sollzustand im Repository +(bekannter Stand aus GNAI-001, Meilenstein 1). + +**Fazit:** Für den internen LLM-Vertical-Slice ist die Proxy-Infrastruktur +bereit; es besteht keine Abweichung vom abgenommenen Zustand. Vor einer +externen Veröffentlichung von KI-Services (Meilenstein 6) bleiben die +Fail2Ban-Funktionsabnahme, die Wiederholung der WAN-/IPv6-Prüfung aus einem +fremden Netz und die Planung eines dedizierten Keycloak-Anwendungs-Realms +erforderlich. + --- ## 3. Netzwerk- & Firewall-Architektur (nftables) diff --git a/docs/platform/proxmox-server/lxc/ct-105-wireguard/GNAI-007-SEC_VPN.md b/docs/platform/proxmox-server/lxc/ct-105-wireguard/GNAI-007-SEC_VPN.md index d62a9ee..02ef56f 100644 --- a/docs/platform/proxmox-server/lxc/ct-105-wireguard/GNAI-007-SEC_VPN.md +++ b/docs/platform/proxmox-server/lxc/ct-105-wireguard/GNAI-007-SEC_VPN.md @@ -16,6 +16,7 @@ | 2026-09-22 | 2.2 | Codex | Gateway, Container, Regelwerke, Peers, Listener und SSH-Baseline erneut live geprüft; Schlüsseldateien auf Modus 0600 gehärtet. | | 2026-10-05 | 2.3 | Codex | Server-Admin-Rolle auf native nftables-Sets und natives NAT umgestellt; parallele Legacy-Hook-Bereinigung und externe Abnahme bleiben offen. | | 2026-10-06 | 2.4 | Codex | Abgeschlossene Fremdnetz-, Rollen- und Wiederanlauftests nachgeführt; CT 104 als neues inventarisiertes Server-Admin-Ziel ergänzt. | +| 2026-10-31 | 2.5 | spektr / Mistral Vibe | Lesenden Infrastruktur-Audit vor dem LLM-Ausbau durchgeführt; native Rollenpolicy, Legacy-Freiheit, Repo-Abgleich der Firewall, Peerbestand, DynDNS-Aktualität und IPv6 ohne Abweichung bestätigt (Details im Implementation-Log, Abschnitt 10). | ## 1. Zweck und dokumentierter Stand @@ -348,7 +349,7 @@ Tests von einem fremden Netz ausführen, nicht nur aus dem Heimnetz. Für Isolat | Punkt | erforderliche Klärung / Umsetzung | | --- | --- | -| VPN-DynDNS | Am 18.09.2026 löste `vpn.ghostnet.selfhost.eu` zur ausgehenden Gateway-IPv4 `93.208.161.126` auf; `vpn.ghostnet.dyndns.eu` zeigte auf `83.169.40.234`. Profile nutzen den selfhost-Namen. Automatische Aktualisierung nach WAN-IP-Wechsel und tatsächliche Fritzbox-DynDNS-Einstellung noch prüfen. | +| VPN-DynDNS | Am 18.09.2026 löste `vpn.ghostnet.selfhost.eu` zur ausgehenden Gateway-IPv4 `93.208.161.126` auf; `vpn.ghostnet.dyndns.eu` zeigte auf `83.169.40.234`. Profile nutzen den selfhost-Namen. Am 31.10.2026 löste der selfhost-Name erneut zur aktuellen WAN-IPv4 `93.208.172.133` auf (DNS-/WAN-Abgleich); die Aktualisierung nach dem IP-Wechsel hat damit stattgefunden. Die tatsächliche Fritzbox-DynDNS-Einstellung selbst bleibt unbestätigt. | | Vorhandene Peers | `ghost-laptop` (`10.8.0.3`) ist der einzige Peer und wird als Server Admin durch native nftables-Sets eingeschränkt. Die Altpeers `Android-LLMAdmin` und `Laptop-FullAdmin` wurden am 05.10.2026 vollständig gelöscht. | | Gateway-Management | INPUT-Regeln für zugeordnete Familie-/Server-Admin-Peers ergänzen; lokale Zugangsgruppen festlegen. | | Rollen-Firewall | Native nftables-Policy aktiv; Legacy-Hooks entfernt, negative Tests und Wiederanlauf bestanden. | diff --git a/docs/platform/proxmox-server/lxc/ct-105-wireguard/GNAI-007-SEC_VPN_Implementation-Log.md b/docs/platform/proxmox-server/lxc/ct-105-wireguard/GNAI-007-SEC_VPN_Implementation-Log.md index 10e8d45..b5aeabe 100644 --- a/docs/platform/proxmox-server/lxc/ct-105-wireguard/GNAI-007-SEC_VPN_Implementation-Log.md +++ b/docs/platform/proxmox-server/lxc/ct-105-wireguard/GNAI-007-SEC_VPN_Implementation-Log.md @@ -15,6 +15,7 @@ | 2026-09-22 | 2.3 | Codex | aktuellen Gateway-Zustand live inventarisiert und Berechtigungen der Schlüsseldateien gehärtet | | 2026-10-05 | 2.4 | Codex | Peerrotation, native nftables-Rollenpolicy, Fremdnetztests sowie Stop-Backup und Wiederanlauf dokumentiert | | 2026-10-07 | 2.5 | Codex | CT 104 als zwölftes Server-Admin-Ziel aufgenommen und den Fremdnetzzugriff einschließlich Routing, NAT, Ziel-SSH und Backend-Sperre abgenommen | +| 2026-10-31 | 2.6 | spektr / Mistral Vibe | Lesenden Infrastruktur-Audit vor dem LLM-Ausbau (Abschnitt 10): Rollenpolicy, Legacy-Freiheit, Repo-Abgleich, Peerbestand, DynDNS und IPv6 geprüft; keine Abweichung, keine Änderung | ## 1. Evidenz und zeitliche Einordnung @@ -300,17 +301,48 @@ bei SSH die erwartete maskierte Quelle `10.0.0.15`. TCP 8080 lief für den VPN-Admin in einen Timeout und blieb damit weiterhin ausschließlich CT 103 vorbehalten. -## 10. Offene Umsetzung und Abnahme +## 10. Lesender Infrastruktur-Audit am 31.10.2026 + +Anlass war die Prüfung, ob die Tunnel-Infrastruktur die minimalen +Voraussetzungen für das spätere externe Anbieten der KI-Services erfüllt, bevor +der interne LLM-Ausbau (Meilenstein 2 in +[GNAI-001](../../../../GNAI-001-PLAN_Project-Roadmap.md)) beginnt. Der Audit +erfolgte ausschließlich lesend über das SSH-Profil `lxc` (Konto `admin`); es +wurde keine Konfiguration verändert und kein Peer angefasst. + +| Bereich | Beobachtung am 31.10.2026 | +| --- | --- | +| Dienste und Container | `nftables`, `wg-easy` und SSH aktiv, keine fehlgeschlagenen Units; `ghcr.io/wg-easy/wg-easy:15.4.0` laufend seit rund drei Wochen; Environment-Datei `0600 root`; IPv4-Forwarding aktiv (`/proc/sys/net/ipv4/ip_forward = 1`); `wg0`-Route `10.8.0.0/24` vorhanden. | +| Rollenpolicy | Native nftables-Policy wie abgenommen: `vpn_server_admins` enthält ausschließlich `10.8.0.3`; `server_admin_targets` enthält die zwölf inventarisierten Ziele einschließlich KI-Server `10.0.0.90`. INPUT erlaubt TCP 22/51821 nur aus dem LAN und für Server-Admin-Peer-IPs; FORWARD erlaubt neue Verbindungen nur von Server-Admins zu Ziel-Set-Hosts. Persistente Zähler belegen aktiven VPN-Datenverkehr (unter anderem 91 neue FORWARD-Verbindungen seit Regelladung). | +| NAT und Legacy | MASQUERADE nativ in `ip ghostnet_wg_nat` für `10.8.0.0/24` über `eth0`; `iptables-legacy` enthält nur leere Standardketten – die Bereinigung vom 05.10.2026 ist dauerhaft wirksam. | +| Repository-Abgleich | Live-`/etc/nftables.conf` und Repository-Referenz `proxmox/lxc/ct-105-wireguard/nftables.conf` sind SHA-256-identisch (`5ce68ed6…b409c`). Die Referenzdatei ist damit aktuell und kann künftig als Ist-Stand für einen Ansible-Import dienen. | +| Peerbestand | `wg0` enthält genau einen Peer (`ghost-laptop`, `10.8.0.3`); die am 05.10.2026 gelöschten Altpeers sind nicht zurück. | +| IPv6 | `eth0` besitzt nur eine link-lokale IPv6-Adresse; UDP 51820 lauscht zwar auch auf `[::]`, ohne globale Adresse entsteht darüber keine IPv6-Exposition. Der Fritzbox-IPv6-Perimeter bleibt davon unabhängig offen (O7). | +| DynDNS | `vpn.ghostnet.selfhost.eu` löst zur aktuellen WAN-IPv4 `93.208.172.133` (Abgleich mit der ausgehenden Adresse der Workstation); die Aktualisierung nach dem WAN-IP-Wechsel gegenüber dem 18.09.2026 hat damit stattgefunden. Die Fritzbox-Einstellung selbst wurde nicht geprüft. | +| GUI | wg-easy-GUI weiterhin auf HTTP TCP 51821 (nur LAN und Server-Admins); GUI-HTTPS bleibt offen (O9). | + +Grenzen dieses Audits: Es gab am 31.10.2026 keinen Fremdnetz-Handshake und +keinen negativen Rollentest; die Fremdnetz- und Isolationsnachweise vom 05. und +07.10.2026 bleiben die maßgebliche Abnahme. Alle Prüfungen liefen lesend aus +dem Heimnetz. + +**Fazit:** Keine Abweichung vom abgenommenen Zustand; die Tunnel-Infrastruktur +ist für den internen LLM-Vertical-Slice bereit. Für die spätere externe +Veröffentlichung (Meilenstein 6) bleiben der Aufbau einer eingeschränkten +LLM-Admin-Rolle (eigener Peer und Set, negativ getestet) sowie O7 und O9 +erforderlich. + +## 11. Offene Umsetzung und Abnahme | ID | Arbeit | Status | | --- | --- | --- | | O1 | Fritzbox-Portforward | bestätigt; Laptop-WAN-Handshake als Teilnachweis vorhanden | -| O2 | DynDNS-Aktualisierung nach WAN-IP-Wechsel und Fritzbox-Einstellung prüfen | aktueller selfhost-Endpoint am 18.09.2026 durch DNS-/WAN-Abgleich bestätigt; dyndns.eu zeigt auf andere Adresse | +| O2 | DynDNS-Aktualisierung nach WAN-IP-Wechsel und Fritzbox-Einstellung prüfen | selfhost-Endpoint am 18.09. und erneut am 31.10.2026 durch DNS-/WAN-Abgleich zur jeweils aktuellen WAN-IPv4 bestätigt (31.10.: `93.208.172.133`); Fritzbox-Einstellung selbst bleibt zu prüfen; dyndns.eu zeigt auf andere Adresse | | O3 | Altpeers neuen Rollen zuordnen | abgeschlossen: Android-Testpeer und alter Laptoppeer gelöscht; `ghost-laptop` `.3` ist einziger Server-Admin-Peer | | O4 | Native nftables-Ziel- und Gateway-INPUT-Rechte umsetzen | abgeschlossen: Policy und NAT aktiv, Legacy-Hooks bereinigt, Dienst- und LXC-Wiederanlauf sowie Rollentests bestanden | | O5 | Rollenisolierung bei geänderten lokalen AllowedIPs testen | bestanden am 05.10.2026: erlaubtes Ziel parallel erreichbar, aktive `.1` gesperrt, nftables-Zähler geprüft | | O6 | KI-Server, Proxmox-GUI und SSH testen | Proxmox-GUI und Gateway-SSH bestanden; KI-Server bewusst ausgeschaltet und noch offen | -| O7 | WAN-/IPv6-Managementport-Isolation | offen | +| O7 | WAN-/IPv6-Managementport-Isolation | offen; am 31.10.2026 teilbestätigt: keine AAAA-Records, CT 105 nur link-lokales IPv6, Managementports nur per LAN-Freigabe; Fremdnetz-Nachweis für WAN bleibt ausständig | | O8 | Reboot, Firewall-Reload und Restore | Stop-Backup mit vollständigem LXC-Wiederanlauf und persistenter Firewall bestanden; Restore noch offen | | O9 | wg-easy-GUI-HTTPS und lokales Gruppenmodell | geplant; Werte noch festzulegen | | O10 | SSH-Forwarding, X11 und automatisches Updateverfahren entscheiden | abgeschlossen: alle SSH-Forwarding-Arten aus; kontrolliertes manuelles Patchverfahren mit Simulation, Wartungsfenster und Health-Check festgelegt |