这次我们来看一个在网络安全领域,尤其是渗透测试和漏洞评估中,几乎绕不开的工具——Nessus。它不是一个新工具,但因其强大的漏洞库和持续更新的特性,至今仍是安全从业者进行合规检查、资产发现和漏洞扫描的首选之一。对于使用Kali Linux作为主力渗透测试平台的朋友来说,在Kali上集成Nessus,意味着能将一个商业级的漏洞扫描能力无缝融入这个“黑客工具箱”。
这篇文章的重点不是讲Nessus有多厉害,而是解决一个非常实际的问题:如何在Kali Linux上,从零开始,完成Nessus的下载、安装、激活,并跑通第一个漏洞扫描任务。整个过程会涉及官方包获取、离线激活码处理、Web服务启动以及基础扫描配置。无论你是安全专业的学生、刚入行的渗透测试工程师,还是需要定期进行安全自查的运维人员,这篇手把手的教程都能帮你快速搭建起可用的本地漏洞扫描环境。
1. 核心能力速览
在开始动手之前,我们先快速了解Nessus的核心特性和本次部署的关键信息。
| 能力项 | 说明 |
|---|---|
| 工具类型 | 商业漏洞扫描器(提供免费家庭版) |
| 核心功能 | 资产发现、漏洞扫描、合规性检查、配置审计 |
| 部署平台 | Kali Linux(本文演示环境),也支持Windows、macOS等 |
| 硬件门槛 | 对CPU和内存有要求,建议至少2核CPU、4GB内存。扫描性能与目标数量和网络环境强相关。 |
| 显存占用 | 不涉及GPU计算,无显存要求。 |
| 启动方式 | 通过systemctl启动后台服务,通过浏览器访问Web管理界面。 |
| 是否支持API | 是,Nessus提供完整的REST API,可用于自动化扫描和报告管理。 |
| 是否支持批量任务 | 是,可通过Web界面创建扫描任务队列,或通过API进行批量扫描。 |
| 适合场景 | 企业内部网络安全评估、渗透测试前期信息收集、安全合规自查、教育学习与研究。 |
重要提示:Nessus家庭版(Home)免费,但仅限于非商业用途,且扫描IP数量有限制。专业版(Professional)功能更全,需购买许可证。本文演示基于家庭版的安装与激活流程。
2. 适用场景与使用边界
Nessus是一个功能强大的工具,但必须在合法、合规的范围内使用。
它适合谁?
- 渗透测试人员:用于前期全面的资产发现和漏洞信息收集。
- 安全运维工程师:用于定期对内部网络和服务器进行漏洞巡检。
- 合规性审计人员:利用其策略模板检查系统是否符合PCI DSS、HIPAA等标准。
- 网络安全学习者:在授权的实验环境(如虚拟机、专用靶场)中学习漏洞原理和扫描技术。
它能解决什么问题?
- 资产清点:自动发现指定网段内存活的主机及其开放的端口、服务。
- 漏洞识别:利用庞大的漏洞插件库,识别操作系统、应用程序、中间件、数据库等的已知安全漏洞。
- 合规检查:对照安全基线模板,检查系统配置是否符合安全标准。
- 生成报告:提供详细的技术报告和管理摘要,用于风险分析和整改跟踪。
使用边界与法律风险
- 绝对禁止:在未获得明确书面授权的情况下,对任何不属于你或你未被授权测试的网络、系统、网站进行扫描。这属于违法行为。
- 授权测试:仅在拥有所有权的资产、或已获得所有者正式授权(如渗透测试合同、漏洞众测项目范围)的资产上使用。
- 实验环境:强烈建议在虚拟机(如VMware、VirtualBox)搭建的隔离网络环境中进行学习和测试,例如使用DVWA、Metasploitable等靶机。
- 谨慎扫描:即使对授权目标,高强度的扫描也可能对目标系统性能造成影响,甚至导致服务中断。应在业务低峰期进行,并提前通知相关方。
3. 环境准备与前置条件
在Kali上安装Nessus前,请确保你的环境满足以下要求。
1. 操作系统确认
- 本文基于Kali Linux 2024.x进行演示,其他较新版本流程类似。
- 打开终端,使用以下命令确认系统信息:
cat /etc/os-release uname -a
2. 网络连接
- 安装过程中需要从Tenable官方服务器下载安装包和插件,请确保Kali虚拟机或主机能够访问互联网。
- 如果需要配置代理,请提前在系统或终端中设置好。
3. 系统更新
- 建议先更新系统软件包列表,确保环境一致:
sudo apt update sudo apt upgrade -y
4. 资源检查
- 磁盘空间:Nessus安装及插件更新需要约2GB以上的磁盘空间。
- 内存:运行Nessus服务建议至少有2GB可用内存,扫描大型网络时需要更多。
- 权限:安装和启动服务需要
sudo或root权限。
4. 安装部署与启动方式
我们将按照“下载 -> 安装 -> 启动服务 -> 初始化配置”的顺序进行。
4.1 下载Nessus安装包
访问Tenable官方下载页面是首选。但由于网络原因,有时直接下载较慢。这里提供官方和备用方法。
方法一:官方命令行下载(推荐)在Kali终端中,使用wget直接下载对应Linux版本的.deb安装包。请访问Tenable官网查看最新版本号并替换下面命令中的链接部分。
# 示例:下载适用于AMD64架构的Nessus 10.7.1版本 # 请务必前往 https://www.tenable.com/downloads/nessus 查看最新链接 wget https://www.tenable.com/downloads/api/v2/pages/nessus/files/Nessus-10.7.1-debian10_amd64.deb如果下载速度慢,可以尝试使用curl或寻找镜像源。
方法二:手动下载后传输如果主机下载更快,可以在Windows/Mac上通过浏览器从Tenable官网下载对应的.deb文件(选择“Kali Linux / Debian”版本),然后通过SSH(如scp命令)、共享文件夹或U盘等方式传输到Kali系统中。
4.2 安装Nessus软件包
下载完成后,使用dpkg命令进行安装。dpkg可能缺少依赖,我们可以用apt来修复。
# 进入下载文件所在目录,假设文件名为 Nessus-10.7.1-debian10_amd64.deb sudo dpkg -i Nessus-10.7.1-debian10_amd64.deb如果安装过程中报告依赖错误,运行以下命令自动安装缺失的依赖:
sudo apt --fix-broken install -y安装成功后,终端会输出提示信息,表明Nessus服务已安装并注册。
4.3 启动Nessus服务并设置开机自启
安装程序会自动创建一个名为nessusd的系统服务。我们来启动它并设置为开机启动。
# 启动nessusd服务 sudo systemctl start nessusd # 设置服务开机自动启动 sudo systemctl enable nessusd # 检查服务运行状态,确认状态为 active (running) sudo systemctl status nessusd看到状态为“active (running)”即表示后台服务启动成功。Nessus默认监听https://localhost:8834。
4.4 防火墙配置(如有)
如果Kali系统启用了防火墙(如ufw),需要放行8834端口。
# 如果使用ufw sudo ufw allow 8834 sudo ufw reload5. 初始化Web配置与激活
服务启动后,需要通过浏览器完成初始化设置,包括创建管理员账户和激活产品。
5.1 访问Web管理界面
打开Kali Linux上的浏览器(如Firefox)。
在地址栏输入:
https://localhost:8834- 注意:是
https,不是http。 - 如果是在虚拟机中安装,可以从宿主机浏览器访问,需将
localhost替换为Kali虚拟机的IP地址,例如https://192.168.1.10:8834。
- 注意:是
首次访问会看到安全警告,这是因为Nessus使用自签名SSL证书。这是正常的,点击“高级”或“接受风险并继续”即可。
5.2 选择产品类型与获取激活码
- 进入页面后,会提示你选择产品版本。为了学习和测试,我们选择“Nessus Essentials”(即之前的家庭版)。它是免费的。
- 接下来需要输入一个激活码(Activation Code)。你需要一个Tenable账户来获取它。
- 点击页面上的链接,会跳转到Tenable官网的激活码申请页面。使用邮箱注册一个Tenable账户。
- 注册成功后,登录Tenable账户,在管理页面你会找到属于你的激活码(一串由字母和数字组成的代码,通常类似
XXXX-XXXX-XXXX-XXXX-XXXX)。复制它。
5.3 完成初始化设置
- 回到Kali浏览器中的Nessus页面,粘贴你获得的激活码。
- 点击“Continue”。Nessus会开始连接Tenable服务器验证激活码,并准备初始化。
- 接下来,创建你的Nessus管理员账户。务必记住这个用户名和密码,这是你以后登录Web管理界面的凭证。
- 提交后,Nessus会开始初始化过程,这包括下载最新的漏洞插件(plugins)。这是一个耗时较长的步骤,取决于你的网速,可能需要十几分钟到半小时以上。请耐心等待进度条完成。
6. 功能测试与效果验证
初始化完成后,会自动跳转到Nessus的Web主界面。现在,我们来创建一个最简单的扫描任务,验证整个安装是否成功。
6.1 创建第一个扫描任务
- 登录:使用你刚才设置的管理员账号密码登录。
- 新建扫描:点击左上角的“New Scan”按钮。
- 选择模板:在模板列表中,找到“Basic Network Scan”。这是一个针对网络主机的通用漏洞扫描模板,适合初学者。点击它。
- 配置扫描:
- Name:给你的扫描任务起个名字,例如
My First Test Scan。 - Description:可选,填写描述。
- Targets:这是最关键的一步!在这里输入你要扫描的目标。
- 绝对禁止扫描未经授权的公网IP或内网IP!
- 安全测试建议:输入你本地搭建的靶机IP。例如,如果你在同一个虚拟网络里有一台Metasploitable2靶机,IP是
192.168.1.100,就输入这个IP。 - 自我测试:你也可以扫描Kali自己,输入
localhost或127.0.0.1。
- Name:给你的扫描任务起个名字,例如
- 保存并启动:配置完成后,点击页面下方的“Save”按钮。然后,在这个任务的界面上,点击“Launch”按钮开始扫描。
6.2 观察扫描过程与结果
- 扫描队列:点击顶部导航栏的“My Scans”,可以看到你创建的任务。状态会从“Pending”变为“Running”,并显示进度百分比。
- 实时查看:点击正在运行的任务名称,可以进入详情页,看到实时发现的主机、开放的端口以及正在检查的漏洞。
- 扫描完成:当状态变为“Completed”时,扫描结束。
- 查看报告:点击已完成的任务,你会看到扫描摘要。点击“Vulnerabilities”选项卡,可以按风险等级(Critical, High, Medium, Low)查看发现的漏洞列表。点击任意一个漏洞,可以查看详细描述、风险评级、解决方案(Remediation)以及输出信息(Output,即Nessus检测到的具体证据)。
效果验证成功标准:
- 能够成功创建并启动扫描任务。
- 扫描状态能正常从“Running”变为“Completed”。
- 在结果中至少能看到被扫描主机的开放端口信息。
- 如果扫描的是存在漏洞的靶机(如Metasploitable2),应该能列出大量中高危漏洞。
7. 接口API与批量任务
对于需要自动化集成的场景,Nessus的REST API非常有用。你可以通过API管理扫描、启动任务、导出报告等。
7.1 启用API密钥
- 在Web界面中,点击右上角用户头像,进入“My Account”。
- 在账户设置中,找到“API Keys”部分。
- 点击“Generate”生成新的API密钥。你会得到两串字符:
- Access Key
- Secret Key
- 像保存密码一样妥善保存这两个Key,它们只显示一次。
7.2 使用cURL测试API连通性
获取API密钥后,可以使用简单的cURL命令测试API是否可用。以下命令用于获取当前用户的扫描任务列表。
# 将 YOUR_ACCESS_KEY 和 YOUR_SECRET_KEY 替换为你刚刚生成的密钥 # 将 NESSUS_HOST 替换为你的Nessus地址,如 127.0.0.1 curl -X GET \ https://NESSUS_HOST:8834/scans \ -H "X-ApiKeys: accessKey=YOUR_ACCESS_KEY; secretKey=YOUR_SECRET_KEY" \ -k-k参数表示忽略SSL证书验证(因为自签名证书)。- 如果成功,会返回一个JSON格式的扫描列表数据。
7.3 批量任务思路
Nessus本身支持在Web界面中配置扫描排程(Schedule)。通过API,你可以实现更灵活的批量操作:
- 批量创建扫描:通过API循环调用,为多个目标IP或IP段创建扫描任务。
- 批量启动扫描:获取所有“就绪”状态的扫描任务ID,然后依次调用启动API。
- 批量导出报告:扫描完成后,循环调用报告导出API,将结果保存为PDF、HTML、CSV等格式。
- 状态监控:编写脚本定期检查所有扫描任务的状态,并发送通知。
Python示例(使用requests库):
import requests import json # 配置信息 NESSUS_HOST = '127.0.0.1' ACCESS_KEY = 'YOUR_ACCESS_KEY' SECRET_KEY = 'YOUR_SECRET_KEY' BASE_URL = f'https://{NESSUS_HOST}:8834' # 设置请求头 headers = { 'X-ApiKeys': f'accessKey={ACCESS_KEY}; secretKey={SECRET_KEY}', 'Content-Type': 'application/json' } # 禁用SSL警告(仅用于测试环境) requests.packages.urllib3.disable_warnings() # 示例:获取扫描列表 try: response = requests.get(f'{BASE_URL}/scans', headers=headers, verify=False) response.raise_for_status() # 检查请求是否成功 scans = response.json() print(f"成功获取到 {len(scans.get('folders', []))} 个文件夹下的扫描任务。") # 可以进一步解析scans内容 except requests.exceptions.RequestException as e: print(f"API请求失败: {e}")8. 资源占用与性能观察
Nessus作为一款本地部署的扫描器,其资源消耗主要取决于并发扫描的主机数量、插件数量以及目标系统的响应情况。
1. 进程与内存观察在终端中,可以使用top或htop命令观察nessusd进程的资源占用。
top -p $(pgrep nessusd) # 或者使用htop,并过滤nessusd通常,空闲时nessusd进程会占用数百MB内存。在进行扫描时,内存占用会显著上升,可能达到1-2GB或更高,CPU使用率也会飙升。
2. 磁盘空间观察插件和数据默认安装在/opt/nessus目录。可以使用df和du命令检查磁盘使用情况。
# 查看/opt分区空间 df -h /opt # 查看/opt/nessus目录大小 sudo du -sh /opt/nessus3. 网络连接观察扫描时会产生大量网络连接。可以使用netstat或ss命令查看。
sudo netstat -tunap | grep nessusd # 或 sudo ss -tunap | grep nessusd性能优化建议:
- 限制并发主机数:在扫描策略的“Advanced”设置中,降低“Max hosts per scan”和“Max checks per host”的值,可以降低对系统和目标的压力。
- 优化扫描策略:针对特定目标(如Web应用、数据库)选择专门的扫描模板,而不是每次都进行全端口、全插件的“大而全”扫描。
- 安排扫描时间:将大型扫描任务安排在业务低峰期或夜间进行。
9. 常见问题与排查方法
在安装和使用过程中,你可能会遇到以下问题。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
浏览器访问https://localhost:8834无法连接 | 1. Nessus服务未启动。 2. 防火墙阻止了8834端口。 3. Kali主机与虚拟机网络不通(宿主机访问时)。 | 1.sudo systemctl status nessusd检查服务状态。2. sudo ss -tlnp | grep :8834检查端口监听。3. 检查Kali IP,并尝试从Kali内部浏览器访问。 | 1. 启动服务:sudo systemctl start nessusd。2. 配置防火墙放行端口。 3. 确保虚拟机网络设置为桥接或NAT,并获取到IP。 |
| 初始化时卡在“Downloading plugins...”进度条 | 网络连接Tenable服务器慢或被阻断。 | 观察终端中nessusd服务日志:sudo tail -f /var/log/nessus/nessusd.messages | 1. 耐心等待,首次下载插件数据量较大。 2. 检查网络代理设置。 3. 极端情况下,可尝试寻找离线插件包进行手动更新。 |
| 激活码无效或无法激活 | 1. 激活码输入错误。 2. 激活码对应的邮箱未验证。 3. 网络问题导致无法连接激活服务器。 | 1. 仔细核对激活码。 2. 检查注册邮箱是否完成了验证。 3. 尝试在Tenable官网登录账户,查看激活码状态。 | 1. 重新复制粘贴激活码。 2. 完成邮箱验证。 3. 确保Kali能正常访问 tenable.com。 |
| 扫描任务长时间处于“Pending”或“Running”状态无进展 | 1. 目标IP不可达。 2. 扫描策略过于激进,被目标防火墙拦截。 3. Nessus服务进程异常。 | 1. 从Kaliping一下目标IP。2. 检查扫描日志(在扫描结果页面)。 3. 查看 nessusd服务日志。 | 1. 确认目标主机在线且网络可达。 2. 调整扫描策略,降低并发和频率。 3. 重启Nessus服务: sudo systemctl restart nessusd。 |
| Web界面登录后提示错误或空白 | 浏览器缓存问题或会话异常。 | 尝试使用浏览器的无痕/隐私模式访问。 | 1. 清除浏览器缓存和Cookie。 2. 重启浏览器。 3. 重启Nessus服务。 |
dpkg -i安装时报告依赖错误 | Kali系统缺少Nessus所需的某些库文件。 | 查看具体的错误信息。 | 运行sudo apt --fix-broken install -y自动修复依赖,然后重新执行dpkg -i安装。 |
10. 最佳实践与使用建议
为了让你的Nessus用得更顺手、更安全,这里有一些经验之谈。
- 首次使用先扫自己:在熟悉工具阶段,将扫描目标设置为
localhost或同一网络下的另一台测试虚拟机(如Metasploitable)。这能帮你理解扫描报告,又不会引发任何法律风险。 - 合理配置扫描策略:不要总是使用默认的“Basic Network Scan”。根据目标类型(Web服务器、数据库、网络设备)创建或选择更精细的策略模板,可以提升扫描效率和准确性。
- 定期更新插件:漏洞库日新月异。虽然家庭版插件更新有时延,但仍应定期在Web界面的“Updates”页面检查并安装更新,以确保能发现最新的漏洞。
- 妥善保管凭证:Nessus管理员密码和API密钥是最高权限凭证,务必妥善保存,不要泄露。
- 管理扫描结果:及时清理旧的、无用的扫描任务和报告,以释放磁盘空间。重要的报告可以导出(PDF/HTML/CSV)并归档。
- 关注资源使用:在启动一个大型扫描(如整个C类网段)前,预估一下时间和资源消耗。避免在性能不足的机器上执行过多并发扫描导致系统卡死。
- 合规与授权永远是第一位:再次强调,任何扫描行为都必须建立在合法授权的基础上。在真实环境中扫描前,务必获得书面授权,并明确扫描范围和时间窗口。
通过以上步骤,你应该已经在Kali Linux上成功部署并运行了Nessus漏洞扫描器。从下载安装包到完成第一次扫描,整个过程的核心在于网络畅通、激活码获取以及目标设定的合法性。这个工具打开了自动化漏洞评估的大门,但记住,它发现的每一个“高危”漏洞,都需要你结合专业知识去验证、评估其真实的业务风险。接下来,你可以尝试探索更复杂的扫描策略、学习如何解读漏洞的风险评分和修复建议,甚至将API集成到你的自动化工作流中,让安全巡检变得更加高效。