LXC Enrollment
Interaktives Skript fuer einen Proxmox-Host. Es installiert fehlende Tailscale- und Wazuh-Komponenten in ausgewaehlten LXCs, verbindet neue Tailscale-Clients mit Headscale und kann Tailscale SSH samt Linux-Nutzer und Sudo einrichten.
Starten
Als root auf dem Proxmox-Host, nicht innerhalb eines LXC:
curl --fail --silent --show-error --location \
https://code.faboi.cloud/fabio/lxc-enroll/raw/branch/main/lxc-enroll.sh \
-o /run/lxc-enroll.sh && bash /run/lxc-enroll.sh
Alternativ herunterladen und zuerst die Auswahl pruefen:
curl --fail --silent --show-error --location \
https://code.faboi.cloud/fabio/lxc-enroll/raw/branch/main/lxc-enroll.sh \
-o /run/lxc-enroll.sh
bash /run/lxc-enroll.sh --list
bash /run/lxc-enroll.sh
--list liest nur den aktuellen Bestand; --dry-run zeigt nach der Auswahl die
geplanten Aenderungen. Beide installieren nichts, starten nichts neu und speichern
keine Einstellungen. Fuer interaktive Eingaben muss ein Terminal vorhanden sein;
die Eingaben werden ueber /dev/tty gelesen, auch beim Start per curl.
Ablauf
- Laufende Debian-/Ubuntu-LXCs mit systemd erkennen. Gestoppte, gesperrte und nicht unterstuetzte Container werden uebersprungen.
- Vollstaendig installierte Container aus der Auswahl ausblenden. Bei teilweise installierten Containern nur die fehlende Komponente installieren.
- Vorherige Einstellungen auf Wunsch laden. Tailscale SSH ist beim ersten Lauf standardmaessig aktiviert. Linux-Nutzername, Sudo und optional passwortloses Sudo werden abgefragt. Es wird kein OpenSSH-Server installiert.
- CTIDs auswaehlen. Nur diese Container werden bearbeitet.
- Wazuh-Manager-Adresse und Headscale-HTTPS-URL abfragen. Falls genau ein laufender lokaler Wazuh-Manager gefunden wird, dessen Paketversion automatisch verwenden; andernfalls die exakte Manager-Paketversion abfragen. Bei einer Manager- Adresse als Hostname wird fuer neue Einstellungen die Uebernahme von Headscale-DNS/MagicDNS standardmaessig vorgeschlagen; sie wird separat abgefragt.
- Installation mit
INSTALLbestaetigen. Fehlender TUN-Zugriff wird separat aufgelistet; erst nach Eingabe vonNEUSTARTwerden diese Container sauber heruntergefahren und neu gestartet. Bestehende Device-Slots bleiben erhalten. - Headscale-Preauth-Key verdeckt abfragen. Fuer mehrere neue Clients einen wiederverwendbaren, kurz gueltigen, nicht-ephemeren Key verwenden. Kein Headscale-API-Key. Optionales Wazuh-Enrollment-Passwort ebenfalls verdeckt eingeben, falls der Manager es verlangt.
- Fehlende Pakete aus signierten offiziellen APT-Quellen installieren und die Verbindungen neuer Clients pruefen. Fehler werden pro LXC ausgewiesen.
Tailscale SSH und Sudo
Das Skript legt den gewaehlten Linux-Nutzer bei Bedarf an und aktiviert
tailscale set --ssh=true. Vorhandene Nutzer werden nicht geloescht und vorhandene
Passwoerter nicht ersetzt. Bei Wahl von Sudo wird der Nutzer zur Gruppe sudo
hinzugefuegt. Fuer neu angelegte Nutzer mit passwortpflichtigem Sudo wird ein
Passwort verdeckt abgefragt. Alternativ kann explizit passwortloses Sudo erlaubt
werden. Die Auswahl „kein Sudo“ entzieht keinem bestehenden Nutzer Rechte.
Damit die Anmeldung funktioniert, muss die aktive Headscale-Policy sowohl die
Netzwerkverbindung auf Port 22 als auch eine passende SSH-Regel fuer Quelle,
Ziel und Linux-Nutzer erlauben. Das Skript aendert die zentrale Policy nicht und
kann ohne einen echten Loginversuch keine SSH-Anmeldung bestaetigen. Bei
Headscale wird normalerweise eine passende SSH-Regel mit action: accept
verwendet; die Regel muss zu den tatsaechlichen Benutzern und Tags passen.
Nach Einrichtung von einem zugelassenen Geraet testen:
ssh LINUX_NUTZER@TAILSCALE_IP
Beim Aktivieren koennen vorhandene SSH-Sitzungen ueber die Tailscale-Adresse
unterbrochen werden. Die Containerkonsole bleibt der Zugang fuer diesen Lauf.
Weder Subnet-Routing noch Exit-Node, Tailscale-Operator oder privilegierte
Container werden eingerichtet. Headscale-DNS/MagicDNS wird ausdruecklich
abgefragt. Bei Zustimmung verwenden neue Clients --accept-dns=true; bei
vorhandenen Clients wird nur diese Einstellung aktiviert, ohne Neuanmeldung.
Bei Ablehnung behalten neue Clients lokales DNS bei (--accept-dns=false);
vorhandene Clients behalten ihre DNS-Einstellung. MagicDNS-Namen sind dann nur
verwendbar, wenn der bestehende Resolver sie aufloesen kann. Die Headscale-
DNS-Einstellungen muessen auch die benoetigten lokalen Namen aufloesen koennen.
Gespeicherte Einstellungen
Auf Wunsch speichert das Skript nur auf dem Proxmox-Host:
/etc/lxc-enroll/.vars
Diese Datei ist JSON, kein ausfuehrbares Shellskript. Verzeichnisrechte 700,
Dateirechte 600, Eigentuemer root. Gespeichert werden Manager-Adresse,
Agent-Paketversion, Headscale-URL, Tailscale-SSH-Auswahl, Nutzername und
Sudo- und MagicDNS-Einstellungen. Die CT-Auswahl wird jedes Mal neu getroffen. Headscale-Keys,
Enrollment- und Nutzerpasswoerter werden nicht gespeichert. Sie werden bei
Bedarf erneut abgefragt, in temporaeren Dateien mit Modus 600 uebertragen und
bei regulaerem Ende oder abgefangenem Abbruch entfernt. Ein harter Prozessabbruch
kann temporaere Dateien in /run/lxc-enroll.* hinterlassen; dann entfernen.
Grenzen und Wartung
- Unterstuetzt native APT-/systemd-Installationen in Debian und Ubuntu. Alpine, VMs, weitere Hosts und gestoppte Container sind nicht enthalten.
- Der Proxmox-Host selbst bekommt durch dieses Skript keinen Wazuh-Agent.
- Vorhandene Tailscale-/Wazuh-Registrierungen werden nicht veraendert. Bereits installierte, aber nicht verbundene Dienste muessen separat repariert werden. Ein fehlgeschlagener Enrollment-Versuch kann deshalb manuelle Reparatur brauchen.
- Ein Wazuh-Manager-LXC bekommt niemals zusaetzlich einen Wazuh-Agent; es kann bei fehlendem Tailscale fuer die Tailscale-Einrichtung ausgewaehlt werden.
- Die Manager-Adresse muss von den jeweiligen LXCs auf TCP 1514 und 1515 erreichbar sein. Eine Headscale-URL ist nicht automatisch die Manager-Adresse.
- Neue Wazuh-Agents werden auf die Manager-Paketversion installiert und danach
auf
holdgesetzt, damit sie den Manager nicht durch ein eigenstaendiges Upgrade ueberholen. Bei Manager-Upgrades die Agents bewusst mit aktualisieren. - Containerkonfigurationen werden vor TUN-Ergaenzungen unter
/var/backups/lxc-enroll/gesichert. Ein fehlgeschlagener sauberer Shutdown wird nicht durch gewaltsames Stoppen erzwungen. Installationen sind nicht transaktional; erfolgreiche Teilschritte bleiben bei einem spaeteren Fehler. - Enrollment allein konfiguriert keine Discord-Sicherheitsregeln und garantiert keine Erkennung aller Angriffe oder App-/Kernel-Schwachstellen.
Quellen und Pruefung
- Wazuh Linux-Deployment und Versionskompatibilitaet
- Tailscale in Proxmox-LXCs
- Headscale-Registrierung
- Tailscale SSH und Zugriffsregeln
Syntax und simulierte Auswahl-/Installationsablaeufe sind lokal geprueft. Ein echter Proxmox-Lauf und eine echte Tailscale-SSH-Anmeldung stehen noch aus.