190 lines
10 KiB
Markdown
190 lines
10 KiB
Markdown
# 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.
|
|
Alle interaktiven Abfragen verwenden eine Dialogoberflaeche mit `whiptail`
|
|
oder alternativ `dialog`: LXC-Checkliste, Ja/Nein-Schaltflaechen, Eingabefelder
|
|
und verdeckte Felder fuer Schluessel und Passwoerter.
|
|
|
|
## Starten
|
|
|
|
Als root auf dem Proxmox-Host, nicht innerhalb eines LXC:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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.
|
|
|
|
## Bedienung der Dialoge
|
|
|
|
- **Pfeiltasten:** zwischen Containern oder Optionen wechseln.
|
|
- **Leertaste:** einen LXC markieren oder abwaehlen; mehrere sind moeglich.
|
|
- **Tab:** zwischen Liste/Eingabe und Schaltflaechen wechseln.
|
|
- **Enter:** die aktuelle Auswahl oder Schaltflaeche bestaetigen.
|
|
- **Abbrechen/Escape:** den Ablauf abbrechen. Beim Ja/Nein-Dialog bedeutet
|
|
**Nein** nur die Ablehnung dieser Einstellung; Escape bricht ab.
|
|
|
|
Die Checkliste zeigt CTID, Namen und vorhandene/fehlende Komponenten. Zunaechst
|
|
ist kein Container markiert. Vollstaendig installierte Container bleiben
|
|
ausgeblendet. Gespeicherte Ja/Nein-Vorgaben werden als Standard ausgewaehlt;
|
|
ein vorhandener SSH-Nutzername ist im Eingabefeld vorbelegt. Vor der Installation
|
|
erscheint eine Uebersicht der geplanten Aenderungen. `INSTALL` und gegebenenfalls
|
|
`NEUSTART` muessen weiterhin ausdruecklich eingetippt werden.
|
|
|
|
Wenn beide Dialogprogramme fehlen, `TERM=dumb` gesetzt oder das Terminal kleiner
|
|
als 60 Spalten / 16 Zeilen ist, verwendet das Skript die bisherige Texteingabe.
|
|
Es installiert dafuer keine Pakete auf dem Host. Fuer die Dialogoberflaeche bei
|
|
fehlendem Werkzeug auf dem Proxmox-Host einmal `apt-get install whiptail` nutzen.
|
|
`--select 'CTID CTID'` ueberspringt nur die Checkliste; die anderen Abfragen bleiben
|
|
Dialoge. `--list` bleibt eine reine Textausgabe ohne Abfragen.
|
|
|
|
### Nach einer unterbrochenen Tailscale-Anmeldung
|
|
|
|
Wenn Tailscale bereits installiert wurde, die erste Anmeldung aber scheiterte,
|
|
die aktuelle Datei erneut herunterladen und fuer den betroffenen Container starten:
|
|
|
|
```bash
|
|
bash /run/lxc-enroll.sh --resume-tailscale --select CTID
|
|
```
|
|
|
|
Dieser ausdrueckliche Wiederaufnahme-Modus meldet vorhandene Clients nur im
|
|
Zustand `NeedsLogin` oder `NoState` an. Clients im Zustand `Running` behalten
|
|
ihre Registrierung; andere Zustaende werden zur manuellen Pruefung gemeldet.
|
|
Tailscale wird nicht erneut installiert. Fehlendes Wazuh und die gewaehlte
|
|
SSH-Einrichtung folgen danach. Einstellungen koennen aus `.vars` geladen
|
|
werden; benoetigte Schluessel und Passwoerter werden erneut verdeckt abgefragt.
|
|
Vollstaendig installierte Container bleiben aus der normalen Auswahl ausgeblendet.
|
|
|
|
## Ablauf
|
|
|
|
1. Laufende Debian-/Ubuntu-LXCs mit systemd erkennen. Gestoppte, gesperrte und
|
|
nicht unterstuetzte Container werden uebersprungen.
|
|
2. Vollstaendig installierte Container aus der Auswahl ausblenden. Bei teilweise
|
|
installierten Containern nur die fehlende Komponente installieren.
|
|
3. 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.
|
|
4. LXCs in der Checkliste mit der Leertaste auswaehlen und bestaetigen.
|
|
Nur diese Container werden bearbeitet.
|
|
5. 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.
|
|
6. Installation mit `INSTALL` bestaetigen. Fehlender TUN-Zugriff wird separat
|
|
aufgelistet; erst nach Eingabe von `NEUSTART` werden diese Container sauber
|
|
heruntergefahren und neu gestartet. Bestehende Device-Slots bleiben erhalten.
|
|
7. 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.
|
|
8. 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:
|
|
|
|
```bash
|
|
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**:
|
|
|
|
```text
|
|
/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 ersetzt. Fuer noch
|
|
nicht angemeldetes Tailscale gibt es `--resume-tailscale`; andere Fehler,
|
|
insbesondere bei vorhandenen Wazuh-Agents, brauchen separate Reparatur.
|
|
- 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 `hold` gesetzt, 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.
|
|
- Bei Fehlern werden LXC, betroffener Schritt und Exitstatus ausgegeben. Worker-
|
|
Fehler nennen ausserdem die Skriptzeile, ohne Befehle oder Geheimnisse zu zeigen.
|
|
Auch ein Fehler beim abschliessenden Entfernen temporaerer Dateien markiert
|
|
den LXC als nicht abgeschlossen; vorher erfolgreiche Installationen bleiben
|
|
erhalten. Vor einer Reparatur daher zuerst den aktuellen Zustand pruefen.
|
|
|
|
## Quellen und Pruefung
|
|
|
|
- [Wazuh Linux-Deployment und Versionskompatibilitaet](https://documentation.wazuh.com/current/installation-guide/wazuh-agent/wazuh-agent-package-linux.html)
|
|
- [Tailscale in Proxmox-LXCs](https://tailscale.com/kb/1130/lxc-unprivileged/)
|
|
- [Headscale-Registrierung](https://headscale.net/stable/ref/registration/)
|
|
- [Tailscale SSH und Zugriffsregeln](https://tailscale.com/docs/features/tailscale-ssh)
|
|
|
|
Syntax und simulierte Auswahl-/Installationsablaeufe sind lokal geprueft,
|
|
einschliesslich Debian-Systemdaten und Wiederaufnahme nach fehlgeschlagener
|
|
Anmeldung. Ein echter Enrollment-Lauf samt Tailscale SSH wurde bestaetigt.
|
|
Die neue Dialogoberflaeche ist mit simulierten Dialogaufrufen geprueft;
|
|
Darstellung und Tastaturbedienung auf dem Proxmox-Terminal stehen noch aus.
|