Access methods
The lab supports three ways to reach internal machines. Use whichever fits your workflow. All three should work after a clean deployment.Windows workstation
Ping and test hostnames from inside the lab network via the Guacamole RDP session.
Guacamole SSH connections
Click any SSH connection in the Guacamole portal to open a terminal directly in your browser.
SSH jumpbox from your host
Use Guacamole as an SSH jumpbox to reach internal machines from your local terminal.
Verify from the Windows workstation
This is the primary connectivity check. All C2 callbacks originate from victim machines inside the lab network, so the Windows workstation’s view of the network is the one that matters most.Open the Windows workstation
In the Guacamole portal, click Windows Operator Workstation. Wait for the desktop to load (10–30 seconds).
Open PowerShell
Right-click the desktop and select Open PowerShell here, or press
Win + R, type powershell, and press Enter.Ping all lab machines by hostname
Run each ping in sequence. All hostnames are pre-configured in Expected result: Each hostname resolves to a private IP and returns four replies with no packet loss.
C:\Windows\System32\drivers\etc\hosts — no DNS required.The
redirector hostname resolves to its private IP in the redirector VPC, reachable via VPC peering. All other hostnames resolve to private IPs in the team server VPC.Verify via Guacamole SSH connections
For each SSH connection in the Guacamole portal, click the tile and confirm a shell prompt appears. This verifies that guacd can reach the target host and that SSH is accepting connections.Verify via SSH jumpbox from your host
Guacamole has a public Elastic IP and accepts inbound SSH. Use it as a jumpbox (-J) to reach internal machines directly from your local terminal without opening any additional firewall rules.
Get the Guacamole public IP from terraform output deployment_info → GUACAMOLE ACCESS PORTAL → Public IP.
- Linux / macOS
- Windows (PowerShell)
<GUAC_PUBLIC_IP> with the value from terraform output deployment_info. The rs-rsa-key.pem file must be in your current directory, or provide the full path.The jumpbox method uses your AWS SSH key (
.pem) for authentication, not the lab password. This is the only access method that requires the key file — all Guacamole connections use password auth.Success criteria
Your deployment is ready for C2 configuration when all of the following are true:| Check | Expected result |
|---|---|
| Guacamole portal accessible | https://<GUAC_PUBLIC_IP>/guacamole loads and accepts login |
| All 7 connections visible | Home screen shows all 7 pre-configured connection tiles |
| Windows desktop loads | RDP session connects and desktop appears within 30 seconds |
| All hostnames ping from Windows | ping mythic, sliver, havoc, redirector, guac all reply |
| All Guacamole SSH connections open | Each SSH tile opens a shell without errors |
| Jumpbox SSH works from host | ssh -J reaches internal machines using .pem key |
Troubleshooting connectivity failures
Guacamole portal does not load
Guacamole portal does not load
- Confirm the URL uses
https://— HTTP redirects to HTTPS but the redirect may fail if Nginx is still starting. - Check that the Guacamole instance is in a
runningstate in the AWS EC2 console. - Check your security group rules. Port 443 must be open to your IP. Your
localPub_ipinterraform.tfvarscontrols this — verify it is set correctly and includes the/32suffix. - If the instance just started, wait 3–5 minutes for Docker and Nginx to finish initializing.
Only some of the 7 connections appear
Only some of the 7 connections appear
The connections are created by the Guacamole setup script during user data execution. If fewer than 7 appear, the script may still be running or may have failed partway through.SSH into the Guacamole server (using the external IP and your Look for errors near the connection creation steps. If the API was not ready in time, you can re-run the Guacamole setup manually or create the missing connections through the Guacamole admin UI.
.pem key) and check the log:Windows connection fails or times out
Windows connection fails or times out
The Windows instance takes longer to initialize than any other component. User data scripts disable Defender, enable RDP, and install tools — this can take up to 15 minutes on first boot.
- Wait 5 more minutes and try clicking the tile again.
- In the AWS EC2 console, check that the Windows instance shows running status and that the Status checks column shows 2/2 checks passed.
- If RDP fails after 15 minutes, check the Windows instance’s user data log via the EC2 console: Actions → Monitor and troubleshoot → Get system log.
Ping fails for one or more hostnames from Windows
Ping fails for one or more hostnames from Windows
Hostname resolution relies on
C:\Windows\System32\drivers\etc\hosts. If a hostname does not resolve:- Open PowerShell as Administrator on the Windows workstation.
- Inspect the hosts file:
- Confirm the expected entries are present. If missing, the Windows user data script may not have completed. Check the EC2 system log for errors.
SSH jumpbox connection refused or times out
SSH jumpbox connection refused or times out
- Confirm port 22 is open on Guacamole’s security group for your IP (
localPub_ipinterraform.tfvars). - Verify the
.pemfile permissions. On Linux/macOS, the file must not be group or world readable:
- Confirm you are using the correct key name. The key must match
ssh_key_nameinterraform.tfvars(default:rs-rsa-key). - Internal machines (mythic, sliver, havoc) are reachable via the jumpbox only because Guacamole shares a VPC with them. The redirector is in a separate VPC — it is not reachable via internal hostname through this jumpbox.
Instance not yet initialized — general guidance
Instance not yet initialized — general guidance
All instances run user data scripts on first boot. The timeline from
If you are within this window, wait and retry. Do not assume a failure until the full initialization time has elapsed.
terraform apply completing to all services being ready:| Instance | Estimated initialization time |
|---|---|
| Guacamole | 3–5 minutes |
| Redirector | 3–5 minutes |
| Mythic | 5–10 minutes (installs ~10 Docker containers) |
| Sliver | 3–5 minutes |
| Havoc | 5–10 minutes (builds from source) |
| Windows | 10–15 minutes |
