apod is a lightweight wrapper and Containerfile designed for security professionals who need a Kali Linux environment with GUI support without the overhead of a full Virtual Machine.
It streamlines the process of launching GUI applications (via X11 or XWayland) and provides the necessary network capabilities (NET_RAW, NET_ADMIN) for networking tools such as OpenVPN.
While apod provides a flexible and scalable foundation for general security workflows, it is designed as a general-purpose tool. Users handling intensive workloads—such as high-speed password cracking—may need to further customize the container configuration for hardware acceleration and resource optimization.
- Containerized: Rootless container provided by podman.
- GUI Ready: Forwards X11 and Wayland sockets to the container. Plus you can access it via RDP on port 63389.
- Persistence: Supports a shared host-to-container directory
- Prepared tools: Includes a massive suite of security tools (Metasploit, Bloodhound, Ghidra, etc.) on a Kali Rolling base.
- Flexible: easy to extend and customize the container and the wrapper script.
Caution
apod is not working on Windows machines. It was tested on Debian and Void Linux.
git clone https://github.com/RedB34r/apod
cd apod/ContainerFeel free to change the confiugration of the container or the attached files (vimrc, tmux.conf).
Build the image:
podman build -t <image name>:<version> .
You can customize the root password using a build argument:
podman build --build-arg PASSWORD="<root password> -t <image name>:<version> .
Open apod.sh and ensure the variables match your environment:
shared: Path to your local project folder (e.g.,~/tools/shared).podman_image_name: Must match the tag and version used in Step 2.
The apod.sh script manages the container lifecycle.
| Action | Command | Description |
|---|---|---|
| Start | ./apod.sh start |
Initializes and starts the container. |
| Shell | ./apod.sh shell |
Drops you into an interactive Bash session. |
| Run | ./apod.sh run <cmd> |
Executes a single command (or GUI app) in the background. |
| Stop | ./apod.sh stop |
Stops the container while keeping its state. |
| Remove | ./apod.sh stop --rm |
Stops and deletes the container instance. |
- Launch a GUI app:
./apod.sh run firefox-esr - Using extra parameters for the container:
./apod.sh start --rm(Passes extra flags directly topodman run).
Caution
This project is a "quick and dirty" solution. It grants the container significant privileges (networking and display access). Use it only in environments you trust.
- Audio: Currently not supported. If you have a clean way to implement PulseAudio/PipeWire forwarding, PRs are welcome!
- Development Status: This is a hobby project. It is not under active daily development, and updates will be released sporadically