OpenVAS es el motor de escaneo de vulnerabilidades de Greenbone Community Edition, la versión libre de la plataforma de Greenbone. Incluye el escáner, el gestor gvmd, una interfaz web y decenas de miles de pruebas de vulnerabilidades (NVT) que se actualizan a diario. En este tutorial desplegarás Greenbone Community Edition en Ubuntu 24.04 con los contenedores oficiales y Docker Compose, que es el método de instalación que mantiene Greenbone, y lanzarás un primer escaneo contra un servidor tuyo.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath. Greenbone recomienda 4 vCPU, 8 GB de RAM y 60 GB de disco; el mínimo es 2 vCPU, 4 GB de RAM y 20 GB.
  • Un usuario no root con privilegios sudo que pertenezca al grupo docker.
  • Docker Engine y el plugin Docker Compose instalados desde el repositorio oficial de Docker.
  • Acceso SSH desde tu equipo, que usarás para abrir un túnel hacia la interfaz web.

Paso 1: Comprobar Docker

Confirma que Docker y Compose funcionan con tu usuario sin sudo:

docker version --format '{{.Server.Version}}'
docker compose version
28.4.0
Docker Compose version v2.39.4

Si el primer comando falla con permission denied, añade tu usuario al grupo docker con sudo usermod -aG docker $USER, cierra la sesión SSH y vuelve a entrar.

Paso 2: Descargar el fichero Compose oficial

Greenbone publica un compose.yaml que define todos los servicios: la base de datos PostgreSQL, Redis, gvmd, el escáner ospd-openvas, la interfaz web gsa y un contenedor por cada feed de datos. Crea un directorio para el despliegue y descarga el fichero:

mkdir -p ~/greenbone-community-container
cd ~/greenbone-community-container
curl -f -O -L https://greenbone.github.io/docs/latest/_static/compose.yaml

Revisa qué servicios contiene y en qué puerto publica la interfaz web:

docker compose -f compose.yaml config --services
grep '9392' compose.yaml
      - 127.0.0.1:9392:80

La interfaz web solo escucha en 127.0.0.1, así que no queda expuesta a Internet. Mantenlo así: accederás a ella a través de un túnel SSH.

Paso 3: Descargar las imágenes y arrancar los servicios

Descarga todas las imágenes. Son varios GB, porque los contenedores de datos incluyen los feeds de vulnerabilidades:

docker compose -f compose.yaml pull

Arranca el conjunto en segundo plano:

docker compose -f compose.yaml up -d

Comprueba el estado de los contenedores:

docker compose -f compose.yaml ps --format 'table {{.Service}}\t{{.Status}}'
SERVICE           STATUS
gsa               Up 2 minutes
gvmd              Up 2 minutes
ospd-openvas      Up 2 minutes
pg-gvm            Up 2 minutes
redis-server      Up 2 minutes

Los contenedores de datos (vulnerability-tests, scap-data, cert-bund-data y similares) copian los feeds a volúmenes compartidos y terminan, así que es normal que no aparezcan como Up.

Paso 4: Esperar a que se carguen los feeds

Tras el primer arranque, gvmd y el escáner importan los feeds a la base de datos. Este proceso puede tardar entre 30 minutos y varias horas según la CPU y el disco, y hasta que termine no podrás lanzar escaneos completos. Sigue el progreso en los logs de gvmd:

docker compose -f compose.yaml logs -f gvmd

Verás mensajes sobre la actualización de SCAP, CERT y de las configuraciones de escaneo. Pulsa Ctrl+C para salir del seguimiento; los contenedores siguen funcionando.

Paso 5: Cambiar la contraseña del administrador

El despliegue crea un usuario admin con la contraseña admin. Cámbiala antes de usar la interfaz, sustituyendo your_strong_password por una contraseña robusta:

docker compose -f compose.yaml exec -u gvmd gvmd gvmd --user=admin --new-password='your_strong_password'

El comando no muestra nada si termina bien. Para evitar que la contraseña quede en el historial de la shell, puedes borrar esa línea después con history -d o anteponer un espacio al comando si tu shell tiene HISTCONTROL=ignorespace.

Paso 6: Acceder a la interfaz web por túnel SSH

Desde tu equipo local, abre un túnel que reenvíe el puerto 9392 local al 9392 del servidor. Sustituye your_user y your_server_ip por tus datos:

ssh -N -L 9392:127.0.0.1:9392 your_user@your_server_ip

Deja esa terminal abierta y visita http://127.0.0.1:9392 en tu navegador. Inicia sesión con el usuario admin y la contraseña del paso anterior.

En Administration > Feed Status verás el estado de cada feed. Cuando todos muestren Current en lugar de Update in progress..., el sistema está listo para escanear.

Paso 7: Crear un objetivo y lanzar un escaneo

Un escaneo en Greenbone se compone de un objetivo (qué hosts y puertos) y una tarea (qué configuración de escaneo usar contra ese objetivo).

  1. Ve a Configuration > Targets y pulsa el icono de nuevo objetivo.
  2. En Name escribe un nombre descriptivo, por ejemplo Servidor web.
  3. En Hosts introduce la IP del servidor que quieres analizar. Puedes indicar varias separadas por comas o un rango CIDR.
  4. En Port List deja All IANA assigned TCP para empezar.
  5. Guarda el objetivo.

Crea ahora la tarea:

  1. Ve a Scans > Tasks y pulsa el icono de nueva tarea.
  2. Dale un nombre y selecciona el objetivo que acabas de crear en Scan Targets.
  3. En Scan Config deja Full and fast, que es la configuración recomendada para la mayoría de los casos.
  4. Guarda la tarea y pulsa el botón de inicio (el triángulo) en la lista de tareas.

El estado pasará a Requested, luego a Running con un porcentaje de progreso y, al terminar, a Done. Un escaneo Full and fast de un solo servidor suele durar entre 10 y 40 minutos.

Si el servidor que escaneas expone servicios con login, puedes crear una credencial SSH en Configuration > Credentials y asociarla al objetivo. Con acceso autenticado, OpenVAS comprueba las versiones de los paquetes instalados y detecta muchas más vulnerabilidades que desde fuera.

Paso 8: Revisar el informe

Cuando la tarea esté en Done, pulsa sobre la fecha del último informe o ve a Scans > Reports. El informe agrupa los resultados por severidad (High, Medium, Low, Log) según su puntuación CVSS. En cada resultado encontrarás:

  • Summary y Detection Result: qué se ha detectado y cómo.
  • Solution: la acción recomendada, normalmente actualizar un paquete o cambiar una configuración.
  • References: los CVE y avisos de seguridad relacionados.

Empieza por los resultados High en servicios expuestos a Internet. Para compartir el informe, usa el botón de descarga y elige el formato (PDF, XML, CSV o TXT, entre otros).

Tras corregir un problema, vuelve a lanzar la misma tarea y compara los informes para confirmar que el hallazgo ha desaparecido.

Paso 9: Mantener los feeds y las imágenes actualizados

Los feeds de la Community Edition se publican a diario dentro de las imágenes de datos. Para actualizar feeds y servicios a la vez, descarga las imágenes nuevas y recrea los contenedores que hayan cambiado:

cd ~/greenbone-community-container
docker compose -f compose.yaml pull
docker compose -f compose.yaml up -d

Si quieres automatizarlo, programa esos dos comandos en el crontab de tu usuario una vez al día fuera del horario de escaneos:

crontab -e
30 4 * * * cd $HOME/greenbone-community-container && docker compose -f compose.yaml pull -q && docker compose -f compose.yaml up -d

Como el fichero compose.yaml evoluciona con las nuevas versiones de Greenbone, vuelve a descargarlo de vez en cuando y revisa las notas de la versión antes de sustituirlo.

Solución de problemas

  • La lista de configuraciones de escaneo o de puertos está vacía: los feeds aún se están cargando. Espera y revisa docker compose -f compose.yaml logs gvmd y Administration > Feed Status.
  • La tarea se queda en Interrupted: revisa los logs del escáner con docker compose -f compose.yaml logs ospd-openvas. Suele deberse a falta de memoria; comprueba con free -h que el servidor no se queda sin RAM durante el escaneo.
  • Todos los hosts aparecen como caídos: por defecto Greenbone hace un descubrimiento previo con ICMP y TCP. Si el objetivo bloquea el ping, edita el objetivo y cambia Alive Test a Consider Alive.
  • El navegador no carga http://127.0.0.1:9392: comprueba que el túnel SSH sigue abierto y que en el servidor el puerto está escuchando con ss -tlnp | grep 9392.

Conclusión

Tienes Greenbone Community Edition funcionando en contenedores, con la interfaz web protegida detrás de un túnel SSH, los feeds cargados y un primer informe de vulnerabilidades. Los siguientes pasos lógicos son programar escaneos periódicos con Configuration > Schedules, añadir credenciales SSH para escaneos autenticados y combinar los resultados con un SIEM como Wazuh para seguir la remediación.