vBrowser was initially created by Joseph Fisher, a Cyber Threat Intelligence manager, to assist with deep and dark web investigations while not exposing identity and remaining covert. The vBrowser team realized that many SOCs lack the tools or sandboxed environments needed for proper investigations. vBrowser provides companies and individuals access to this infrastructure at a minimal price, lowering the barrier for those who cannot afford expensive subscription services with paywalled features. Our ultimate goal is to give back to the community-enhancing cyber investigations and helping keep people safe.
- Supported Architecture & Platforms
- Installing Terraform (Linux)
- AWS Credentials Setup (Root User)
- Cloudflare Setup
- Getting Started
- What
setup.shDoes - Destroying the Deployment
- API Special Key
- License
| Architecture | Platform | Supported | Notes |
|---|---|---|---|
amd64 |
Linux | ✅ Yes | Fully tested and supported |
amd64 |
Windows | Not tested, but expected to work | |
aarch64 |
Linux | Not tested, but expected to work | |
arm64 |
Linux | Not tested, but expected to work |
ℹ️ OvB has only been tested on Linux (amd64) systems. Windows support is expected but not verified. All documentation currently assumes a Linux environment.
To run OvB's infrastructure components, you’ll need Terraform. Here's how to install it on a Debian-based Linux system (e.g. Ubuntu):
1. Update and install prerequisites
sudo apt-get update -y && sudo apt-get install -y gnupg software-properties-common2. Install the HashiCorp GPG Key
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null3. Add the official HashiCorp repository to your linux system.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list4. Download the package information
sudo apt update -y5. Install Terraform
sudo apt-get install -y terraformTo allow Terraform to authenticate with AWS, you need to provide your Access Key ID and Secret Access Key. Here's how to obtain them from your AWS Root Account (IAM user is also sufficient):
Go to https://aws.amazon.com/console/ and log in as the root user (email + password). Feel free to use an IAM user instead as long as the permissions are correct.
- Navigate to My Security Credentials (top-right dropdown → “My Security Credentials”).
- Scroll down to the Access keys section.
- Click Create access key.
- Download or copy the credentials safely:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
⚠️ You will only see the secret key once. Store it securely.
You can pass the credentials via environment variables:
export AWS_ACCESS_KEY_ID="your-access-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret-access-key"
export AWS_DEFAULT_REGION="us-east-2" # must be the same region you wish to deploy the stack toOvB uses Cloudflare to manage DNS records dynamically. Follow these steps to configure your Cloudflare account:
If you don’t already have one, sign up at:
🔗 https://dash.cloudflare.com/sign-up
- Add a domain you own (e.g.
example.com) to your Cloudflare account. - Update your domain registrar to point your nameservers to the Cloudflare-provided ones.
- Wait for DNS propagation to complete (can take several minutes to hours).
✅ A free-tier account is sufficient.
- Go to your domain’s Overview page in the Cloudflare dashboard.
- Locate the Zone ID at the bottom-right of the page.
- Copy and store this - you’ll need it for the OvB setup process.
-
Click “Create Token”
-
Choose “Edit zone DNS” template
-
Set the following:
- Token name:
Terraform DNS Access(or any descriptive name) - Permissions:
Zone.DNS:Edit - Resources: Select Specific Zone and choose your domain (e.g.
example.com)
- Token name:
-
Create the token and copy it. You will only see it once.
❗️Do not use the Global API Key unless absolutely necessary. It grants broad account access.
Once your environment is ready (Terraform, AWS credentials, and Cloudflare API token), follow the steps below to deploy OvB:
git clone https://github.com/fish-not-phish/open-vbrowser.gitcd open-vbrowser/terraform./setup.shThe setup.sh script automates the full initialization process for Open vBrowser. Here’s what it handles:
Prompts the user to choose default or custom browser containers (e.g. Chrome, Remnux). It moves unused images into a separate unused/ folder and restores any selected images.
⚠️ Open vBrowser pre-selects Chrome, Terminal, Remnux, Mullvad and Tor by default.
To enable Chrome, Microsoft Edge, and IceCat, enter:
chrome,edge,icecat
⚠️ Input must be comma-separated, with no spaces.
🗃️ All unused images will be automatically moved to the unused/ folder.
NOTE: DEBUG should be set to False or 0 for production environments.
NOTE: LOGGER_ENABLED set to True may generate lots of output. Recommened to have off unless you are troubleshooting.
NOTE: DEFAULT_IDLE_THRESHOLD is the amount of time you want sessions to auto-close during an idle period.
Recommend changing the following:
CUSTOM_DOMAIN(required to change)DJANGO_SUPERUSER_USERNAMEDJANGO_SUPERUSER_EMAILDJANGO_SUPERUSER_PASSWORDCF_Zone_ID(required to change)CF_Token(required to change)- Ensure
AWS_DEFAULT_REGIONis set to your desired region - The rest of the variables are configured to work by default. Change at your own risk.
- Generates a secure Django
SECRET_KEY - Prompts for required environment variables (database, Redis, AWS, Cloudflare, etc.)
- Saves all values to a
.envfile - Auto-generates key fields like
ALLOWED_HOSTSandUSER_EMAIL
Updates any region and awslogs-region values in Terraform files to match the selected AWS_DEFAULT_REGION.
Runs terraform init and terraform apply -auto-approve to automatically create the necessary AWS infrastructure.
Copies the .env file to:
../django/../docker/containers-update/../docker/vbrowser-stack/
Builds Docker images for:
- The Django backend (
vbrowser) - The container manager (
containers-updater)
Uses Docker Compose to bring up:
containers-updatestackvbrowser-stack
🛠️ This script ensures that by the time it's finished, all required infrastructure is configured properly and initializing their startup process(es).
⚠️ Important:
After runningsetup.sh, you must wait for thecontainers-updatercontainer to finish its build and push process before starting any sessions.
Run the following to monitor its progress:
docker logs containers-updater -f
⚠️ Important:If you receive the error shown below, please roll your Cloudflare API Token, destroy the stack using
destroy.sh(wait for it to finish building before destroying), and redploy usingsetup.sh.
invalid domain
Error adding TXT record to domain: ...Otherwise, please wait until it stops producing output and says All done.. Once this occurrs, the entire setup process has been completed.
To tear everything down cleanly, including AWS resources and local containers, run the following:
cd open-vbrowser/terraform
./destroy.shThis script requires no input. It will:
- Destroy all AWS infrastructure created by Terraform (ECS, networking, ECR, etc.)
- Remove all Docker containers and associated volumes
This gives you a fresh slate. To redeploy, just run ./setup.sh again.
API_SPECIAL_KEY is automatically generated based on your CUSTOM_DOMAIN. It is the Base64-encoded version of the domain you provide in the environment variable CUSTOM_DOMAIN.
The API_SPECIAL_KEY is used to cross-verify the integrity of API requests.
Any client attempting to use your API must provide:
- Their own API key
- The corresponding API Special Key (Base64-encoded version of their registered
CUSTOM_DOMAIN)
This dual verification ensures that only authorized clients with a valid domain and API key can interact with the API, protecting against unauthorized access and domain spoofing.
This project is licensed under a custom Non-Commercial License.
You may use, modify, and distribute the software for personal and educational use only.
Commercial use and resale are strictly prohibited without express written permission from the author.
For licensing questions, contact jfisher@vbrowser.io.
