[!ABSTRACT] Vorbereitung

  • Tailscale: Auth-Key im Admin-Panel generieren (Einweg-Key, kein Ephemeral).

  • SSH-Key: Sicherstellen, dass dein Public Key bereitliegt.

  • Netcup SCP: Debian 12 NetISO mounten und Server von ISO starten.


🏗️ Phase 1: Die Installation (NetISO)

Dieser Teil findet in der VNC-Konsole im Netcup SCP statt.

  • Sprache/Region: Deutsch / UTF-8.

  • Netzwerk: Hostname auf vps-server (oder Wunschname) setzen.

  • Partitionierung (Manuell):

    • Partitionstabelle auf GPT eingestellt (nicht MBR/MSDOS)?

    • EFI-Partition als FAT32 formatiert?

      • Mountpoint /boot/efi zugewiesen?
    • /boot | 1 GB | ext4

    • swap | 8 GB | swap

    • /home | 10 GB | ext4

    • / (root) | Rest | ext4

  • Software-Auswahl: Nur "Standard-Systemwerkzeuge" und "SSH-Server". KEIN Desktop/Gnome/KDE!



🛠️ Phase 2: Post-Install Script (Der "Goldene" Start)

Sobald das System installiert ist und du per SSH (Port 22) oder VNC drauf bist:

  • Script hochladen/erstellen: nano setup.sh (Inhalt siehe vorherige Nachricht).

  • Key einfügen: Tailscale Auth-Key im Script eintragen.

  • Ausführen: chmod +x setup.sh && ./setup.sh.

  • Check: Läuft Tailscale? (tailscale status).

  • System-Reboot: reboot.


🏰 Phase 3: HestiaCP Installation

Logge dich jetzt als dein neuer User USER über den neuen Port 52222 ein.

  • Hestia-Download:

    TXT
    wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh
    
  • Installation starten: (Befehl mit --api no und deinem Passwort nutzen).

  • Warten: Die Installation dauert ca. 10–15 Minuten.

  • Panel-Check: Login unter https://deine-ip:8083 prüfen.

📝 Zusammenfassung für dein Obsidian (Checkliste User-Setup)

  • Debian User: USER (SSH, Sudo, ZSH)

  • Hestia Admin: admin (Nur für Panel-Updates und User-Verwaltung)

  • Hestia Web-User: EXAMPLE.TLD (Domains, EXAMPLE.TLD)

  • Hestia Web-User: data.EXAMPLE.TLD (Domains, data.EXAMPLE.TLD)

  • Hestia Web-User: wiki.EXAMPLE.TLD (Domains, wiki.EXAMPLE.TLD)

  • [ ] Hestia Web-User: forum.EXAMPLE.TLD (Domains, forum.EXAMPLE.TLD)

🛡️ Phase 4: Sicherheits-Feinschliff (Gemini-CLI Audit)

Jetzt setzen wir die Empfehlungen aus der Log-Analyse um.

  • Fail2Ban Recidive: jail.local anpassen (Bantime 1w).

  • Nginx-Jail: nginx-noscript hinzufügen, um Vulnerability-Scanner sofort zu bannen.

  • MySQL Binding: Prüfen, ob bind-address = 127.0.0.1 in der MariaDB Config steht.

  • SSH-Härtung: In /etc/ssh/sshd_config sicherstellen: PasswordAuthentication no.


📡 Phase 5: Mosquitto & MQTT

  • Installation: apt install mosquitto mosquitto-clients.

  • User-Anlage: mosquitto_passwd -c /etc/mosquitto/passwd USER.

  • Websocket-Proxy: Nginx-Template in HestiaCP erstellen (wie in deiner Anleitung).

  • Firewall: Port 1883 in der Hestia-Firewall schließen (nur 443/WSS offen lassen).


🏁 Phase 6: Finaler Test & Backup

  • Port-Scan: Von außen prüfen, ob nur Port 80, 443, 8083 und 52222 offen sind.

  • Tailscale-Test: Login über die Tailscale-IP versuchen.

  • Hestia-Backup: Einen ersten manuellen Backup-Job in Hestia für den User admin starten.

  • Obsidian-Log: Alle Passwörter, Keys und Fingerprints in deinem Vault speichern.


💡 Ein letzter Profi-Tipp für die Partitionen:

Solltest du dich während der Installation umentscheiden: Behalte die 8GB Swap bei. Siemens-Software (falls du später Siemens-spezifische Web-Tools oder Datenbanken auf dem Server nutzt) und Hestia-Backups neigen dazu, den RAM kurzzeitig massiv zu fluten. Ohne Swap stürzt dein ganzer Server in diesem Moment ab.

[!SUCCESS] Fertig! Wenn du diese Liste abgearbeitet hast, hast du einen der sichersten und am besten konfigurierten Debian-Server im Netcup-Netz stehen.

Ein kleiner Tipp für den MQTT-Logger:

Da dein Logger nun unter /home/web/scripts/ liegen wird, sieht dein Systemd-Service (Autostart) so aus:

TXT

[Unit]
Description=MQTT to MariaDB Logger
After=network.target mariadb.service

[Service]
Type=simple
User=web
Group=web
WorkingDirectory=/home/web/scripts/mqtt-to-mariadb-logger
ExecStart=/usr/bin/python3 /home/web/scripts/mqtt-to-mariadb-logger/mqtt_to_mariadb.py
Restart=always

[Install]
WantedBy=multi-user.target

Bist du bereit für den Neustart? Wenn du den Befehl zum Umbenennen beim Restore nutzt, hast du die sauberste Konfiguration, die möglich ist!