β WARNING: Default credentials are for development only. Change them immediately for any non-development environment.
| Service | URL | Username | Password | Notes |
|---|---|---|---|---|
| Grafana | http://localhost:3001 | admin | admin | Change immediately |
| Prometheus | http://localhost:9090 | N/A | N/A | No auth (local only) |
| Service | Port | Default API Key | Purpose |
|---|---|---|---|
| API Gateway | 8000 | dev-api-key-123 |
Tools & Intelligence APIs |
| Identity Service | 8001 | N/A | Authentication & Users |
| Threat Intel | 8002 | dev-threat-key |
Threat Intelligence |
| Sensor Gateway | 8004 | N/A | Endpoint Agent Communication |
| Agents Service | 8006 | dev-agents-key |
AI-Powered Analysis |
| Responder | 8018 | N/A | Incident Response |
| CSPM | 8019 | N/A | Cloud Security |
| Database | Host | Port | Username | Password | Database |
|---|---|---|---|---|---|
| PostgreSQL | postgres | 5432 | postgres | postgres | wildbox |
| Redis | redis | 6379 | N/A | N/A | N/A |
Create a .env file in the project root:
# ============================================
# DATABASE CONFIGURATION
# ============================================
DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/wildbox
DATABASE_HOST=postgres
DATABASE_PORT=5432
DATABASE_USER=postgres
DATABASE_PASSWORD=postgres
DATABASE_NAME=wildbox
# ============================================
# REDIS CONFIGURATION
# ============================================
REDIS_URL=redis://redis:6379/0
REDIS_HOST=redis
REDIS_PORT=6379
# ============================================
# SECURITY & API KEYS
# ============================================
# JWT Secret (minimum 32 characters, change for production)
JWT_SECRET_KEY=your-secure-jwt-secret-key-min-32-chars-change-this
# API Keys (change for production)
API_KEY=dev-api-key-123
THREAT_INTEL_API_KEY=dev-threat-key
AGENTS_API_KEY=dev-agents-key
SENSOR_API_KEY=dev-sensor-key
# ============================================
# AI / LLM CONFIGURATION (OPTIONAL)
# ============================================
# Claude (Anthropic). Leave empty to disable AI analysis.
ANTHROPIC_API_KEY=
# ANTHROPIC_MODEL=claude-opus-4-8
# ============================================
# APPLICATION SETTINGS
# ============================================
ENVIRONMENT=development
LOG_LEVEL=INFO
CORS_ORIGINS=http://localhost:3000,http://localhost:3001,http://127.0.0.1:3000
FRONTEND_URL=http://localhost:3000
# ============================================
# MONITORING & OBSERVABILITY
# ============================================
PROMETHEUS_ENABLED=true
PROMETHEUS_PORT=9090
GRAFANA_ADMIN_PASSWORD=admin
# ============================================
# CELERY / TASK QUEUE
# ============================================
CELERY_BROKER_URL=redis://redis:6379/1
CELERY_RESULT_BACKEND=redis://redis:6379/2
CELERY_WORKER_CONCURRENCY=4
Email: ${INITIAL_ADMIN_EMAIL} # set in your .env before first start
Password: ${INITIAL_ADMIN_PASSWORD} # set in your .env before first start
Role: Administrator
Email: demo@wildbox.local
Password: demo-password-123
Role: Analyst
# Request authentication token
curl -X POST http://localhost:8001/auth/jwt/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=$INITIAL_ADMIN_EMAIL&password=$INITIAL_ADMIN_PASSWORD"
# Response:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 3600
}
# Export token for use in subsequent requests
export TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
# Example: Query threat intelligence
curl -X GET http://localhost:8002/v1/indicators \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json"
# Example: Submit analysis task
curl -X POST http://localhost:8006/v1/analyze \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"ioc": {"type": "ip", "value": "8.8.8.8"},
"priority": "high"
}'
# Example with API key header
curl -X GET http://localhost:8000/v1/tools \
-H "X-API-Key: dev-api-key-123" \
-H "Content-Type: application/json"
# Change PostgreSQL password
docker compose exec postgres \
psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'new-secure-password';"
# Update .env
sed -i 's/DATABASE_PASSWORD=postgres/DATABASE_PASSWORD=new-secure-password/' .env
# Restart services
docker compose restart
# Generate random 32+ character secret
openssl rand -hex 32
# Update .env with the output
JWT_SECRET_KEY=<paste-output-here>
# Generate random API key
openssl rand -hex 32
# Use for API_KEY in .env
API_KEY=<paste-output-here>
# For production, specify exact allowed origins
CORS_ORIGINS=https://yourdomain.com,https://app.yourdomain.com
Configure TLS on the gateway service (see haproxy/ and docker-compose.prod.yml).
# Access identity service
docker compose exec identity bash
# Run user creation script
python -c "
from app.db import SessionLocal
from app.models import User
from passlib.context import CryptContext
db = SessionLocal()
pwd_context = CryptContext(schemes=['bcrypt'])
new_user = User(
email='newuser@wildbox.local',
hashed_password=pwd_context.hash('initial-password'),
is_active=True,
role='analyst'
)
db.add(new_user)
db.commit()
print(f'User created: {new_user.email}')
"
# Access identity service
docker compose exec identity bash
# Run password reset script
python -c "
from app.db import SessionLocal
from app.models import User
from passlib.context import CryptContext
db = SessionLocal()
pwd_context = CryptContext(schemes=['bcrypt'])
user = db.query(User).filter(User.email == 'admin@wildbox.local').first()
if user:
user.hashed_password = pwd_context.hash('new-password-here')
db.commit()
print(f'Password updated for {user.email}')
"
# Access identity service
docker compose exec identity bash
# Query users
python -c "
from app.db import SessionLocal
from app.models import User
db = SessionLocal()
users = db.query(User).all()
for user in users:
print(f'{user.email} - Role: {user.role} - Active: {user.is_active}')
"
Wildbox uses JWT (JSON Web Tokens) for authentication:
Header: {"alg": "HS256", "typ": "JWT"}
Payload: {
"sub": "admin@wildbox.local",
"iat": 1699365600,
"exp": 1699369200, # Expires in 1 hour
"scope": ["read", "write"]
}
Signature: HMACSHA256(header.payload, secret)
# Tokens expire after 1 hour by default
# To get a new token, authenticate again
curl -X POST http://localhost:8001/auth/jwt/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=$INITIAL_ADMIN_EMAIL&password=$INITIAL_ADMIN_PASSWORD"
# Logout (invalidates token)
curl -X POST http://localhost:8001/logout \
-H "Authorization: Bearer $TOKEN"
# Check if user exists
docker compose exec postgres \
psql -U postgres -d wildbox -c "SELECT email, is_active FROM users;"
# Create admin user if missing
docker compose exec identity python -c "
from app.db import SessionLocal
from app.models import User
from passlib.context import CryptContext
db = SessionLocal()
pwd_context = CryptContext(schemes=['bcrypt'])
admin = User(
email='admin@wildbox.local',
hashed_password=pwd_context.hash('admin-password-123'),
is_active=True,
role='admin'
)
db.add(admin)
db.commit()
print('Admin user created')
"
# Verify API key is set in environment
docker compose exec open-security-tools env | grep API_KEY
# Update .env and restart
echo "API_KEY=dev-api-key-123" >> .env
docker compose restart open-security-tools
For credential-related issues:
Remember: Always change default credentials before using in any environment!