Volledige Installatiegids

Van lege server naar volledig operationeel pentest-platform. Geschatte tijd: 20–30 minuten (excl. initiële Docker image build van 5–15 minuten).

Systeemvereisten

ComponentMinimaalAanbevolen
CPU4 cores8+ cores
RAM8 GB16 GB
Schijfruimte30 GB80 GB SSD
OSUbuntu 22.04 LTS / Debian 12 / RHEL 9
Docker Engine24.0+ met Docker Compose V2
Alleen Docker vereist op de host
Alle pentest-tools (Impacket, NetExec, Certipy, hashcat, BloodHound-collector, Coercer, nmap, etc.) zijn voorgeïnstalleerd in de Docker-image. Er zijn geen externe API keys vereist om scans uit te voeren.
bash
# Docker installeren op Ubuntu
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

# Versie controleren
docker --version          # Docker version 24.x.x of hoger
docker compose version    # Docker Compose version v2.x.x

Lokale installatie (intern netwerk)

Standaardinstallatie zonder publiek domein of HTTPS.

1

Repository klonen

bash
git clone https://github.com/dvesters/pentest-portal.git /opt/pentest
cd /opt/pentest
mkdir -p results wordlists
chmod 777 results   # container heeft schrijfrechten nodig
2

Omgevingsvariabelen instellen

bash
cp .env.example .env
nano .env   # wijzig minimaal alle wachtwoorden
3

Stack starten

bash
# Eerste start duurt 5–15 minuten (image build)
make up

# Controleer of alle containers actief zijn
docker compose ps

# Test de API
curl http://localhost:8000/health
# Verwacht: {"status":"ok","version":"1.0.0"}

Installatie met Traefik (HTTPS)

Voor installaties met een publiek domein en automatische TLS via Let's Encrypt. Vereist een actieve Traefik-instantie met het externe netwerk traefik-public.

De docker-compose.yml bevat al de juiste Traefik-labels. Vervang alle voorkomens van het voorbeelddomein door uw eigen domein:

bash
# Vervang het voorbeelddomein door uw eigen domein
sed -i 's/pentest\.uw-domein\.nl/pentest.joudomein.nl/g' docker-compose.yml

# Pas ook de n8n en BloodHound domeinen aan:
sed -i 's/n8n\.uw-domein\.nl/n8n.joudomein.nl/g' docker-compose.yml
sed -i 's/bloodhound\.uw-domein\.nl/bloodhound.joudomein.nl/g' docker-compose.yml
Agent-verbinding via WSS
Als agents via het publieke domein verbinden, gebruik dan de wss://-URL als PORTAL_URL: wss://pentest.joudomein.nl

Omgevingsvariabelen

VariabeleBeschrijvingVerplicht
PENTEST_API_PORTLuisterpoort voor de portal (standaard: 8000)Nee
N8N_PORTn8n poort (standaard: 5678)Nee
N8N_USERn8n admin-gebruikersnaamJa
N8N_PASSWORDn8n admin-wachtwoordJa
N8N_ENCRYPTION_KEY32-tekens random sleutel voor n8n credentialsJa
BLOODHOUND_PORTBloodHound CE poort (standaard: 8080)Nee
BLOODHOUND_INITIAL_PASSWORDInitieel BloodHound admin-wachtwoordJa
BLOODHOUND_URLInterne URL voor automatische import (optioneel)Nee
BLOODHOUND_API_KEYBloodHound API key voor automatische import (optioneel)Nee
N8N_WEBHOOK_BASEWebhook-base URL voor n8n-notificaties (optioneel)Nee
Standaardwachtwoorden wijzigen
Wijzig alle wachtwoorden in .env vóór de eerste start. Tip: openssl rand -base64 32 genereert een sterk wachtwoord.

BloodHound CE initialiseren

BloodHound CE vereist een eenmalige configuratiestap na de eerste start.

1

Eerste login

Open http://localhost:8080 en log in met admin / de waarde van BLOODHOUND_INITIAL_PASSWORD. Stel een nieuw wachtwoord in wanneer gevraagd.

2

API key genereren voor automatische import (optioneel)

bash
# In BloodHound CE:
# rechterbovenhoek → gebruikersnaam → API Keys → Generate API Key

# Voeg toe aan docker-compose.yml onder pentest-api environment:
# - BLOODHOUND_URL=http://bloodhound:8080
# - BLOODHOUND_API_KEY=<jouw-api-sleutel>

# Herstart de portal:
docker compose restart pentest-api

n8n Notificaties instellen

Importeer de meegeleverde workflows en activeer notificaties voor scan-events.

bash
# Workflows importeren (n8n moet actief zijn)
make import-workflows

# Activeer n8n-webhook notificaties:
# Voeg toe aan pentest-api environment in docker-compose.yml:
# - N8N_WEBHOOK_BASE=http://n8n:5678/webhook/pentest
docker compose restart pentest-api

Open n8n op http://localhost:5678 en configureer de notificatiekanalen (Slack, Teams, e-mail of elk ander kanaal dat n8n ondersteunt) in de geïmporteerde workflows.

Wordlists toevoegen

Hash-cracking (Kerberoasting, AS-REP Roasting, NTLMv2) vereist een wordlist in ./wordlists/. De hashcat-module verwacht standaard rockyou.txt.

bash
# rockyou.txt downloaden (2,4 GB ongecomprimeerd)
cd /opt/pentest/wordlists
wget https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt

# Of kopiëren vanuit een bestaande Kali-installatie:
cp /usr/share/wordlists/rockyou.txt wordlists/

Veiligheidsoverwegingen

Geen ingebouwde authenticatie
De portal heeft geen ingebouwde login. Beveilig de toegang via netwerksegmentatie (bijv. alleen bereikbaar vanuit VPN of een pentest-VLAN). Gebruik in productie altijd HTTPS via Traefik.
  • Stel sterke, unieke wachtwoorden in voor alle services in .env
  • Beperk netwerktoegang tot de portal-poorten via firewall
  • De container draait met NET_ADMIN en NET_RAW capabilities (vereist voor packet-capture tools)
  • Scan-resultaten inclusief gevonden hashes worden opgeslagen in ./results/pentest.db — beveilig deze map: chmod 700 results/
  • Agent-tokens geven volledige scan-uitvoeringsrechten — verwijder agents die niet meer in gebruik zijn

Backup & Restore

bash
# Stop de stack voor consistente backup
make down

# Backup resultaten en BloodHound-data
tar -czf backup-$(date +%Y%m%d).tar.gz results/ bloodhound/pg_data/

# n8n data (Docker volume)
docker run --rm -v pentest_n8n_data:/data -v $(pwd):/backup \
  alpine tar czf /backup/n8n-$(date +%Y%m%d).tar.gz /data

make up
bash
# Restore
make down
tar -xzf backup-20260101.tar.gz
make up