A web-based dashboard for managing and visualizing nmap scan results across multiple teams in cyber defense competitions. Features real-time scan tracking, user management, and a clean red team themed interface.
- Features
- Prerequisites
- Installation
- Configuration
- Setting Up Teams
- User Management
- Connecting Scanners
- API Documentation
- Running in Production
- Troubleshooting
- Multi-team support - Track scans across multiple competition teams
- Real-time dashboard - View hosts, ports, and scan status
- User management - Role-based access (Admin, Scanner, Viewer)
- Job tracking - Monitor scan jobs and their status
- Dangerous port highlighting - Automatically flag risky services
- Host tracking - Track online/offline status over time
- REST API - Full API with Swagger documentation
- Dark theme - Red/green accent colors for red team aesthetic
- Linux (tested on Ubuntu 22.04/24.04, Debian 12)
- Go 1.21 or later
# Check if installed
go version
# If not installed (Ubuntu/Debian):
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc- GCC (for SQLite)
sudo apt update && sudo apt install -y build-essential# Create directory
cd /opt
# Extract (assuming zip is in current directory)
sudo unzip nmap-dashboard-improved.zip
sudo mv nmap-dashboard-improved RedBoard
cd /opt/RedBoard
# Set ownership (optional, for non-root operation)
sudo chown -R $USER:$USER /opt/RedBoard# Copy example config
cp env_example .env
# Edit configuration
nano .envRecommended .env configuration:
# Server settings
GIN_MODE=release
PORT=8080
# Security - CHANGE THESE!
SESSION_SECRET=your-random-32-char-string-here
ADMIN_PASSWORD=YourSecureAdminPassword123
# Database (SQLite by default)
DB_PATH=./data/dashboard.dbGenerate a secure session secret:
openssl rand -base64 32# Download dependencies
go mod tidy
# Build the binary
go build -o Redteam-Dashboard-go
# Verify it built (ignore SQLite warnings)
ls -la Redteam-Dashboard-goThe database is created automatically on first run. The default admin account is:
- Username:
admin - Password: Value of
ADMIN_PASSWORDin.env(default:changeme)
# Run directly
./Redteam-Dashboard-go
# Or run in background
nohup ./Redteam-Dashboard-go > dashboard.log 2>&1 &Open your browser and navigate to:
http://YOUR_SERVER_IP:8080/login.html
Login with:
- Username:
admin - Password: (your ADMIN_PASSWORD from .env)
| Variable | Default | Description |
|---|---|---|
PORT |
8080 |
HTTP port to listen on |
GIN_MODE |
debug |
Set to release for production |
SESSION_SECRET |
(random) | Secret for session cookies - SET THIS! |
ADMIN_PASSWORD |
changeme |
Initial admin password - CHANGE THIS! |
DB_PATH |
./data/dashboard.db |
SQLite database path |
API_BASE_URL |
`` | Base URL for API (usually leave empty) |
GIN_MODE=release
PORT=8080
SESSION_SECRET=aVeryLongRandomStringAtLeast32Characters
ADMIN_PASSWORD=Competition2024SecurePass!
DB_PATH=/opt/RedBoard/data/dashboard.dbTeams define the target networks to scan. Each team has an IP range that scanners will target.
- Login as admin
- Go to Teams page
- Click + Add Team
- Fill in:
- Name: Team identifier (e.g., "Team 1", "Blue Team Alpha")
- IP Range: CIDR notation (e.g.,
10.1.1.0/24) - Color: For dashboard display (optional)
- Click Create
| Team Name | IP Range |
|---|---|
| Team 1 | 10.1.1.0/24 |
| Team 2 | 10.1.2.0/24 |
| Team 3 | 10.1.3.0/24 |
| Team 4 | 10.1.4.0/24 |
| Team 5 | 10.1.5.0/24 |
| Role | Capabilities |
|---|---|
| Admin | Full access - manage users, teams, jobs, view all data |
| Scanner | Can authenticate and submit scan results |
| Viewer | Read-only access to dashboard and scan results |
- Login as admin
- Go to Users page
- Click + Add User
- Fill in:
- Username: Unique identifier
- Password: Minimum 8 characters
- Roles: Select appropriate roles
- Activate immediately: Enable for immediate access
- Click Create
For the NMAP Agent to connect, create a dedicated scanner user:
- Go to Users → + Add User
- Username:
scanner - Password: (secure password)
- Roles: Enable Scanner only
- Activate immediately: Yes
- Click Create
Use these credentials in the agent's .env file.
- Go to Users page
- Find the user
- Click Password button
- Enter new password (minimum 8 characters)
- Confirm and click Change
- Create a scanner user (see above)
- On the scanner machine, configure
.env:
API_USER=scanner
API_PASS=your_scanner_password
API_URL_BASE=http://DASHBOARD_IP:8080- Run the scanner:
sudo ./nmap-agent-improved- Check the Jobs page - you should see jobs being created
- Watch for jobs transitioning from "running" to "complete"
- Check the Dashboard for scan results appearing
The dashboard includes built-in Swagger API documentation.
Navigate to:
http://YOUR_SERVER_IP:8080/swagger/index.html
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/login |
Authenticate user |
| GET | /auth/users |
List all users (admin) |
| POST | /auth/admin/create-user |
Create new user (admin) |
| PUT | /auth/admin/reset-password/:uid |
Reset password (admin) |
| GET | /teams |
List all teams |
| POST | /teams |
Create team (admin) |
| GET | /jobs |
List all jobs |
| GET | /jobs/nmap/next |
Get next scan job (scanner) |
| POST | /jobs/nmap/:jid |
Upload scan results (scanner) |
| GET | /dashboard/data |
Get dashboard summary |
| GET | /hosts/by-team/:tid |
Get hosts for a team |
Create a service file:
sudo nano /etc/systemd/system/nmap-dashboard.service[Unit]
Description=NMAP Dashboard
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/RedBoard
ExecStart=/opt/RedBoard/Redteam-Dashboard-go
Restart=always
RestartSec=5
Environment=GIN_MODE=release
[Install]
WantedBy=multi-user.targetEnable and start:
sudo systemctl daemon-reload
sudo systemctl enable nmap-dashboard
sudo systemctl start nmap-dashboard
# Check status
sudo systemctl status nmap-dashboard
# View logs
sudo journalctl -u nmap-dashboard -fscreen -S dashboard
cd /opt/RedBoard
./Redteam-Dashboard-go
# Press Ctrl+A, then D to detach
# Reattach later
screen -r dashboard# Allow dashboard port
sudo ufw allow 8080/tcp
# If using a different port
sudo ufw allow YOUR_PORT/tcpCheck for port conflicts:
sudo lsof -i :8080Check logs:
./Redteam-Dashboard-go 2>&1 | head -50Verify Go version:
go version # Should be 1.21+Default credentials:
- Username:
admin - Password: Value of
ADMIN_PASSWORDin.env(default:changeme)
Reset admin password: Delete the database and restart:
rm ./data/dashboard.db
./Redteam-Dashboard-goHard refresh your browser:
- Chrome/Firefox:
Ctrl + Shift + R - Safari:
Cmd + Shift + R
Clear browser cache completely
Check connectivity:
curl http://DASHBOARD_IP:8080/healthVerify scanner user:
- Login to dashboard as admin
- Go to Users
- Verify scanner user exists, has Scanner role, and is active
Check scanner logs for specific error
- Check Jobs page - are jobs completing?
- If jobs show "complete" but no data:
- Check scanner output for upload errors
- Verify job has hosts_found > 0
- If jobs stuck on "running":
- Scanner may have crashed
- Check scanner logs
Reset database:
cd /opt/RedBoard
rm ./dashboard.db
./Redteam-Dashboard-goCheck database permissions:
ls -la ./dashboard.db
# File should be writableSpecify custom database path:
# In .env file:
DB_PATH=/path/to/your/dashboard.db/opt/RedBoard/
├── Redteam-Dashboard-go # Main binary
├── .env # Configuration
├── dashboard.db # SQLite database (default location)
├── static/
│ ├── common.css # Styles
│ └── common.js # JavaScript utilities
├── templates/
│ ├── login.html
│ ├── main.html
│ ├── teams.html
│ ├── jobs.html
│ └── users.html
├── controllers/ # API handlers
├── models/ # Database models
├── middleware/ # Auth middleware
└── server/ # Router setup
- Change default passwords - Update ADMIN_PASSWORD before first run
- Use strong session secret - Generate with
openssl rand -base64 32 - Run behind reverse proxy - Use nginx/caddy with HTTPS in production
- Restrict network access - Use firewall to limit who can reach the dashboard
- Create separate scanner accounts - Don't use admin credentials for scanners
- Regular backups - Back up
./data/dashboard.dbregularly
BSD 2-Clause License