A Docker-based cybersecurity training lab with a Kali Linux jump box and vulnerable Ubuntu targets. Run it locally on your own machine for hands-on practice.
If viewing this on GitHub, scroll down to read the full README before starting.
- Install Git and Docker Desktop
- Clone and start the lab:
git clone https://github.com/j027/Epic-Research-Infra.git cd Epic-Research-Infra docker compose build docker compose up -d - Connect to the Kali jump box:
Password:
ssh student@127.0.0.1 -p 2222
student123
- Git β to clone this repository
- Docker Desktop β runs the lab containers
Architecture note: This lab targets x86_64/amd64. On ARM systems (Apple Silicon, Windows on ARM), some containers may run under x86_64 emulation and may be slower or fail. If you hit issues, use an amd64 machine.
Git comes pre-installed. Verify with:
git --versionIf not installed, you'll be prompted to install Xcode Command Line Tools automatically.
Download and install from: https://git-scm.com/install/windows
Use default options during installation.
# Ubuntu/Debian
sudo apt update && sudo apt install -y git
# Fedora
sudo dnf install -y git
# Arch
sudo pacman -S gitDownload and install Docker Desktop for your OS:
| OS | Download |
|---|---|
| macOS | https://docs.docker.com/desktop/install/mac-install/ |
| Windows | https://docs.docker.com/desktop/install/windows-install/ |
| Linux | https://docs.docker.com/desktop/install/linux-install/ |
After installation:
- Launch Docker Desktop
- Wait for it to finish starting (whale icon stops animating)
- Verify it works:
docker --version
Windows Users: If prompted, enable WSL 2 during installation. You may need to restart.
Linux Users: You can also use Docker Engine instead of Docker Desktop. If you do, you'll need to either add your user to the
dockergroup or prefix alldockercommands withsudo.
Open a terminal and run:
git clone https://github.com/j027/Epic-Research-Infra.git
cd Epic-Research-InfraBuild the lab images (first time takes ~5 minutes):
docker compose builddocker compose up -dThis starts both containers in the background.
This environment is reused across multiple labs; you do not need to reinstall it unless instructed.
When you finish a lab, shut down the environment to free up system resources:
docker compose downBefore starting the next lab, bring it back up for a clean starting state:
docker compose up -dThis is recommended between all labs, and required before the Attack lab β if you go straight from the Recon lab without resetting, one of the exploits will not work.
π‘ There is no persistent data to save, so shutting down between labs is always safe.
SSH into the Kali jump box:
ssh student@127.0.0.1 -p 2222Credentials:
- Username:
student - Password:
student123
When you log in, you'll see network information including target IP addresses:
==========================================
CYBERSECURITY LAB ENVIRONMENT
==========================================
Network Information:
Internal Network: 10.172.42.0/24 (Gateway: 10.172.42.1)
Accessible Targets:
Kali Jump Box: kali-jump (10.172.42.10)
File Server: file-server (10.172.42.11)
??? ??? (Scan to find me!)
From the Kali jump box, you can reach targets by hostname or IP:
# Using hostname (easier to remember)
ping file-server
nmap file-server
ping kali-jump
nmap kali-jump
# Using IP address
# file-server
ping 10.172.42.11
nmap 10.172.42.11
# kali-jump
ping 10.172.42.10
nmap 10.172.42.10π‘ Tip: Hostnames usually work and are easier to type than IP addresses.
Your Computer
β
β SSH (port 2222)
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Kali Jump Box (10.172.42.10) β
β - Your attack platform β
β - nmap, metasploit, john, etc. β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
Internal Network (10.172.42.0/24)
β
βββββββββ΄ββββββββ
β β
βΌ βΌ
βββββββββββββββ βββββββββββββββββββ
β File Server β β [?] Hidden β
β (10.172.42. β β Target β
β 11) β β - Scan to find! β
β - Vulnerableβ β β
β services β β β
βββββββββββββββ βββββββββββββββββββ
If you see an error about port 2222, another service is using it. Either stop that service or edit docker-compose.yml to use a different port (e.g., change 2222:22 to 2223:22).
If you see a "REMOTE HOST IDENTIFICATION HAS CHANGED" warning after rebuilding:
ssh-keygen -R '[127.0.0.1]:2222'Then try connecting again.
Make sure Docker Desktop is running (check for the whale icon in your system tray/menu bar).
docker compose psdocker compose logsThe lab images take up several gigabytes. When you're done with the labs that use this environment, you can reclaim disk space:
# Stop and remove containers
docker compose down
# Remove the lab images
docker rmi epic-research-infra-kali-jump:latest epic-research-infra-ubuntu-target1:latest epic-research-infra-ubuntu-target2:latestDocker caches intermediate build layers. To free this space:
# Remove only build cache (safe - doesn't affect running containers)
docker builder pruneπ‘ Tip: Run
docker system dfto see how much space Docker is using.
β οΈ Warning: Avoiddocker system pruneunless you understand itβthis removes ALL unused containers, networks, and images across your entire Docker installation, not just this lab.
You may also delete the Epic-Research-Infra directory after removing the containers and images.
Since the lab runs locally on your own machine, the default password is fineβonly you can access it.
If you want to change it anyway, use the command
passwdafter logging into the Kali jump box.
For deploying the lab environment for an entire class on a shared server, see the Lab Manager Guide.
This project is licensed under the Unlicense (public domain). See LICENSE for details.
- ubuntu-target1/: Docker implementation of Metasploitable3
- Docker implementation by heywoodlh: MIT License
- Metasploitable3 by Rapid7: BSD-3-Clause License
- See
ubuntu-target1/LICENSEfor details
For complete licensing information, see THIRD_PARTY_NOTICES.md.