Kali-Desktop in einem Proxmox LXC-Container
Container sind erstaunlich schlank. Doch leider haben sie keine grafische Oberfläche. Es gibt auch kein Kali-Linux CT-Template für Proxmox.
An einem dienstlichen Arbeitsplatz kann es hin und wieder erforderlich sein, Netzwerkprobleme zu analysieren. Und möglicherweise gestattet der Arbeitgeber die Installation von Tools nicht, mit denen dies möglich wäre. Vielleicht wird auch nur Windows gestattet, das durch den Firmenproxy auf das Internet zugreifen kann. So lassen sich selten z.B. DNS-Störungen, VoIP- oder TFTP Probleme untersuchen...
Ich werde hier an einem Beispiel beschreiben, wie es mir gelungen ist, einen Kali-Desktop im Browser zur Verfügung zu stellen.
Übersicht
Ich möchte aus dem Internet in einem normalen Browser ein voll funktionsfähiges Betriebssystem (Kali-Linux) nutzen. Als Hypervisor nutze ich wieder Proxmox und könnte hier entweder eine vollständige virtuelle Maschine erstellen oder einen Linux-Container (LXC). Container benötigen deutlich weniger Ressourcen als eine VM, da das LINUX ja bereits läuft.
Wir werden im späteren Verlauf die Vorteile deutlich erkennen können.
Das Problem
Unter Proxmox gibt es kein LXC Template für Kali-Linux:
Auf der Webseite https://images.linuxcontainers.org befindet sich eine Liste bekannter Images, in der Kali zu finden ist. Leider ist dies nur eine Liste ohne jeden Link.
Bau des Kali-Linux LXC
Hängt man jedoch /images/
an die obige URL, findet man einen Weg zu den Festplatten-Images und den zugehörigen Root-Filesystemen:
Dieses File dient uns zur Erzeugung des LXC. Wir laden also das rootfs herunter und erstellen daraus einen Container:
Vorbereiten des Systems
Holen wir zuerst ein paar nützliche Werkzeuge:
apt install wget inetutils-tools iputils-ping ssh man nano -y
Dann installieren wir die kali-defaults:
apt install kali-defaults zsh zsh-syntax-highlighting zsh-autosuggestions -y
Wir benötigen noch einen normalen User, den wir in die Gruppe der sudoers aufnehmen. Schließlich öffnen wir noch den ssh-Server nach außen:
adduser michael
usermod -aG sudo michael
systemctl enable --now ssh
Jetzt brauchen wir nur noch den Kali-Desktop unter XFCE4, den wir per RDP von außen erreichbar machen:
apt install kali-desktop-xfce xorg xrdp -y
systemctl enable --now xrdp
Das Problem
Wenn das nun alles durchgelaufen ist, haben wir ein Problem:
Ein LXC-Container erhält seine IP-Konfiguration aus der Proxmox Konfiguration des LXC. Kali installiert unglücklicherweise die IP-Verwaltung über das Paket network-manager. Damit sich die beiden nicht in die Quere kommen, müssen wir das Paket direkt wieder entfernen:
apt purge network-manager
Dabei werden natürlich auch die Module für die Konfiguration von VPNs etc. entfernt. Diese möchte ich sowieso nicht verwenden, da ich ja den Desktop im Browser haben möchte.
Jetzt räumen wir auf, installieren die eigentlichen Tools, die Kali ausmachen, und rebooten den Container:
apt update && apt upgrade -y
apt install kali-linux-default
apt purge network-manager
reboot
Wheee! Ein Desktop in einem LXC!
Testen des RDP Zugangs
Jetzt können wir direkt ausprobieren, ob der Desktop schon funktioniert:
xfreerdp /u:michael /dynamic-resolution /v:kali-jumphost
Sehr gut. Schritt 1 ist erfolgreich. Jetzt müssen wir diesen Container noch in einen Browser packen.
Zugriff aus dem Internet im Browser einrichten
Um per Browser auf ein System zuzugreifen, ist guacamole hervorragend geeignet. Also fügen wir dies unserem Webserver per docker-compose hinzu:
guacamole:
image: flcontainers/guacamole:latest
container_name: guacamole
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
volumes:
- "./guacamole:/config"
expose:
- 8080
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
networks:
- web
networks:
web:
external: true
Die Default-Zugangsdaten für Guacamole sind:
Username: guacadmin
Password: guacadmin
Das sollte man natürlich sofort ändern!
Im Anschluss müssen wir im Web-Config-Dialog noch den Kali-Desktop eintragen:
Und endlich können wir auf der Webseite auf die Verbindung klicken und haben unser Ziel erreicht: Den kompletten Kali-Desktop im Browser:
Und zum Abschluss noch die Frage, die wir eingangs stellten: Wie viele Ressourcen braucht jetzt eigentlich der Container?
Schauen wir einfach nach:
Unbeschreiblich! Das sind Werte, die ich bei VirtualBox oder VMware noch nie gesehen habe. Aber das ist eben der Unterschied zwischen einem Container und einer virtuellen Maschine...
Und ich kann den Container jetzt von überall erreichen. Vom Tablet ...
... und wenn es mal wirklich dringend erforderlich ist, sogar vom Smartphone:
Fazit
Die Nutzung dieses Containers via Browser gibt mir die volle Kontrolle über das System ohne die Sicherheit des Firmennetzes zu gefährden.
Darüber hinaus kann ich so auch einen vollständigen Desktop mit meinem Tablet oder Smartphone nutzen und Programme starten, die auf den mobilen Systemen selbst nicht vorhanden sind.