Kali-Desktop in einem Proxmox LXC-Container

Kali-Desktop in einem Proxmox LXC-Container
Photo by Kevin Horvat / Unsplash

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:

Keine Suchergebnisse für Kali

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:

Root-Filesystem von Kali-Linux

Dieses File dient uns zur Erzeugung des LXC. Wir laden also das rootfs herunter und erstellen daraus einen Container:

Herunterladen des rootfs für Kali-Linux
Erstellen des Kali-Linux-Containers

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
Kali-Desktop über RDP :-)

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:

Kali-Desktop im Browser-Fenster

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.