はじめに
kali linux を CTF で使うことが多いです。 これは kali linux にセキュリティ関連のツールが最初から多く含まれているためです。
よって、 CTF 用に proxmox 上に terraform で Kali インスタンスを立てようとおもいます。
Terraform をまなぶ で概要をあらためて学んだため、Proxmox と組み合わせながら立てていきます。
Kali linux の概要を把握する
セキュリティ系で使うツールについて最初からこれだけ入っているようです。便利ですね。
url: https://www.kali.org/tools/
title: "Kali Tools | Kali Linux Tools"
description: "Home of Kali Linux, an Advanced Penetration Testing Linux distribution used for Penetration Testing, Ethical Hacking and network security assessments."
host: www.kali.org
favicon: https://www.kali.org/images/favicon.svg
image: https://www.kali.org/images/kali-logo.svg
要求スペックとして
- CLI only
- 512 MB
- Desktop
- 2 GB のメモリが必要なようです。
url: https://www.kali.org/docs/installation/hard-disk-install/
title: "Installing Kali Linux | Kali Linux Documentation"
description: "Installing Kali Linux (single boot) on your computer is an easy process. This guide will cover the basic install (which can be done on bare metal or guest VM), with the option of encrypting the partition. At times, you may have sensitive data you would prefer to encrypt using Full Disk Encryption (FDE). During the setup process you can initiate an LVM encrypted install on either Hard Disk or USB drives."
host: www.kali.org
favicon: https://www.kali.org/images/favicon.svg
image: https://www.kali.org/images/kali-logo.svg
Proxmox 上に直接 LXC を手動で立ててデスクトップ環境を導入しようとしたがネットワークエラーがでて断念した
(追記 2025-08-15) LXC 上に #xfce を導入しようとしたところ #network-manager でエラーがでてしまいました。
そのため、下記の手順を行ったとしてもうまく動作しない可能性が高いです。
よって、後述しますが LXC ではなく #KVM を使うようにしています。
まずは直接手動で Kali Linux の LXC コンテナを立ててみます。
https://images.linuxcontainers.org/images/kali/current/amd64/default/20250813_17:14/ の rootfs.tar.xz
を WEB UI (CT Templates) からダウンロードします。
Kali Linux の rootfs 中核ディレクトリを持ってきているようです。
LXC コンテナを立ててみます。
root ユーザのパスワードと SSH 公開鍵の両方を登録します。 最初のトライでは SSH 公開鍵だけを登録したのですが、これだと SSH ログインできませんでした。 というのも openssh-server が最初は入っておらず、まずはパスワードでログインして SSH できるようにパッケージをインストールするところから始めないといけないためです。
CPU は 1, Memory は 1024 MB を与えました。
起動すると SSH サーバが動いていません。 そのため、 OpenSSH server をインストールします。
root@ctfkali:~# systemctl status ssh
Unit ssh.service could not be found.
インストールし、かつサービスを有効化します。
root@ctfkali:~# apt install -y openssh-server
root@ctfkali:~# systemctl start ssh
root@ctfkali:~# systemctl enable ssh
Synchronizing state of ssh.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable ssh
Created symlink '/etc/systemd/system/sshd.service' → '/usr/lib/systemd/system/ssh.service'.
Created symlink '/etc/systemd/system/multi-user.target.wants/ssh.service' → '/usr/lib/systemd/system/ssh.service'.
root@ctfkali:~# systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: disabled)
mac から SSH したところ正常につなげました。
~/Downloads via C v17.0.0-clang via ☕ via 🐍 v3.13.5 [☁️ ] took 22s
❮ ssh ctfkali
The authenticity of host '192.168.11.102 (192.168.11.102)' can't be established.
ED25519 key fingerprint is SHA256:FvInzjqwbF2OodTiymoaq1Nn4QAKEIlH7cdMRok3KcA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.11.102' (ED25519) to the list of known hosts.
Linux ctfkali 6.8.12-12-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.12-12 (2025-07-14T13:20Z) x86_64
The programs included with the Kali GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@ctfkali:~#
url: https://benheater.com/proxmox-kali-linux-container-lxc/
title: "Proxmox: Kali in a Linux Container (LXC)"
description: "In this post, I demonstrate the process of importing, installing, and configuring a Kali LXC image in Proxmox. I also discuss some of the potential challenges that may present."
host: benheater.com
favicon: https://benheater.com/content/images/size/w256h256/format/jpeg/2025/05/marionette-sq-3.jpg
image: https://benheater.com/content/images/2023/09/kali-ascii-16x9.png
Kali LXC の初期パッケージは最小限になっているそうなので、 kali-linux-default で必要なパッケージ類をいれます。
MetaPackage とはある機能を達成するための複数のパッケージを統括するパッケージであり、このメタパッケージを入れることで必要なパッケージをすべてインストールできます。 今回は kali が提供している default system をすべていれる kali-linux-default をいれています。
https://www.kali.org/docs/general-use/metapackages/ https://wiki.ubuntulinux.jp/MetaPackages
apt clean && apt update && apt full-upgrade -y
apt install -y kali-linux-default
chsh -s $(which zsh)
続いて LXC Kali Linux にデスクトップ環境を入れていきます。 本来 LXC は GUI が存在しないためデスクトップ環境は存在しないですがパッケージを入れてデスクトップ出力できるようにします。
https://benheater.com/proxmox-kali-linux-container-lxc/ の通りに(ほぼ)進めます。
xfce という Linux デスクトップ環境をインストールします。
kali-desktop-xfce
もメタパッケージであり、必要なものをすべていれています。
apt install -y kali-desktop-xfce
続いて、 xorg という X.Org Server ( XWindowSystem の実装) をインストールします。 また、 xrdp をインストールして mac, windows から rdp 接続できるようにします。
systemctl で xrdp を即座に有効にします。
apt install -y xorg xrdp
cat <<EOF | sudo tee /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla
[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes
EOF
systemctl enable --now xrdp
☒ 注意点として network-manager を削除しましょう、と記事に書いてありましたが、自分の環境では行わないままで問題ありませんでした。 (2025-08-15 追記: 後述しますが、コンテナを再起動させると systemd-networkd と network-manager がコンフリクトしてエラーになりました。そのため、この問題を解決する必要があります。 再起動させる前であればネットワーク接続も問題なく RDP もうまく接続できました。)
続いて Mac の Windows App
を利用して Kali Linux LXC に RDP 接続します。
LXC が動作している Address を入力し Add PC します。
該当の PC を選択すると Credential を入力する画面になるため入力しましょう。
無事接続できました。
2025-08-15 追記: ネットワークエラーが発生するため直そうとするが直せない
コンテナを立ち上げ直す前は、さきほどの画像のように rdp でデスクトップ画面へアクセスできました。 しかし、 Kali Linux LXC コンテナを立ち上げ直すと SSH もできない、 ping もできない、というネットワークがすべて使えない状態に陥りました。
└─# systemctl enable --now NetworkManager
Created symlink '/etc/systemd/system/multi-user.target.wants/NetworkManager.service' → '/usr/lib/systemd/system/NetworkManager.service'.
Created symlink '/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service' → '/usr/lib/systemd/system/NetworkManager-dispatcher.service'.
Created symlink '/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service' → '/usr/lib/systemd/system/NetworkManager-wait-online.service'.
┌──(root㉿ctfkali)-[~]
└─# systemctl enable --now NetworkManager
┌──(root㉿ctfkali)-[~]
└─# systemctl stop systemd-networkd
Stopping 'systemd-networkd.service', but its triggering units are still active:
systemd-networkd.socket
┌──(root㉿ctfkali)-[~]
└─# systemctl disable systemd-networkd
Removed '/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service'.
Removed '/etc/systemd/system/sysinit.target.wants/systemd-network-generator.service'.
Removed '/etc/systemd/system/dbus-org.freedesktop.network1.service'.
Removed '/etc/systemd/system/sockets.target.wants/systemd-networkd.socket'.
Removed '/etc/systemd/system/multi-user.target.wants/systemd-networkd.service'.
Disabling 'systemd-networkd.service', but its triggering units are still active:
systemd-networkd.socket
┌──(root㉿ctfkali)-[~]
└─# systemctl stop systemd-networkd.socket
┌──(root㉿ctfkali)-[~]
└─# systemctl disable systemd-networkd.socket
- systemd-networkd
- NetworkManager
どちらか1つに絞ってもネットワークがうまく動作しませんでした。 まったくもってうまくいかないため、別の動画を参考に再チャレンジしてみます。
Kali Linux LXC (with Desktop) を別動画を参考に導入しようとしたが結局だめだった
https://www.youtube.com/watch?v=2WjDTUNa-W0
初回チャレンジと同様にパスワード・ホスト名・SSH キーを設定します。 openssh-server が最初は無効になっているため、パスワードを設定しないと詰みます。
ネットワークを設定します。
便利パッケージを入れておきます。
root@ctfkali:~# apt install wget man vim inetutils-tools iputils-ping
LXC 起動時の network の挙動を確認したところ
- systemd-networkd は動いていない
- NetworkManager はそもそも入っていない
- networking.service が動いている ようです。 /etc/network/interfaces の設定をもとに networking.service が設定しているようです。 #networking-service は古い従来のネットワーク設定であり、 LXC がデフォルトでこちらの設定を使っているようです。
root@ctfkali:~# journalctl -b | grep -i network
Aug 15 01:55:29 ctfkali systemd[1]: systemd-timesyncd.service - Network Time Synchronization was skipped because of an unmet condition check (ConditionVirtualization=!container).
Aug 15 01:55:29 ctfkali systemd[1]: Starting networking.service - Raise network interfaces...
Aug 15 01:55:30 ctfkali systemd[1]: Finished networking.service - Raise network interfaces.
Aug 15 01:55:30 ctfkali systemd[1]: Reached target network.target - Network.
root@ctfkali:~# systemctl status systemd-networkd
○ systemd-networkd.service - Network Configuration
Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; disabled; preset: disabled)
Drop-In: /run/systemd/system/systemd-networkd.service.d
└─zzz-lxc-ropath.conf
/run/systemd/system/service.d
└─zzz-lxc-service.conf
Active: inactive (dead)
TriggeredBy: ○ systemd-networkd.socket
Docs: man:systemd-networkd.service(8)
man:org.freedesktop.network1(5)
FD Store: 0 (limit: 512)
root@ctfkali:~#
下記をインストールして再ログインすれば zsh が有効になります。
root@ctfkali:~# apt install kali-defaults zsh zsh-syntax-highlighting zsh-autosuggestions -y
SSH を有効化します。
┌──(root㉿ctfkali)-[~]
└─# apt install openssh-server -y
┌──(root㉿ctfkali)-[~]
└─# systemctl enable ssh && systemctl start ssh
┌──(root㉿ctfkali)-[~]
└─# apt install -y kali-desktop-xfce xorg xrdp firefox-esr
動画で話されていましたが、 NetworkManager を削除・停止するまえに LXC コンテナを再起動してしまうとトラブルシュートが大変になってしまうそうです。 kali-desktop-xfce をインストールしたらすぐにその端末を生かしたまま、再起動することなく NetworkManager を削除したほうがよいようです。
┌──(root㉿ctfkali)-[~]
└─# journalctl | grep eth0
Aug 15 02:10:35 ctfkali systemd-networkd[15907]: eth0: Link UP
Aug 15 02:10:35 ctfkali systemd-networkd[15907]: eth0: Gained carrier
Aug 15 02:10:35 ctfkali systemd-networkd[15907]: eth0: Gained IPv6LL
Aug 15 02:12:56 ctfkali NetworkManager[18919]: <info> [1755223976.5893] ifupdown: guessed connection type (eth0) = 802-3-ethernet
Aug 15 02:12:56 ctfkali NetworkManager[18919]: <info> [1755223976.5940] device (eth0): carrier: link connected
Aug 15 02:12:56 ctfkali NetworkManager[18919]: <info> [1755223976.5942] manager: (eth0): new Veth device (/org/freedesktop/NetworkManager/Devices/2)
kali-desktop-xfce をインストールした tty をそのまま使っているにもかかわらず、動画と差分がでてきてしまいました。 network-manager が purge, remove できません。 おそらく kali linux の version が異なるためだとおもいます。
https://youtu.be/2WjDTUNa-W0?t=1312
┌──(root㉿ctfkali)-[~]
└─# apt purge network-manager
Solving dependencies... Error!
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
Unsatisfied dependencies:
kali-desktop-xfce : Depends: network-manager-gnome but it is not going to be installed
Recommends: network-manager-fortisslvpn-gnome but it is not installable
Recommends: network-manager-l2tp-gnome but it is not going to be installed
Recommends: network-manager-openconnect-gnome but it is not going to be installed
Recommends: network-manager-openvpn-gnome but it is not going to be installed
Recommends: network-manager-pptp-gnome but it is not going to be installed
Recommends: network-manager-vpnc-gnome but it is not going to be installed
Error: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
Error: The following information from --solver 3.0 may provide additional context:
Unable to satisfy dependencies. Reached two conflicting decisions:
1. network-manager-applet:amd64 Depends network-manager
but none of the choices are installable:
- network-manager:amd64 is selected for removal
2. network-manager-applet:amd64 is selected for install because:
1. kali-desktop-xfce:amd64 is selected for install
2. kali-desktop-xfce:amd64 Depends network-manager-gnome
3. network-manager-gnome:amd64 Depends network-manager-applet (= 1.36.0-3+b1)
そのため NetworkManager を削除するのではなく停止する方針で対応してみました。 この状態でコンテナを再起動してみます。
┌──(root㉿ctfkali)-[~]
└─# systemctl stop NetworkManager
┌──(root㉿ctfkali)-[~]
└─# systemctl disable NetworkManager
再起動したところ結局ネットワークが使えなくなってしまいました。 Kali linux 6 ではうまく動作しないと結論付けて、 KVM を使う方針に変更します。
┌──(root㉿ctfkali)-[~]
└─# apt update
Ign:1 http://kali.download/kali kali-rolling InRelease
Ign:1 http://kali.download/kali kali-rolling InRelease
Ign:1 http://kali.download/kali kali-rolling InRelease
Err:1 http://kali.download/kali kali-rolling InRelease
Temporary failure resolving 'kali.download'
All packages are up to date.
Warning: Failed to fetch http://kali.download/kali/dists/kali-rolling/InRelease Temporary failure resolving 'kali.download'
Warning: Some index files failed to download. They have been ignored, or old ones used instead.
┌──(root㉿ctfkali)-[~]
└─# uname -a
Linux ctfkali 6.8.12-12-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.12-12 (2025-07-14T13:20Z) x86_64 GNU/Linux
ここまでまとめ
proxmox 上で kali Linux を LXC コンテナとしてセットアップ (手動) しました。 xorg と xrdp を入れることで RDP 接続できるようにしました。
ただし、 NetworkManager がうまく削除できずネットワーク接続できなくなってしまいました。 そのため、 VM を使うことにします。
仮に LXC でうまくいったとしても、注意点として 特権コンテナ という問題があります。 特権コンテナと非特権コンテナの違いについて を参照してください。
デフォルトでは非特権コンテナとして作成されており、 OpenVPN などが使えないようです。