Skip to main content

OpenVAS (Greenbone Community Edition) — Setup & Usage Guide

LinuxAid provides a Puppet role (role::scanner::openvas) that deploys the full Greenbone Community Edition vulnerability scanner stack using Docker Compose. This guide covers deployment, configuration, and day-to-day usage.


Table of Contents

  1. What Is OpenVAS?
  2. Architecture Overview
  3. Deploying with LinuxAid
  4. Accessing the Web Interface
  5. Understanding the Dashboard
  6. Configuring Scan Targets
  7. Running a Scan
  8. Scheduling Recurring Scans
  9. Reading Scan Results
  10. Exporting Reports
  11. Managing Users
  12. Administration & Maintenance
  13. Troubleshooting
  14. Hiera Parameter Reference

1. What Is OpenVAS?

OpenVAS (Open Vulnerability Assessment Scanner) is the scanner component of the Greenbone Community Edition. It checks your infrastructure for:

  • Accidentally exposed services (e.g., a database port open to the internet)
  • Outdated software with known security vulnerabilities (CVEs)
  • Weak SSL/TLS configurations
  • Missing security patches
  • Firewall misconfigurations

It is designed to scan public-facing IPs to identify vulnerabilities before attackers do.


2. Architecture Overview

The LinuxAid OpenVAS deployment creates a full Greenbone Community Edition stack via Docker Compose:

ComponentPurpose
GSA (Greenbone Security Assistant)Web UI for managing scans and viewing results
GVMD (Greenbone Vulnerability Manager Daemon)Central management service, orchestrates scans
ospd-openvasThe actual scanner engine that probes targets
openvasdHandles Notus advisories for local security checks
pg-gvmPostgreSQL database for scan data and results
redis-serverIn-memory cache used by the scanner
Feed containersOne-shot containers that sync vulnerability data (CVEs, advisories)

3. Deploying with LinuxAid

Prerequisites

  • A Linux server with Docker installed (LinuxAid manages Docker via role::virtualization::docker)
  • At least 4 GB RAM and 20 GB disk space for the scanner and feed data
  • Network access to registry.community.greenbone.net (to pull container images)

Step 1: Add the Role to Your Node

In your Hiera data (node YAML file), add the role::scanner::openvas class:

---
classes:
- role::scanner::openvas

That's it for the basic deployment. LinuxAid will:

  1. Create the install directory (/opt/obmondo/docker-compose/openvas/)
  2. Generate a docker-compose.yml from a template with all component versions
  3. Configure firewall rules to allow access to the web port
  4. Start the Docker Compose stack

Step 2: Run Puppet

Apply the Puppet catalog on the target node:

puppet agent -t

Step 3: Wait for Feed Synchronization

On first startup, the feed containers download vulnerability data. This can take 10–30 minutes depending on network speed.

Monitor container status:

sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas ps -a

Note: Feed containers showing Exited (0) is expected — they run once to sync data and then stop. Only persistent services (gvmd, gsa, redis, pg-gvm, ospd-openvas) should show as Up.


4. Accessing the Web Interface

By default, the GSA web UI binds to 127.0.0.1:9392 (localhost only for security). You need an SSH tunnel to access it.

Open SSH Tunnel

From your local machine:

ssh -L 9392:127.0.0.1:9392 <user>@<scanner-host>

Keep this terminal open — the tunnel stays active as long as the SSH session is running.

Open in Browser

Navigate to:

http://localhost:9392

⚠️ Use http:// NOT https:// — GSA serves plain HTTP internally. The SSH tunnel provides encryption. If you see ERR_SSL_PROTOCOL_ERROR, you're accidentally using https.

Default Admin Login

On first deployment, set the admin password via CLI:

sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas \
exec -u gvmd gvmd gvmd --user=admin --new-password='<STRONG_PASSWORD>'

🔒 Store the password securely in your organization's password manager or secrets store.


5. Understanding the Dashboard

After logging in, you'll see the GSA dashboard with:

SectionWhat It Shows
Scans → TasksAll configured scan tasks and their status (progress %, last run)
Scans → ReportsCompleted scan reports with severity breakdown
Configuration → TargetsServers/IPs being scanned
Configuration → SchedulesAutomated scan schedules
SecInfoVulnerability database (CVEs, advisories)

6. Configuring Scan Targets

Creating a Target

  1. Go to Configuration → Targets → Click ⭐ New Target
  2. Fill in:
FieldDescription
NameA descriptive name (e.g., "Production Public IPs")
HostsComma-separated list of IPs or CIDR ranges to scan
Port ListSelect a port list (default: All IANA Assigned TCP)
  1. Click Save

Best Practices

  • Only scan public IPs — never add private addresses (10.x.x.x, 192.168.x.x) unless you specifically need internal scanning
  • Group related hosts into a single target for easier management
  • Use descriptive names that identify what infrastructure is being scanned

Resolving Hostnames to IPs

If you manage hostnames, resolve them to IPs before adding as targets:

dig +short <hostname>

7. Running a Scan

Creating a Scan Task

  1. Go to Scans → Tasks → Click ⭐ New Task
  2. Fill in:
FieldRecommended Value
NameDescriptive name (e.g., "Weekly Public IP Scan")
Scan TargetsSelect your target
ScannerOpenVAS Default
Scan ConfigFull and fast (recommended for regular scans)
  1. Click Save, then ▶️ Play to start

Scan Config Options

ConfigDurationWhen to Use
Discovery~10 minQuick port/service inventory
Full and fast1–3 hoursWeekly scans (recommended)
Full and fast ultimate3–6 hoursMonthly deep scans
Full and very deep6–12 hoursQuarterly compliance audits

What to Expect

  • First scan duration depends on the number of target IPs
  • Progress is not linear — the scanner spends more time on hosts with many open ports
  • If stuck at the same % for over 1 hour, check the Troubleshooting section

8. Scheduling Recurring Scans

A weekly scan is recommended to catch new vulnerabilities and configuration drift.

Create a Schedule

  1. Go to Configuration → Schedules → Click ⭐ New Schedule
  2. Configure:
FieldRecommended Value
NameWeekly Sunday 2AM
First RunNext Sunday, 02:00
Period1 week
TimezoneYour local timezone
Duration0 (no limit)
  1. Save

Attach Schedule to a Task

  1. Go to Scans → Tasks
  2. Click the ✏️ pencil icon on your scan task
  3. Set Schedule → select your schedule
  4. Save

9. Reading Scan Results

Viewing Results

  1. Go to Scans → Reports
  2. Click on a completed report
  3. Results are sorted by severity (most critical first)

Severity Levels

CVSS ScoreSeverityResponse Time
9.0 – 10.0🔴 CriticalFix immediately — actively exploitable
7.0 – 8.9🔴 HighFix within 24–48 hours
4.0 – 6.9🟡 MediumSchedule fix in current sprint
0.1 – 3.9🟢 LowTrack for future cleanup
0.0LogInformational — no action needed

What to Focus On

Prioritize findings that indicate accidentally exposed services:

  1. Unexpected open ports:

    • Database ports: 3306 (MySQL), 5432 (PostgreSQL), 27017 (MongoDB)
    • Admin interfaces: 8080, 8443, 9090
    • Internal services: 6379 (Redis), 11211 (Memcached), 9200 (Elasticsearch)
  2. Outdated software with known CVEs

  3. Weak SSL/TLS configurations

  4. Missing firewall rules


10. Exporting Reports

  1. Go to Scans → Reports
  2. Select a completed report
  3. Click the ⬇️ download icon
  4. Choose your format:
FormatBest For
PDFSharing with team / management
CSVTracking in spreadsheets
XMLAutomation / integration

11. Managing Users

Creating Users via Web UI

  1. Go to Administration → Users → Click ⭐ New User
  2. Fill in:
FieldValue
Login NameEmployee's username
PasswordSet a strong initial password
RoleUser for read-only, Admin for full access
  1. Save

Creating Users via CLI

# Create a read-only user
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas \
exec -u gvmd gvmd gvmd --create-user=<USERNAME> --password='<PASSWORD>' --role=User

# Create an admin user
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas \
exec -u gvmd gvmd gvmd --create-user=<USERNAME> --password='<PASSWORD>' --role=Admin

Role Permissions

RoleView ResultsExport ReportsRun ScansManage TargetsManage Users
User
Admin

💡 Most users only need the User role — they can view scan results and export reports without risk of accidentally modifying scan configurations.


12. Administration & Maintenance

All commands are run on the scanner host via SSH.

Check Container Status

sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas ps

View Logs

# All services
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas logs -f

# Specific service
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas logs -f gvmd

Stop / Start / Restart

# Stop (preserves data)
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas stop

# Start
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas start

# Restart
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas restart

Reset Admin Password

sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas \
exec -u gvmd gvmd gvmd --user=admin --new-password='<NEW_PASSWORD>'

Updating Vulnerability Feeds

Preferred method: Update via Puppet by bumping version numbers in your Hiera data:

role::scanner::openvas::vulnerability_tests_version: '<NEW_VERSION>'
role::scanner::openvas::notus_data_version: '<NEW_VERSION>'
role::scanner::openvas::scap_data_version: '<NEW_VERSION>'
role::scanner::openvas::cert_bund_data_version: '<NEW_VERSION>'
role::scanner::openvas::dfn_cert_data_version: '<NEW_VERSION>'
role::scanner::openvas::data_objects_version: '<NEW_VERSION>'
role::scanner::openvas::report_formats_version: '<NEW_VERSION>'
role::scanner::openvas::gpg_data_version: '<NEW_VERSION>'

Then run puppet agent -t on the node.

Manual method (if urgent):

# Pull latest feed images
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas pull \
vulnerability-tests notus-data scap-data cert-bund-data dfn-cert-data data-objects report-formats gpg-data

# Run feed containers to sync
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas up -d \
vulnerability-tests notus-data scap-data cert-bund-data dfn-cert-data data-objects report-formats gpg-data

⚠️ Important: Always use -p openvas in all docker compose commands. The compose file has name: greenbone-community-edition internally, but Puppet manages it with project name openvas. Using the wrong project name will show empty results.


13. Troubleshooting

Can't Access the Web UI

ProblemSolution
Page won't loadVerify SSH tunnel is still open in your terminal
ERR_SSL_PROTOCOL_ERRORUse http:// NOT https://
Connection refusedCheck GSA is running: docker compose ... ps gsa
Port not listeningCheck on host: sudo ss -tlnp | grep 9392

Scan Stuck at a Percentage

  • < 1 hour at the same %: This is normal. OpenVAS progress is not linear.
  • > 1 hour at the same %: Check scanner logs:
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas \
logs --tail 30 ospd-openvas

If logs show recent activity → scanner is still working, just slow.

If no recent activity → restart the scanner:

sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas \
restart ospd-openvas

Scan Stuck at 0%

# Check if scanner is registered with gvmd
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas \
exec -u gvmd gvmd gvmd --get-scanners

Feed Sync Failed

# Find containers that exited with errors (non-zero exit code)
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas ps -a | grep -v "Exited (0)"

# Restart failed feed containers
sudo docker compose -f /opt/obmondo/docker-compose/openvas/docker-compose.yml -p openvas up -d \
vulnerability-tests notus-data scap-data

ℹ️ Feed containers showing Exited (0) is expected — they run once to sync data and then stop.


14. Hiera Parameter Reference

All parameters are under the role::scanner::openvas namespace.

Installation & Web Interface

ParameterTypeDefaultDescription
install_dirStdlib::Absolutepath/opt/obmondo/docker-compose/openvasInstallation directory
installBooleantrueWhether to install the scanner
web_bind_addressStdlib::Host127.0.0.1Web UI bind address
web_portStdlib::Port9392Web UI port

Container Registry

ParameterTypeDefaultDescription
registryStringregistry.community.greenbone.net/communityDocker registry for images

Component Versions

ParameterDefaultComponent
gsa_version24.3.0GSA Web UI
gvmd_version25GVMD Manager
openvas_scanner_version23.15.4OpenVAS Scanner
ospd_openvas_version22.8.0OSP-OpenVAS
gvm_tools_version25GVM Tools
pg_gvm_version22.6.7PostgreSQL GVM
redis_server_version1.1.0Redis Server

Feed Versions

ParameterDefaultFeed
vulnerability_tests_version202502250742Vulnerability Tests (NVTs)
notus_data_version202502250410Notus Advisories
scap_data_version202502240506SCAP Data (CVEs)
cert_bund_data_version202502250409CERT-Bund Advisories
dfn_cert_data_version202502250401DFN-CERT Advisories
data_objects_version202502250505Data Objects
report_formats_version202502250500Report Formats
gpg_data_version1.1.0GPG Data
feed_release_version24.10Feed Release

Paths

ParameterDefaultDescription
data_mount_path/mntData mount path inside containers
gvm_data_path/var/lib/gvmGVM data path
openvas_plugins_path/var/lib/openvas/pluginsOpenVAS plugins path
openvas_config_path/etc/openvasOpenVAS configuration path
openvas_log_path/var/log/openvasOpenVAS log path
notus_path/var/lib/notusNotus data path
storage_path/var/lib/openvas/22.04/vt-data/naslVT storage path
redis_socket_path/run/redisRedis socket path
gvmd_socket_path/run/gvmdGVMD socket path
ospd_socket_path/run/ospdOSPD socket path
psql_data_path/var/lib/postgresqlPostgreSQL data path
psql_socket_path/var/run/postgresqlPostgreSQL socket path

openvasd

ParameterTypeDefaultDescription
openvasd_modeEnum['service_notus']service_notusopenvasd mode
openvasd_addressportEit_types::AddressPort0.0.0.0:80openvasd listen address

Automatic Hiera Defaults

When using role::scanner::openvas, the following Hiera data is automatically applied:

common::network::firewall::enable_forwarding: true
common::network::firewall::allow_docker: true

Puppet Code Structure

modules/enableit/
├── role/manifests/scanner/openvas.pp # Role class (parameters & defaults)
├── profile/manifests/scanner/openvas.pp # Profile class (implementation)
├── profile/templates/scanner/openvas/
│ └── docker-compose.yaml.epp # Docker Compose template
└── common/data/role/
└── role::scanner::openvas.yaml # Automatic Hiera data

Further Reading