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
sudoque pertenezca al grupodocker. - 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.
Importanteescanea solo sistemas que sean tuyos o para los que tengas autorización por escrito. Un escaneo de vulnerabilidades contra terceros puede considerarse un ataque y dar lugar a denuncias de abuso contra tu servidor.
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).
- Ve a Configuration > Targets y pulsa el icono de nuevo objetivo.
- En Name escribe un nombre descriptivo, por ejemplo
Servidor web. - En Hosts introduce la IP del servidor que quieres analizar. Puedes indicar varias separadas por comas o un rango CIDR.
- En Port List deja
All IANA assigned TCPpara empezar. - Guarda el objetivo.
Crea ahora la tarea:
- Ve a Scans > Tasks y pulsa el icono de nueva tarea.
- Dale un nombre y selecciona el objetivo que acabas de crear en Scan Targets.
- En Scan Config deja
Full and fast, que es la configuración recomendada para la mayoría de los casos. - 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 gvmdy Administration > Feed Status. - La tarea se queda en
Interrupted: revisa los logs del escáner condocker compose -f compose.yaml logs ospd-openvas. Suele deberse a falta de memoria; comprueba confree -hque 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 conss -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.
