三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

告别虚拟机!5分钟在Docker里跑起OpenVAS漏洞扫描器(附最新镜像拉取命令)

告别虚拟机!5分钟在Docker里跑起OpenVAS漏洞扫描器(附最新镜像拉取命令)

5分钟容器化部署OpenVAS:轻量级漏洞扫描实战指南

在安全测试领域,快速搭建可复用的扫描环境一直是刚需。传统虚拟机部署OpenVAS往往需要消耗数GB内存和半小时以上的安装时间,而容器化方案将部署时间缩短到喝杯咖啡的功夫。本文将演示如何用Docker快速拉起最新OpenVAS镜像,并分享几个提升扫描效率的实用技巧。

1. 环境准备与镜像获取

OpenVAS的官方Docker镜像已更新至2024年稳定版,相比虚拟机方案节省90%的磁盘空间。执行以下命令获取最新镜像:

docker pull immauss/openvas:latest

这个社区维护的镜像已包含完整的Greenbone社区版组件,体积约2.4GB。建议配置至少4GB内存的Linux主机或云服务器,Windows/macOS用户需确保Docker Desktop已启用虚拟化支持。

常见问题排查:

  • 若拉取速度慢,可尝试--platform linux/amd64参数
  • 国内用户可配置镜像加速器
  • 首次启动需要下载漏洞数据库,约占用5GB额外空间

2. 一键启动容器服务

通过docker-compose实现服务编排是最佳实践。创建docker-compose.yml文件:

version: '3' services: openvas: image: immauss/openvas:latest ports: - "9392:9392" volumes: - openvas_data:/data environment: - HTTPS=true - PASSWORD=YourSecurePassword123 restart: unless-stopped volumes: openvas_data:

关键配置说明:

参数作用推荐值
portsWeb界面端口映射9392:9392
volumes漏洞数据库持久化命名volume
PASSWORD管理员初始密码12位以上混合字符
restart异常自动恢复unless-stopped

启动命令:

docker-compose up -d

3. 首次访问与基础配置

容器启动约3分钟后,访问https://localhost:9392(替换为实际服务器IP)会出现登录界面。使用默认凭证:

  • 用户名:admin
  • 密码:docker-compose.yml中设置的密码

安全建议:

  1. 立即修改默认密码
  2. 在Configuration > Users中创建独立测试账号
  3. 开启双因素认证(需安装TOTP插件)

首次登录后会看到仪表盘提示"Feed Update in Progress"。这是后台正在同步最新漏洞数据库,可通过命令查看进度:

docker exec -it openvas bash -c "greenbone-feed-sync"

4. 创建扫描任务实战

我们以扫描测试网站http://testphp.vulnweb.com为例:

  1. 新建目标
    在Configuration > Targets中添加:

    • 名称:Demo_WebApp
    • 主机列表:testphp.vulnweb.com
    • 端口列表:80,443
  2. 配置扫描策略
    选择Scan Configs > Full and fast,关键参数:

    { "alive_test": "ICMP Ping", "port_range": "1-65535", "reverse_lookup": false }
  3. 启动扫描
    在Scans > Tasks创建新任务:

    • 名称:Quick_Test
    • 扫描目标:选择刚创建的Demo_WebApp
    • 计划:立即执行

性能优化技巧:

  • 内网扫描可关闭Optimize Test选项
  • 对关键系统使用Full and very deep策略
  • 设置定时扫描自动生成对比报告

5. 报告解读与数据持久化

扫描完成后,在Reports页面可看到类似这样的漏洞分布:

风险等级数量典型漏洞
High3SQL注入, XSS
Medium7CSRF, 信息泄露
Low12配置不当

导出报告支持多种格式:

# 获取最新报告ID report_id=$(docker exec openvas gvm-cli --gmp-username admin --gmp-password $PASSWORD --xml "<get_reports/>" | grep -oP 'report id="\K[^"]+') # 导出PDF docker exec openvas gvm-cli --gmp-username admin --gmp-password $PASSWORD --xml "<get_reports report_id='$report_id' format='PDF'/>" > report.pdf

数据备份方案:

  1. 定期打包volume数据:
    docker run --rm -v openvas_data:/data -v $(pwd):/backup busybox tar czvf /backup/openvas_backup_$(date +%s).tar.gz /data
  2. 使用--volumes-from参数迁移到新主机
  3. 设置cronjob自动备份到云存储

6. CI/CD集成方案

将OpenVAS集成到自动化流程需要关注:

  1. API调用
    通过GMP协议实现任务触发:

    import gvm from gvm.protocols.gmp import Gmp connection = gvm.connections.TLSConnection(hostname='openvas') with Gmp(connection=connection) as gmp: gmp.authenticate('api_user', 's3cr3t') task_id = gmp.create_task(name='AutoScan', target_id='...') gmp.start_task(task_id)
  2. 质量门禁
    在Jenkins pipeline中添加检查:

    stage('Security Scan') { steps { sh '''docker run --network host --rm immauss/openvas \ gvm-cli --gmp-username ci_user --gmp-password $GVM_PASS \ --xml "<get_results task_id='${TASK_ID}' severity='>6.5'/>" | grep -q "result" && exit 1 || exit 0''' } }
  3. 资源控制
    限制扫描并发度和频率:

    # docker-compose.yml deploy: resources: limits: cpus: '2' memory: 4G

7. 性能调优与问题排查

常见性能瓶颈解决方案:

  • 内存不足
    修改扫描器配置:

    docker exec openvas gvm-cli --gmp-username admin --gmp-password $PASSWORD --xml ' <modify_scanner scanner_id="08b69003-5fc2-4037-a479-93b440211c73"> <preference> <name>max_checks</name> <value>10</value> </preference> <preference> <name>max_hosts</name> <value>5</value> </preference> </modify_scanner>'
  • 扫描速度慢
    调整NVT线程数:

    UPDATE preferences SET value = '20' WHERE name = 'max_checks';
  • 数据库不同步
    强制重建feed:

    docker exec openvas rm -rf /data/feed-data/* docker restart openvas

监控容器状态命令:

watch -n 5 'docker stats --no-stream openvas && docker exec openvas gvm-cli --gmp-username admin --gmp-password $PASSWORD --xml "<get_tasks/>"'

实际项目中遇到过feed更新中断的情况,通过增加docker-compose.yml中的超时参数解决:

environment: - GVMD_FEED_UPDATE_TIMEOUT=3600
← 返回列表