Files
root 92148f41a7 Doku: tmux OSC-11-Leak (Windows Terminal) + pve2 SSH auf Horus.
Issue und Shared-Config für escape-time/O11-Fix; pve2-Keys in horus-root.pub.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 18:38:02 +02:00

64 lines
4.6 KiB
Markdown

# Horus — VPS (Contabo)
Öffentlicher VPS, **WireGuard-Hub** und Anwendungsserver. Stand: 2026-06-28 (per Dienst-Discovery erhoben).
| | |
|---|---|
| **Hostname** | `horus.jeanavril.com` |
| **Public IP** | `207.180.222.207` |
| **WireGuard-IP** | `10.1.1.1` (Hub für alle Peers) |
| **OS** | Debian 12 (bookworm) |
| **Provider** | Contabo (Zugang via Contabo-Weboberfläche → VNC) |
## Zugang
- **Wenn ein WG-Tunnel läuft:** `ssh jean@192.168.10.10` (VM 101) → `ssh root@10.1.1.1`
- **Wenn alle Tunnel tot sind:** über Public-IP `ssh root@207.180.222.207` — aber **SSH:22 ist per ufw nur über `wg0` offen**. Notfall: am Contabo-VNC `ufw allow ssh`, fixen, danach `ufw delete allow ssh`. VM 101 besitzt den Horus-SSH-Key.
- **ufw:** default deny incoming. Offen: `61951/udp` (WG), alles auf `wg0`, plus die unten gelisteten Dienst-Ports.
## WireGuard
- **Verwaltung: `wg-quick@wg0`** (systemd, enabled). **Es läuft KEIN wireguard-ui** (kein Prozess/Container/Port 5000) — die `wg0.conf` wurde nur *historisch* damit erzeugt.
- Server-Config: `/etc/wireguard/wg0.conf` (Header sagt „don't edit manually", aber maßgeblich ist, was `wg-quick` lädt → `wg show wg0` / `wg showconf wg0` ist die Wahrheit).
- Client-Keys/Configs: `/etc/wireguard/clients/<name>/` (je `client.conf`, `privatekey`, `publickey`, `presharedkey`), Backup unter `/etc/wireguard/bak/`. Repo-Kopien: [clients/](clients/).
- Listen-Port: `61951/udp`. PostUp/PostDown in `wg0.conf` sind **auskommentiert**; Forward/NAT über **UFW route** + Docker-MASQUERADE.
- **Internet-Gateway** für Road-Warrior-Clients (pixel7): [wireguard-internet-gateway.md](wireguard-internet-gateway.md) — UFW `wg0→eth0`, Client `AllowedIPs` inkl. `0.0.0.0/0`.
- **Site-to-Site** OPNsense/VM 101: kein Full-Tunnel — [../shared/horus-opnsense-wireguard/README.md](../shared/horus-opnsense-wireguard/README.md).
- **Peers sauber löschen** (ohne UI): `[Peer]`-Block aus `wg0.conf` entfernen **+** `clients/<name>/` löschen **+** `wg syncconf wg0 <(wg-quick strip wg0)` (oder `systemctl restart wg-quick@wg0`).
- Vorfall NAT/Port siehe [../issues/2026-06-28-vm101-horus-wireguard-nat.md](../issues/2026-06-28-vm101-horus-wireguard-nat.md).
## Dienste (Docker-Compose-Stacks)
Web-Apps liegen i.d.R. hinter **nginx-proxy-manager** (Ports 80/443).
| Stack | Verzeichnis | Zweck | Ports (extern) |
|-------|-------------|-------|----------------|
| **mailcowdockerized** | `/opt/mailcow` | Kompletter Mailserver (postfix, dovecot, rspamd, sogo, clamd, unbound, mysql, redis …) | 25, 465, 587, 110, 143, 993, 995, 4190; Web 8443/8880 |
| **infrastructure** | `/opt/infrastructure` | nginx-proxy-manager (Reverse Proxy) + MariaDB + watchtower | 80, 443; Admin `81` nur auf `10.1.1.1` (WG) |
| **sso** | `/opt/sso` | authentik (SSO / Identity Provider) + postgres + redis | 9000, 9443 |
| **bind9** (Container) | — | Autoritativer DNS | `207.180.222.207:53` tcp/udp |
| **collab** | `/opt/collab` | HedgeDoc (kollaborative Notizen) + postgres | hinter NPM |
| **files** | `/opt/files` | Caddy File-Server + filebrowser | hinter NPM |
| **kifin** | `/opt/projects/kifin` | App „ai-finance-simulations" | hinter NPM |
| **vectorseek** | `/opt/projects/vectorseek` | App (Port 3000) | hinter NPM |
| **website** | `/opt/website` | *gestoppt* (Exited vor ~15 Monaten) | — |
## Eigene systemd-Dienste
| Dienst | Zweck |
|--------|-------|
| `monitor-cert-changes.service` | `/usr/local/bin/monitor_cert_changes.sh` — überwacht Zertifikatsänderungen und startet Mailcow-Dienste neu (Teil der Cert-Automation, Certs kommen per rsync von VM 101). |
| `wg-quick@wg0.service` | WireGuard-Hub |
| `chrony`, `uptimed`, `docker`, `containerd` | Standard |
**Shell/Tmux:** `/root/.tmux.conf` — OSC-11-Leak-Fix (Windows Terminal + SSH): [../shared/tmux-windows-terminal-fix.md](../shared/tmux-windows-terminal-fix.md)
## Updates / Wartung
- **watchtower** (`/opt/infrastructure`): aktualisiert per `WATCHTOWER_LABEL_ENABLE=true` **nur** Container mit Label `com.centurylinklabs.watchtower.enable=true` (aktuell faktisch nur sich selbst). mailcow & Stacks sind bewusst ausgenommen.
- **mailcow**: hat **keine** Auto-Update-Automatik (kein cron/Timer). Updates **manuell/kontrolliert** via `cd /opt/mailcow && ./update.sh` (Multi-Container-Stack mit Migrationen — watchtower darf das nicht, würde nur Images blind tauschen).
## Bekannte Probleme / Historie
-**2026-06-28: watchtower crash-loop behoben**`containrrr/watchtower:latest` pinnt intern Docker-API `1.25` (Daemon verlangt min `1.40`). Fix: `DOCKER_API_VERSION=1.40` in der watchtower-`environment` (in `/opt/infrastructure/docker-compose.yml`). Läuft seitdem sauber als „Watchtower 1.7.1".