OpenVAS漏洞扫描器从零部署与实战配置指南
2026/8/3 6:53:16 网站建设 项目流程

1. 项目概述:为什么需要OpenVAS?

在安全领域摸爬滚打十几年,我见过太多因为基础安全扫描缺失而导致的“低级”事故。很多团队,尤其是初创公司或业务压力大的开发团队,往往把安全测试的优先级排得很靠后,总觉得有防火墙、定期改密码就够了。直到某天服务器被悄无声息地挂上挖矿脚本,或者用户数据在暗网被明码标价,才追悔莫及。主动的安全漏洞扫描,就像给自家房子做定期的结构安全检查,不能等到墙裂了才想起找原因。

OpenVAS(Open Vulnerability Assessment System)就是一个这样的“房屋结构安全检查仪”。它是一个功能强大且完全开源的漏洞扫描与管理系统。说人话就是,它能自动帮你检查你的服务器、网络设备乃至整个内网,看看有没有那些众所周知的“安全后门”没关好。比如,你的Web服务器是不是还在用着有严重漏洞的旧版本软件?数据库的默认弱密码改了没有?某个网络端口是不是不该对公网开放却被误开了?这些工作如果纯靠人工手动检查,效率极低且容易遗漏,而OpenVAS能帮你自动化、系统化地完成。

它特别适合这几类人:中小企业的运维或安全负责人(预算有限但需求迫切)、个人开发者或极客(想保护自己的VPS和项目)、以及正在学习网络安全的学生和从业者(需要一个免费的、企业级的实操环境)。通过本指南,你将能从头开始,在Linux系统上部署一套属于你自己的、功能完整的OpenVAS漏洞扫描器,并理解如何配置和使用它进行有效的安全评估。整个过程,我会把我在部署和运维中踩过的坑、总结的技巧,毫无保留地分享给你。

2. 部署环境准备与方案选型

在真正动手安装之前,花几分钟搞清楚部署环境和方案,能帮你避开至少80%的后续麻烦。OpenVAS的安装方式主要有两种:一种是使用官方提供的安装脚本或软件包(如.deb.rpm),另一种是使用Docker容器化部署。这里我们主要讨论第一种,也是最经典、可控性最高的方式,适合想要深入理解其组件和运作机制的用户。

2.1 系统要求与资源评估

OpenVAS不是一个轻量级应用。它由多个组件构成,包括扫描引擎、管理端(GSA)和庞大的漏洞数据库(NVT)。因此,它对系统资源有一定要求。

  • 操作系统:官方主要支持Debian/Ubuntu和CentOS/RHEL及其衍生版。本指南以Ubuntu 22.04 LTS为例,因为它拥有广泛的社区支持和稳定的软件源。其他系统步骤类似,但包管理命令和部分路径会有差异。
  • 硬件资源:这是关键。一个用于生产或严肃测试的OpenVAS服务器,建议配置如下:
    • CPU:至少4核。扫描和分析过程是CPU密集型任务,核心越多,并行扫描效率越高。
    • 内存:最低8GB,强烈推荐16GB或以上。在首次同步漏洞数据(NVT)时,以及进行大规模扫描时,内存消耗会非常大。内存不足是安装失败和扫描崩溃的最常见原因。
    • 磁盘空间:至少50GB可用空间,推荐100GB。漏洞数据库本身就会占用几十GB空间,并且扫描报告(尤其是包含详细结果的HTML或PDF报告)也会持续增长。
    • 网络:稳定的网络连接至关重要,尤其是在首次安装和后续更新漏洞库时,需要从互联网下载大量数据。

注意:如果你只是在虚拟机里做学习测试,可以适当降低配置(如2核4GB),但务必给足磁盘空间,并做好首次同步耗时非常长的心理准备。

2.2 安装路径规划与依赖梳理

默认情况下,OpenVAS会将其主要组件安装在以下位置(Ubuntu/Debian系):

  • 主程序及配置文件:/etc/openvas/
  • 漏洞数据库(NVT):/var/lib/openvas/plugins/
  • 日志文件:/var/log/openvas/
  • 生成的报告:/var/lib/openvas/reports/

在安装前,最好检查一下这些路径所在的分区是否有足够空间。你可以使用df -h命令查看。

OpenVAS依赖于一系列其他开源软件,包括:

  • Redis:用作缓存和消息队列,提升性能。
  • PostgreSQL:作为主数据库,存储配置、任务和扫描结果。
  • Mosquitto(可选):MQTT消息代理,用于组件间通信。

幸运的是,在Ubuntu上,我们可以通过APT包管理器一站式解决大部分依赖问题。但我们需要先确保系统是最新的,并添加必要的软件源。

3. 分步安装与初始化配置实录

接下来,我们进入实操环节。请确保你拥有服务器的root权限或sudo权限。

3.1 系统更新与必要工具安装

首先,更新系统软件包列表并升级现有软件,这是一个好习惯。

sudo apt update && sudo apt upgrade -y

安装一些后续步骤可能需要的工具,如用于添加软件源的software-properties-common和用于下载的curl

sudo apt install -y software-properties-common curl

3.2 添加OpenVAS官方仓库并安装

OpenVAS项目本身不直接提供APT仓库,但有一个维护良好的第三方仓库提供了最新的稳定版本。这里我们使用Greenbone社区提供的仓库。

  1. 添加GPG密钥:用于验证软件包的完整性。

    sudo curl -f -L https://www.greenbone.net/gpg/GVM-22.4.5.asc -o /etc/apt/trusted.gpg.d/gvm.asc

    实操心得:如果上述URL无法访问(网络环境问题),可以尝试搜索“Greenbone Community Edition GPG key”寻找备用源,或者直接从Greenbone官方网站的文档中查找最新的密钥地址。密钥添加失败会导致后续添加仓库失败。

  2. 添加软件源:将Greenbone仓库添加到系统源列表。

    sudo add-apt-repository "deb [arch=amd64] https://www.greenbone.net/download/community-22.4/ubuntu jammy main"

    注意:这里的jammy对应 Ubuntu 22.04。如果你使用的是其他版本,如 20.04 (focal),需要相应替换。

  3. 再次更新并安装:添加新源后,必须更新本地包索引。

    sudo apt update

    现在,安装OpenVAS(在Greenbone套件中被称为GVM,即Greenbone Vulnerability Management)的完整套件。

    sudo apt install -y gvm

    这个gvm元包会拉取所有必要的组件,包括扫描器、管理界面、数据库等。

3.3 核心初始化:数据库设置与漏洞数据同步

安装完软件包只是第一步,接下来需要进行繁琐但至关重要的初始化。这一步耗时最长,也最容易出错。

  1. 运行安装后配置脚本:Debian/Ubuntu的gvm包提供了一个配置脚本。

    sudo gvm-setup

    这个脚本会:

    • 初始化PostgreSQL数据库,创建gvmd用户和数据库。
    • 设置系统服务(systemd unit files)。
    • 启动必要的后台服务(gvmd,gsad,openvas-scanner等)。
    • 最关键的一步:开始下载和同步最新的网络漏洞测试(NVT)数据、SCAP(安全内容自动化协议)数据、CERT(计算机应急响应小组)数据等。这个过程会非常漫长,可能需要数小时,具体取决于你的网络速度和服务器性能。脚本会输出进度,请耐心等待,并确保网络连接稳定。

    踩坑记录:在执行gvm-setup时,最常见的错误是“同步失败”或“下载超时”。这通常是因为连接到Greenbone的源服务器网络不稳定。如果遇到此问题,可以尝试:

    1. 多次重试运行sudo gvm-setup
    2. 检查服务器DNS配置,确保能正常解析域名。
    3. 在夜深人静网络空闲时再试。
    4. 如果实在无法完成,可以考虑寻找国内镜像源(如果有的话),但需注意安全性和时效性。
  2. 创建管理员用户:同步完成后,需要创建一个用于登录Web管理界面(Greenbone Security Assistant, GSA)的管理员账户。

    sudo runuser -u _gvm -- gvmd --create-user=admin --password=你的强密码

    请将“你的强密码”替换为一个高强度的密码。例如:

    sudo runuser -u _gvm -- gvmd --create-user=admin --password=MyStr0ngP@ssw0rd2024!

    你也可以选择创建其他名称的用户,admin只是默认的管理员用户名。

  3. 获取管理员用户ID并赋予权限(可选但建议):

    # 获取admin用户的ID sudo runuser -u _gvm -- gvmd --get-users --verbose | grep admin

    输出中会显示类似admin (id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)的信息,复制那个UUID。

    # 将“扫描管理器”角色赋予admin用户(假设获取到的UUID是 aabbccdd...) sudo runuser -u _gvm -- gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value aabbccdd-eeee-ffff-gggg-hhhhhhhhhhhh

    这个操作赋予了admin用户创建和管理扫描任务的完整权限。

3.4 服务启动与状态验证

初始化完成后,确保所有相关服务都已启动并运行正常。

# 启动服务(如果尚未启动) sudo systemctl start gvmd gsad openvas-scanner # 设置开机自启 sudo systemctl enable gvmd gsad openvas-scanner # 检查服务状态 sudo systemctl status gvmd gsad openvas-scanner

你应该看到三个服务的状态都是active (running)。如果有失败,请查看具体的日志文件(/var/log/gvm/目录下)来排查问题。

现在,打开你的浏览器,访问https://你的服务器IP:9392。你会看到Greenbone Security Assistant (GSA)的登录界面。使用刚才创建的admin用户和密码登录。

重要提示:首次登录可能会因为SSL证书是自签名的而出现安全警告。这是正常的,你可以选择“高级”->“继续前往”(或类似选项)。在生产环境中,你应该替换为自己的可信SSL证书。

4. 核心功能配置与首次扫描实战

成功登录GSA界面后,面对功能丰富的仪表盘,新手可能会感到无从下手。别急,我们一步步来,完成一次针对本地主机的快速扫描。

4.1 Web界面概览与基础设置

登录后的主界面主要包括:

  • 仪表盘:显示扫描任务概览、漏洞严重性分布等。
  • 扫描:创建和管理扫描任务的核心区域。
  • 资产:管理目标主机(资产)和资产组。
  • 配置:管理扫描配置、扫描策略、报告格式等。
  • 管理:系统管理功能,如用户、角色、feed更新状态。

首先,我们需要确保漏洞数据是最新的。虽然安装时同步了一次,但漏洞库每天都在更新。

  1. 手动更新漏洞库:在“管理” -> “Feed状态”中,你可以看到NVT、SCAP、CERT等Feed的“当前”和“最新”版本。如果“当前”落后于“最新”,点击右上角的“刷新Feed”按钮(两个绿色箭头循环的图标)。这个过程也需要一些时间。

4.2 创建你的第一个扫描任务

我们将创建一个针对扫描服务器自身(localhost/127.0.0.1)的快速扫描,以验证安装是否成功。

  1. 创建目标

    • 导航到“配置” -> “目标”。
    • 点击左上角的“蓝色星星”图标(新建)。
    • 名称:填入一个易于识别的名字,如My Localhost Test
    • 主机:输入127.0.0.1。你可以输入单个IP、IP范围(如192.168.1.1-100)或CIDR格式的网络段(如192.168.1.0/24)。
    • 端口列表:选择默认的All IANA assigned TCP and Nmap top 100 UDP。这是一个比较全面的端口列表,涵盖了常见服务。
    • 其他选项保持默认,点击“保存”。
  2. 创建扫描配置(可选但推荐)

    • 导航到“配置” -> “扫描配置”。
    • 点击“新建扫描配置”。
    • 名称:例如Quick and Deep
    • 从以下位置复制:选择Full and fast。这是一个很好的平衡了速度和深度的基础配置。
    • 在配置详情页面,你可以调整各种扫描器的参数,例如:
      • NVT 选择:可以启用或禁用某些类别的漏洞检查。
      • 扫描参数:可以设置扫描的并发主机数、并发测试数等,影响扫描速度和资源占用。
    • 对于首次测试,我们可以直接使用内置的Full and fast配置,无需新建。
  3. 创建并启动扫描任务

    • 导航到“扫描” -> “任务”。
    • 点击左上角的“蓝色星星”图标。
    • 扫描目标:选择刚才创建的My Localhost Test
    • 扫描配置:选择Full and fast
    • 扫描器:选择默认的OpenVAS Default
    • 计划:选择“立即”。
    • 名称:给任务起个名,如First Scan on Localhost
    • 点击“保存”。保存后,任务会自动开始运行。

你可以在“扫描” -> “任务”页面看到任务的进度条。点击任务名称可以进入详情页,查看实时发现的漏洞(结果)。首次扫描自己,可能会发现一些“信息性”的日志条目,或者一些关于OpenVAS自身服务端口的“低危”发现,这是正常的。

4.3 报告解读与结果分析

扫描完成后,状态会变为“已完成”。

  1. 查看结果:在任务详情页,切换到“结果”选项卡。这里会列出所有发现的漏洞,按严重性(严重、高、中、低、日志)分类。
  2. 生成报告
    • 在任务行,点击“动作”列下的报告图标(一张纸的形状)。
    • 选择你想要的报告格式,例如HTMLPDF
    • 点击“下载”,即可获取一份格式美观、内容详细的漏洞报告。
  3. 报告内容解读
    • 摘要:漏洞数量统计、严重性分布。
    • 漏洞详情:每个漏洞会包含:
      • 名称:漏洞的通用名称(如Apache HTTP Server 信息泄露漏洞)。
      • 严重性:CVSS评分(一个0-10分的标准分数)。
      • 主机:发现漏洞的IP和端口。
      • 描述:漏洞的详细说明。
      • 影响:该漏洞可能造成的危害。
      • 解决方案:修复建议,例如“升级到Apache版本X.X.X以上”。
      • 参考:指向CVE编号、安全公告等外部链接。

如何对待扫描结果?

  • 严重/高危漏洞:必须优先处理,制定修复计划。
  • 中危漏洞:应尽快安排修复。
  • 低危/日志:可以作为信息参考,在资源允许时优化。
  • 误报:自动化工具难免有误报。对于存疑的漏洞,需要结合人工分析(如查看具体服务版本、配置)来确认。

5. 高级配置、优化与日常运维

一次成功的扫描只是开始。要让OpenVAS在团队或生产环境中稳定、高效地运行,还需要一些额外的配置和优化。

5.1 性能调优与资源限制

OpenVAS默认配置可能不适合所有环境,尤其是资源受限的环境。

  1. 调整扫描器并发度:编辑扫描器配置文件。

    sudo nano /etc/openvas/openvas.conf

    找到max_hostsmax_checks参数。max_hosts控制同时扫描的主机数,max_checks控制对单个主机同时进行的测试数。降低这些值可以减少内存和CPU占用,但会延长扫描时间。例如,在资源紧张的服务器上,可以设置为:

    max_hosts=10 max_checks=5

    修改后重启服务:sudo systemctl restart openvas-scanner

  2. 调整PostgreSQL性能:如果数据库性能成为瓶颈(扫描结果写入慢),可以调整PostgreSQL配置(/etc/postgresql/xx/main/postgresql.conf),适当增加shared_buffers,work_mem等参数的值,但需根据服务器总内存来合理分配。

5.2 定期更新与自动化

漏洞库过期,扫描就失去了意义。必须建立定期更新机制。

  1. 命令行更新:可以设置一个cron任务,定期执行更新。

    # 编辑cron任务 sudo crontab -e # 添加以下行,表示每天凌晨3点执行更新 0 3 * * * sudo runuser -u _gvm -- greenbone-nvt-sync > /dev/null 2>&1 0 4 * * * sudo runuser -u _gvm -- greenbone-feed-sync --type SCAP > /dev/null 2>&1 0 5 * * * sudo runuser -u _gvm -- greenbone-feed-sync --type CERT > /dev/null 2>&1

    注意greenbone-feed-sync命令需要较新版本的GVM(>=21.04)。在老版本中,更新是通过gvm-feed-updateopenvas --update-vt-info等命令完成的。请根据你的实际安装版本查阅对应文档。

  2. Web界面更新:如前所述,也可以在GSA的“管理”->“Feed状态”中手动点击更新。

5.3 常见问题排查与修复

即使安装顺利,在日常使用中也可能遇到问题。这里记录几个典型问题及解决思路。

问题现象可能原因排查与解决步骤
Web界面无法访问(9392端口)1. 服务未启动。
2. 防火墙阻止。
3. GSA服务崩溃。
1.sudo systemctl status gsad检查状态。
2.sudo ufw allow 9392/tcp(如果使用UFW)。
3. 查看日志/var/log/gvm/gsad.log
扫描任务一直“排队中”或“请求中”1. 扫描器服务未运行或异常。
2. 数据库连接问题。
3. 资源不足(内存耗尽)。
1.sudo systemctl status openvas-scanner
2. 检查/var/log/gvm/openvas.log有无错误。
3. 使用free -htop查看内存和CPU使用率。
漏洞库同步失败/缓慢1. 网络连接问题。
2. 源服务器暂时不可用。
3. 磁盘空间不足。
1. 尝试ping www.greenbone.net
2. 等待一段时间再试,或更换网络环境。
3. 使用df -h检查磁盘空间。
登录GSA后仪表盘无数据或空白1. 浏览器缓存问题。
2. GSA前端资源加载失败。
3. 用户权限未正确配置。
1. 尝试Ctrl+F5强制刷新,或使用浏览器无痕模式。
2. 检查浏览器控制台(F12)有无JS错误。
3. 确认登录用户拥有“扫描管理器”等必要角色。
生成报告时出错或报告为空1. 报告格式模块问题。
2. 扫描结果数据异常。
1. 尝试换一种报告格式(如从PDF换到HTML)。
2. 检查任务是否真的已完成并有结果。查看/var/log/gvm/gvmd.log

5.4 安全加固建议

OpenVAS本身是一个安全工具,但其服务端也必须得到保护。

  1. 修改默认端口:将GSA的默认端口从9392改为一个非标准端口,可以减少被自动化脚本扫描的风险。通过修改/etc/default/gsad文件中的GSA_ADDRESSGSA_PORT变量实现。
  2. 使用强密码与多用户:不要只使用一个admin账户。为不同的团队成员创建不同权限级别的账户(如只读用户、扫描操作员等)。定期更换密码。
  3. 配置防火墙:严格限制访问GSA Web界面的源IP地址,只允许运维网段或跳板机访问。
  4. 定期备份:备份PostgreSQL数据库(gvmd库)和/var/lib/openvas/plugins/目录下的漏洞数据。数据库备份命令示例:
    sudo runuser -u postgres -- pg_dump gvmd > /path/to/backup/gvmd_backup_$(date +%Y%m%d).sql

6. 从工具到流程:融入DevSecOps实践

安装配置好OpenVAS,相当于你有了一个强大的“安全雷达”。但工具的价值在于使用。对于现代软件开发团队,更应该考虑如何将它融入CI/CD流水线,实现安全左移。

思路一:集成到CI/CD管道你可以在Jenkins、GitLab CI、GitHub Actions等工具中,在构建或部署阶段后,加入一个OpenVAS扫描步骤。基本流程是:

  1. 通过OpenVAS的API(GVM提供了丰富的REST API)自动创建针对新部署应用或服务器的扫描任务。
  2. 等待扫描完成。
  3. 通过API获取扫描结果报告。
  4. 设定质量门禁:例如,如果发现“严重”或“高危”漏洞,则自动将构建标记为失败,并通知相关负责人。
  5. 将报告归档,作为发布凭证的一部分。

思路二:资产自动发现与周期性扫描对于固定的基础设施(如办公网、生产网段),可以设置周期性(如每周一次)的全面扫描。结合CMDB(配置管理数据库)或简单的IP地址列表,自动更新OpenVAS中的“目标”,实现资产的动态管理和覆盖。

思路三:漏洞生命周期管理OpenVAS发现漏洞只是起点。更重要的是跟踪修复过程。你可以:

  1. 将OpenVAS的报告导入到JIRA、Redmine等项目管理工具中,为每个高危漏洞创建修复工单。
  2. 定期重新扫描已修复的漏洞,进行验证,直到关闭工单。
  3. 通过历史报告,分析团队或系统的安全态势变化趋势。

我自己在团队中推行这套流程时,最大的阻力往往不是技术,而是观念。开发同事会觉得“又被增加了工作量”。我的经验是,不要一开始就追求全自动拦截,而是先从“透明化”开始:每次发布后,自动生成一份简洁的扫描报告,通过邮件或群机器人同步给相关开发和运维同学,不阻塞流程,只做告知。当大家习惯了报告的存在,并亲眼看到其中一些漏洞被外部攻击者利用的案例(可以分享一些无害化的内部演练结果)后,对安全扫描的接受度和配合度就会大大提高。这时再逐步引入关键漏洞的“一票否决”门禁,就水到渠成了。

最后,记住一点:没有任何一个扫描工具是银弹。OpenVAS主要针对已知漏洞(CVE等),对于逻辑漏洞、业务层面的安全问题(如越权、水平权限绕过)几乎无能为力。它应该作为你安全防御体系中的一个重要环节,与代码审计、渗透测试、WAF、IDS/IPS等共同构成纵深防御。保持漏洞库更新,定期运行扫描,认真分析报告并推动修复,这才是让OpenVAS发挥最大价值的关键。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询