Kali Linux v Proxmoxu jako Docker kontejner: instalace, noVNC a zabezpečení

Kali Linux v Proxmoxu jako Docker kontejner (linuxserver/kali-linux): instalace, noVNC a zabezpečení heslem

Kali Linux v Proxmoxu jako Docker kontejner (linuxserver/kali-linux)

Kompletní návod pro lab: Proxmox VM + Docker + Kali GUI přes noVNC, včetně praktických metod zabezpečení (heslo, bind na localhost, firewall, VPN, reverse proxy).

Proxmox VE Docker linuxserver/kali-linux noVNC Docker Compose Zabezpečení

Co přesně nasazujeme a proč to běží jako VM

Image linuxserver/kali-linux poskytuje Kali Linux s grafickým prostředím, které je dostupné přes web (noVNC). V Proxmoxu je nejpraktičtější spustit Docker uvnitř virtuálního stroje (Ubuntu/Debian), protože to zjednoduší izolaci a vyhneš se typickým limitům LXC (AppArmor/privileged kontejnery, jemnosti s kernel capabilities).

Doporučená architektura:
Proxmox VE → VM (Ubuntu/Debian) → Docker → linuxserver/kali-linux (noVNC GUI)

Předpoklady

  • Proxmox VE s funkční sítí (bridge vmbr0, DHCP nebo statika)
  • VM: Ubuntu Server 24.04 / 22.04 nebo Debian 12
  • Doporučení: 2–4 vCPU, 4–8 GB RAM, disk 40+ GB
  • Přístup do VM jako root nebo uživatel se sudo
Bezpečnostní poznámka: noVNC je vhodné primárně pro lab v LAN. Pokud plánuješ vzdálený přístup, řeš to přes VPN / SSH tunel / reverse proxy s HTTPS (viz níže).

Instalace Dockeru a Docker Compose

1) Aktualizace systému

bashAktualizace
apt update && apt upgrade -y

2) Instalace Dockeru (rychlá a spolehlivá varianta přes APT)

bashDocker + Compose plugin
apt install -y docker.io docker-compose-plugin
systemctl enable --now docker

3) Ověření instalace

bashTest Dockeru
docker --version
docker compose version
docker run --rm hello-world

Poznámka: Pokud ti nešel přístup na get.docker.com, příčinou bývá DNS / firewall / NAT. APT instalace výše je nejrychlejší cesta, jak pokračovat.

Docker Compose (docker-compose.yml)

Vytvoříme si čistý adresář pro projekt a do něj vložíme compose konfiguraci.

1) Příprava adresářů

bashAdresáře
mkdir -p /opt/docker/kali
mkdir -p /opt/kali/config
cd /opt/docker/kali

2) Vytvoření docker-compose.yml

bashEditor
nano docker-compose.yml

Vlož tento obsah (základní, funkční konfigurace):

yamldocker-compose.yml
services:
  kali:
    image: linuxserver/kali-linux
    container_name: kali
    security_opt:
      - seccomp=unconfined
    environment:
      PUID: "1000"
      PGID: "1000"
      TZ: "Europe/Prague"
    ports:
      - "3000:3000"
      - "3001:3001"
    volumes:
      - /opt/kali/config:/config
    restart: unless-stopped
Důležité: Do docker-compose.yml nepatří příkazy typu docker run .... YAML soubor je čistě konfigurace.

Spuštění a ověření

1) Spuštění na pozadí

bashStart
cd /opt/docker/kali
docker compose up -d

2) Kontrola běhu a logů

bashKontrola
docker ps
docker logs -n 80 kali

3) IP adresa VM (rychle a bez ifconfig)

bashIP
ip -4 addr
ip route
hostname -I

Přístup do GUI (noVNC)

V prohlížeči otevři:

http://IP_TVÉ_VM:3000

Pokud se GUI nenačte, zkontroluj firewall a zda kontejner skutečně běží (docker ps).

Zabezpečení: heslo + další metody

Realisticky: noVNC porty 3000/3001 nepublikuj do internetu bez VPN / HTTPS reverse proxy. Heslo je jen jedna vrstva.

Metoda 1: Heslo přes USERNAME/PASSWORD (pokud se inicializuje správně)

Tato metoda přidá Basic Auth před noVNC. U části image se projeví hlavně při prvním startu s čistým /config.

yamlCompose s heslem
services:
  kali:
    image: linuxserver/kali-linux
    container_name: kali
    security_opt:
      - seccomp=unconfined
    environment:
      PUID: "1000"
      PGID: "1000"
      TZ: "Europe/Prague"
      USERNAME: "kali"
      PASSWORD: "ZDE_DEJ_SILNE_HESLO"
    ports:
      - "3000:3000"
      - "3001:3001"
    volumes:
      - /opt/kali/config:/config
    restart: unless-stopped

Pokud se přihlášení nedaří: udělej čistou inicializaci – smaž konfiguraci a kontejner znovu vytvoř.

bashReset /config (pozor: smaže nastavení)
cd /opt/docker/kali
docker compose down
rm -rf /opt/kali/config
mkdir -p /opt/kali/config
docker compose up -d

Metoda 2: Ruční Basic Auth (spolehlivé, když env auth selže)

Pokud automatické nastavení nefunguje, je profesionální cesta vytvořit .htpasswd ručně (uvnitř kontejneru nebo v persistentním /config).

bashVytvoření .htpasswd
docker exec -it kali bash
apt update
apt install -y apache2-utils
mkdir -p /config/nginx
htpasswd -c /config/nginx/.htpasswd kali
exit
docker restart kali

Ověření, že je Basic Auth aktivní:

bashTest 401 Unauthorized
curl -I http://127.0.0.1:3000

Metoda 3: Bind pouze na localhost (nejrychlejší „hardening“)

Pokud chceš, aby GUI bylo dostupné jen z VM (nebo přes SSH tunel), uprav port mapping na 127.0.0.1.

yamlPort jen na localhost
ports:
  - "127.0.0.1:3000:3000"
  - "127.0.0.1:3001:3001"

Následně restart:

bashRestart
cd /opt/docker/kali
docker compose down
docker compose up -d

Metoda 4: SSH tunel (bezpečný vzdálený přístup bez otevírání portů)

Porty necháš lokální, a na svém PC si uděláš tunel přes SSH:

bashSSH tunnel (spusť na svém PC)
ssh -L 3000:localhost:3000 root@IP_VM
Pak otevři v prohlížeči: http://localhost:3000

Metoda 5: Firewall (UFW) – povol jen LAN nebo konkrétní IP

Pokud porty vystavuješ do LAN, omez je firewall pravidly.

bashUFW – povolit jen z konkrétní IP
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing

# Povol přístup jen z tvého PC (nahraď IP)
ufw allow from 10.0.1.10 to any port 3000 proto tcp
ufw allow from 10.0.1.10 to any port 3001 proto tcp

ufw enable
ufw status verbose

Metoda 6: VPN (Tailscale/WireGuard) – nejlepší pro přístup zvenku

Pro vzdálený přístup je nejlepší nevystavovat noVNC porty vůbec a připojit se přes VPN. Typicky: Tailscale/WireGuard → přístup na http://IP_VPN:3000.

Pokud chceš, napíšu ti navazující článek „Tailscale pro Proxmox lab“, včetně bezpečného publikování jen přes tailnet.

Metoda 7: Reverse proxy + HTTPS + autentizace (produkční styl)

Pokud už máš Nginx Proxy Manager / Nginx, uděláš TLS a autentizaci v proxy. Princip: proxy → kali:3000, TLS certifikát (Let’s Encrypt), případně Basic Auth na proxy vrstvě.

Tohle je nejčistší „enterprise“ přístup, ale vyžaduje vlastní doménu a správně vyřešené certifikáty a bezpečnost.

Troubleshooting (časté chyby)

Chyba: „yaml: cannot unmarshal … docker …“

Do docker-compose.yml jsi vložil příkaz docker run .... YAML musí být konfigurace (klíče a hodnoty), ne shell příkazy.

Nejde stáhnout Docker skript (curl get.docker.com nefunguje)

Typicky DNS / firewall / NAT. Rychlá diagnostika:

bashDiagnostika sítě
ip route
ping -c 2 1.1.1.1
ping -c 2 google.com
resolvectl status

Login/heslo do noVNC nefunguje

  • U některých stavů image se autentizace přes env proměnné projeví hlavně při první inicializaci.
  • Proveď reset /config (viz metoda 1) nebo použij ruční .htpasswd (metoda 2).
  • Bezpečnější a často jednodušší je bind na localhost + SSH tunel (metoda 3 + 4).

FAQ

Je lepší Kali v Dockeru, nebo klasická Kali VM?

Pro rychlý lab je Docker varianta skvělá (rychlé nasazení, jednoduché mazání, přenositelné). Pro pokročilé scénáře, přístup k HW (Wi-Fi adaptér, USB passthrough, kernel moduly) je často praktičtější klasická Kali VM.

Mohu noVNC vystavit do internetu jen s heslem?

Nedoporučuji. Heslo je jen jedna vrstva. Bezpečnější je VPN (Tailscale/WireGuard) nebo reverse proxy s HTTPS + omezení přístupu.

Jak zjistím IP bez ifconfig?

Použij ip a, ip route nebo hostname -I.

Jaké jsou nejrychlejší 2 bezpečné kroky?

1) Bind porty jen na 127.0.0.1. 2) Přistupuj přes SSH tunel nebo VPN.

Komentáře

Oblíbené příspěvky