
1. 项目概述为什么我们需要自己的漏洞扫描平台在安全测试和日常运维的圈子里Nessus的大名几乎无人不知。它功能强大、扫描精准是很多安全团队和渗透测试人员的首选工具。但问题也随之而来高昂的商业授权费用、复杂的许可证管理以及对个人学习者和初创团队来说难以承受的持续订阅成本。很多时候我们只是需要一个稳定、可靠、能深度定制的漏洞扫描器来对内部网络、Web应用或特定资产进行周期性安全检查却不得不面对“工具虽好用不起”的尴尬。这就是为什么今天我想聊聊OpenVAS。它不是一个新工具但在Kali Linux这个渗透测试“瑞士军刀”的加持下它能焕发出惊人的能量。OpenVAS全称Open Vulnerability Assessment System是一个功能完备的开源漏洞扫描与管理系统。它从Nessus早期版本分支而来经过多年社区发展已经形成了包括扫描引擎、中央管理服务、Web界面和庞大漏洞库在内的完整生态。最关键的是它完全免费并且其漏洞库NVT更新非常活跃。搭建自己的OpenVAS平台意味着你获得了一个7x24小时待命的“自动化安全审计员”。你可以用它来周期性资产盘点与漏洞发现定时扫描内网服务器、网络设备及时发现新上线的资产和暴露的漏洞。合规性检查针对PCI DSS、HIPAA等安全标准进行基线扫描。渗透测试前置工作在手动深入测试前快速获取目标的攻击面概览。安全意识提升用于内部红蓝对抗或安全演练让开发运维团队直观看到自己负责系统的安全问题。相比于直接使用Nessus自己搭建OpenVAS的挑战在于初始配置和优化。网上很多教程要么过于简略要么步骤陈旧导致新手在安装过程中就踩坑放弃。这篇文章我将基于最新的Kali Linux Rolling版本带你从零开始手把手搭建一个高性能、可用的OpenVAS漏洞扫描平台并分享我多年使用中积累的配置技巧和避坑指南。你会发现拥有一个属于自己的、完全可控的漏洞扫描平台并没有想象中那么难。2. 环境准备与OpenVAS部署详解在Kali Linux上部署OpenVAS官方提供了非常便捷的安装脚本但这并不意味着我们可以无脑下一步。一个稳定、高效的扫描平台从环境准备阶段就需要精心规划。2.1 系统更新与依赖检查首先确保你的Kali Linux系统是最新的。这不是一句空话因为OpenVAS的组件尤其是其核心的gvmdGreenbone漏洞管理器和gsaGreenbone安全助手即Web界面对系统库的版本有一定要求。sudo apt update sudo apt full-upgrade -y执行升级后强烈建议重启系统以确保所有内核更新和库变更生效。接下来我们需要安装一些基础依赖这些依赖可能不会被OpenVAS安装脚本自动覆盖但却是某些功能或后续优化所必需的。sudo apt install -y curl wget gnupg software-properties-common这里特别提一下software-properties-common它提供了add-apt-repository命令虽然我们本次安装不一定用到但保不齐后续需要添加其他软件源先装上以备不时之需。2.2 使用官方脚本安装OpenVASGreenbone社区提供了自动化安装脚本这是目前最推荐的方式。它相比从源码编译或通过复杂的包管理安装要省心得多。# 下载安装脚本 wget https://raw.githubusercontent.com/greenbone/community-scripts/main/install-gvm.sh # 赋予脚本执行权限 chmod x install-gvm.sh # 以root权限执行安装 sudo ./install-gvm.sh执行这个脚本后它会做以下几件大事添加Greenbone官方软件源将稳定的软件仓库地址加入你的系统。安装所有核心组件包括gvmd、gsad、openvas-scanner扫描引擎以及postgresql数据库。下载并同步漏洞库NVT这是最耗时的一步需要从社区源下载数以万计的漏洞检测插件。创建默认管理员用户脚本会提示你为Web界面设置一个管理员密码。注意整个安装过程特别是同步漏洞库可能会持续30分钟到2小时具体取决于你的网络速度和硬件性能。期间请保持网络连接稳定如果中断可能需要重新执行同步步骤。安装脚本运行完毕后它会输出关键信息比如Web访问地址通常是https://127.0.0.1:9392和创建的用户名默认是admin。请务必记下这些信息。2.3 安装后的关键服务管理与验证安装完成不等于万事大吉。我们需要确保所有相关服务都已正确启动并设置为开机自启。# 启动所有OpenVAS相关服务 sudo systemctl start postgresql sudo systemctl start gvmd sudo systemctl start gsad sudo systemctl start openvas-scanner # 设置开机自启 sudo systemctl enable postgresql gvmd gsad openvas-scanner # 检查服务状态确保都是active (running) sudo systemctl status gvmd sudo systemctl status gsad sudo systemctl status openvas-scanner如果任何服务状态不是active (running)需要根据status命令输出的日志journalctl -u 服务名进行排查。常见问题包括端口冲突、数据库连接失败或权限错误。最后打开你的浏览器访问https://127.0.0.1:9392如果Kali是虚拟机或远程服务器请替换为对应的IP地址。首次访问会看到安全证书警告这是因为使用的是自签名证书直接点击“高级”-“继续前往”即可。使用安装时设置的管理员账号密码登录看到Greenbone Security Assistant的Web界面就说明平台基础部署成功了。3. 核心配置与扫描策略定制化登录进OpenVAS的Web界面GSA你会发现功能模块很多。对于新手直接从“扫描”-“任务”开始创建扫描是最直观的但在此之前做好基础配置能让后续的扫描事半功倍。3.1 初始配置与Feed更新首次使用首要任务是更新所有资料源Feed。Feed是OpenVAS的“知识库”包括漏洞检测插件NVT、安全合规策略SCAP、认证数据库CERT等。只有Feed是最新的扫描器才能识别最新的漏洞。在Web界面点击左侧菜单栏的“管理” - “Feed状态”。你会看到各个Feed的“状态”和“当前”版本。点击右上角的“动作”下拉框选择“更新”。这个过程会从Greenbone社区服务器拉取更新可能需要一些时间。务必确保所有Feed的状态都变为“当前”这是扫描有效性的基础。接下来配置扫描器。进入“配置” - “扫描器”。默认会有一个名为“OpenVAS Default”的扫描器。点击它进入编辑这里有几个关键参数主机扫描器服务运行的IP默认127.0.0.1如果扫描引擎部署在其他机器需修改。端口扫描器监听端口默认9390。CA证书和证书用于加密通信默认使用自生成的即可。保持默认设置通常可以工作但如果你计划进行大规模分布式扫描则需要在这里进行更详细的配置。3.2 深入理解与创建扫描配置“扫描配置”是OpenVAS的灵魂它定义了扫描的“行为模式”查什么、怎么查、查多深。系统预置了很多配置比如“Full and fast”、“Full and very deep”。理解它们的区别至关重要。Full and fast最常用的平衡型配置。它执行了绝大多数漏洞检查但跳过了一些耗时极长或可能造成服务中断的测试例如某些暴力破解或DoS测试。适合日常周期性扫描。Full and very deep顾名思义最全面的配置。它会启用所有可用的测试包括那些耗时、耗资源且具有潜在破坏性的测试。除非在授权测试的特定时间窗口否则不要在生产环境使用此配置它可能导致服务瘫痪。Host Discovery仅用于发现存活主机和开放端口不进行漏洞检测。适合资产发现阶段。System Discovery在主机发现的基础上尝试识别操作系统和服务版本。对于大多数场景我建议基于“Full and fast”创建自己的定制配置。点击“配置” - “扫描配置”然后点击“Full and fast”旁边的蓝色文档图标克隆。给你的新配置起个名字比如“My_Custom_Web_Scan”。在新配置的编辑页面你可以精细调整选择NVT家族你可以禁用整个你不关心的漏洞家族。例如如果你的目标全是Linux服务器可以禁用“Windows”相关的家族这能显著提升扫描速度。调整单个NVT的偏好对于某些检查你可以修改其参数。例如在“General”家族下找到“Ping Host”插件你可以修改其“报告未响应主机”的选项。设置扫描参数这是高级功能。在“扫描配置”编辑页面的“偏好设置”中可以设置并发主机数、并发测试数、插件超时时间等。对于性能调优这里至关重要。例如将“最大并发主机数”从默认的10调整为5可以降低对扫描目标和扫描主机自身的资源压力。3.3 目标定义与资产管理定义好“怎么扫”接下来要定义“扫谁”。这就是“目标”配置。点击“资产” - “目标” - 新建。一个完整的目标准备包括名称易于识别的名字如“Internal-Web-Servers”。主机支持多种格式。单个IP192.168.1.100IP范围192.168.1.1-192.168.1.254CIDR网段192.168.1.0/24主机名www.example.com确保DNS可解析端口列表选择要扫描的端口范围。预置列表如“All TCP and Nmap top 100 UDP”很常用。对于Web应用可以自定义一个只包含80, 443, 8080, 8443等端口的列表加快扫描速度。存活测试建议选择“Scan Config Default”或“ICMP Ping”。如果目标禁了Ping可以选择“TCP-SYN Ping”或“TCP-ACK Ping”到特定端口如80, 443。逆向查找是否对找到的IP进行PTR记录查询有助于资产识别。端口扫描器默认的“OpenVAS Scanner”即可。一个关键的实操心得对于大型网络不要一次性定义一个包含数千个IP的“大目标”。最好按网段或业务单元划分成多个中小型目标。这样不仅管理清晰在任务调度和故障排查时也方便得多。你可以利用“资产” - “主机”视图让OpenVAS自动整理和归集发现的主机。4. 执行扫描与结果深度分析配置好扫描策略和目标就可以创建并执行扫描任务了。任务是将配置、目标、时间计划等元素组合起来的执行单元。4.1 创建与调度扫描任务进入“扫描” - “任务”点击“新建任务”。需要填写以下核心字段名称任务名称如“Weekly-Scan-for-Web”。扫描目标选择之前创建好的目标。扫描配置选择你定制的扫描配置如“My_Custom_Web_Scan”。扫描器选择“OpenVAS Default”。计划这是实现自动化的关键。你可以选择“一次”立即执行或者设置一个周期计划如每天、每周。点击日历图标可以设置具体的开始日期、时间和重复周期。创建任务后它会出现在任务列表。点击任务旁边的“播放”按钮开始图标即可启动。任务状态会从“新建”变为“请求中”、“运行中”最后到“已完成”。注意扫描时间预估。扫描耗时与目标数量、开放端口数量、选择的扫描配置深度直接相关。扫描一个包含10个主机的/24网段使用“Full and fast”配置可能只需要几十分钟。但扫描一个开放了上百个端口的单个服务器使用“Full and very deep”配置则可能需要数小时。在控制台你可以通过sudo gvm-cli socket --socketpath /run/gvmd/gvmd.sock --get-tasks命令查看任务详情和进度。4.2 解读扫描报告与漏洞定级扫描完成后报告会自动生成。点击任务名称进入“结果”标签页这里列出了所有发现的问题。OpenVAS使用CVSS通用漏洞评分系统对漏洞进行严重性分级用颜色和数字表示红色/10.0-9.0 (危急)通常意味着远程代码执行、严重权限提升等可直接导致系统沦陷的漏洞。需要立即处理。橙色/8.9-7.0 (高危)例如SQL注入、重要的信息泄露、可导致进一步攻击的中等风险漏洞。需要优先安排修复。黄色/6.9-4.0 (中危)如跨站脚本XSS、配置不当、版本信息泄露等。需要评估业务上下文风险后修复。绿色/3.9-0.1 (低危)通常是一些信息性提示如HTTP头信息、无关紧要的横幅信息等。可酌情处理。蓝色/0.0 (日志)非漏洞信息如扫描过程的技术日志。深度分析的关键不要只看严重性等级。点击任何一个漏洞结果你会看到详细信息页面包括描述漏洞的详细说明。影响该漏洞可能造成的具体后果。解决方案官方或社区提供的修复建议如升级版本、打补丁、修改配置等。这是给开发或运维团队最直接的行动指南。受影响软件/系统精确到版本号。CVSS向量展示了漏洞在攻击向量、复杂度、所需权限、影响范围等维度的评分构成帮助你理解风险细节。参考信息提供CVE编号、安全公告链接等方便你进一步查阅。4.3 报告导出与集成OpenVAS支持导出多种格式的报告便于归档、分享或导入其他系统。PDF格式美观适合直接提交给管理层或客户。HTML交互性好可以离线查看且保留链接跳转功能。XML包含最完整的数据适合导入到其他安全运维平台如SIEM或进行二次分析。CSV适合用Excel进行简单的数据筛选和统计。在报告页面点击“导出”图标选择需要的格式即可。我个人的习惯是每次周期性扫描后同时导出PDF用于存档和汇报和XML用于内部数据平台集成两种格式。5. 性能调优、维护与故障排查一个部署好的OpenVAS平台需要持续的维护和优化才能保证其长期稳定、高效地运行。5.1 性能调优实战指南OpenVAS在默认配置下可能无法充分发挥硬件性能或者在对大量目标扫描时显得力不从心。以下是一些关键的调优点调整扫描器并发参数这是最有效的调优手段。通过修改扫描配置的“偏好设置”见3.2节可以调整max_hosts同时扫描的最大主机数。默认10。如果你的扫描目标网络带宽大、主机性能好可以适当增加如20。如果目标网络环境复杂或设备老旧应减少如5避免网络拥塞或目标宕机。max_checks对同一主机同时进行的最大漏洞检查数。默认10。增加此值如15-20能显著提升单主机扫描速度但会大幅增加该主机的CPU和内存负载务必谨慎。plugins_timeout单个插件NVT的超时时间。默认值比较保守。对于已知响应慢的服务可以单独增加对应插件的超时对于整体网络如果稳定但延迟高可以全局适当增加超时避免误报。优化数据库性能OpenVAS使用PostgreSQL。随着扫描数据积累数据库可能变慢。定期执行vacuum和reindex操作可以提升性能。可以通过Greenbone提供的维护脚本或手动执行SQL命令来完成。硬件资源分配OpenVAS是资源消耗大户尤其是CPU和内存。确保你的Kali Linux虚拟机或物理机有足够的资源。一个经验法则计划扫描的目标规模越大、配置越深所需资源就越多。对于中小型网络500 IP建议分配至少4核CPU、8GB内存。扫描时使用top或htop命令监控openvas-scanner和gvmd进程的资源使用情况。5.2 日常维护与更新定期更新Feed漏洞库日新月异。建议至少每周手动或通过cron定时任务更新一次Feed。可以在Web界面操作也可以用命令行sudo greenbone-feed-sync --type all。定期更新系统与组件关注Greenbone社区的公告定期使用sudo apt update sudo apt upgrade来升级gvm相关的软件包以获取功能更新和安全补丁。清理旧数据扫描报告和结果会占用大量磁盘空间。在“管理” - “整理”中可以设置自动清理策略例如自动删除超过90天的报告。也可以手动删除不再需要的任务和报告。5.3 常见问题与故障排查实录即使按照步骤操作也难免遇到问题。下面是我遇到过的一些典型问题及解决方法问题现象可能原因排查与解决步骤Web界面无法访问9392端口1.gsad服务未运行。2. 防火墙阻止了端口。3. 证书问题导致浏览器拦截。1.sudo systemctl status gsad检查服务状态查看日志journalctl -u gsad。2.sudo ss -tlnp | grep 9392查看端口监听状态。检查防火墙规则。3. 确认使用https://访问并接受自签名证书。扫描任务一直卡在“请求中”或“新建”1. 扫描引擎(openvas-scanner)未启动或故障。2. 扫描器配置中的主机/端口错误。3. 数据库连接问题。1.sudo systemctl status openvas-scanner检查引擎状态。2. 在Web界面“配置”-“扫描器”中检查“OpenVAS Default”的“主机”是否为127.0.0.1端口是否为9390。3. 检查gvmd服务日志journalctl -u gvmd。Feed状态一直显示“正在更新”或失败1. 网络连接问题无法访问Greenbone Feed服务器。2. 磁盘空间不足。3. 权限问题。1. 尝试curl -v https://feed.greenbone.net测试连通性。可能需要配置代理。2. 使用df -h检查磁盘使用情况。3. 确保/var/lib/gvm目录权限正确通常属于gvm用户。可尝试sudo greenbone-feed-sync --type nvt手动同步并观察错误。扫描速度异常缓慢1. 目标网络延迟高或存在丢包。2. 扫描配置过于激进并发数太高。3. 扫描主机自身资源CPU/内存/IO不足。1. 对目标进行ping和traceroute测试。2. 降低扫描配置中的max_hosts和max_checks值。3. 使用top监控资源考虑为虚拟机或容器分配更多资源。报告中的漏洞结果大量重复或不准1. 同一个服务被多个插件检测报告了相似问题。2. 目标有WAF/IPS等防护设备干扰了扫描。3. 插件本身存在误报。1. 这是正常现象需要人工分析去重。OpenVAS提供“覆盖”功能来合并重复项。2. 尝试调整扫描配置使用更温和的检测方式或在扫描策略中排除某些可能触发防护的测试。3. 关注具体插件的输出在社区论坛搜索相关插件的误报情况。一个重要的避坑技巧在开始对生产环境进行大规模扫描前务必先建立一个小的测试目标包含2-3台非关键测试服务器。用你的扫描配置对这个测试目标跑一遍评估扫描时间、资源消耗以及对目标系统的影响。确认无误后再扩展到正式环境。这能避免因配置不当导致的业务中断风险。搭建和维护自己的OpenVAS平台是一个从“会用工具”到“理解工具”的进阶过程。它让你不再只是一个漏洞扫描器的操作员而是成为了一个安全评估流程的构建者和优化者。虽然初期会花费一些时间在部署和调优上但换来的是一套完全贴合自己需求、成本可控、深度可控的自动化安全检测能力。当你能熟练地定制扫描策略、精准分析报告、并让这个平台7x24小时为你守护网络资产时你就会觉得这一切的投入都是值得的。