1. 写在前面:为什么要在Kali上装Nessus 8.13.1
漏洞扫描这件事,在安全测试里是绕不开的一环。拿到授权之后,第一步往往不是手工去点浏览器,而是先跑一轮自动化扫描,把目标资产的暴露面、开放端口、服务指纹、弱口令、已知CVE全部捋一遍。市面上的扫描器不少,Nessus是历史比较久、插件库比较全、误报率控制得相对好的一款。Kali Linux自带大量渗透测试工具,但唯独不内置Nessus,得靠用户自己装。而这恰恰是很多新手卡住的地方:下载慢、依赖缺失、服务起不来、注册激活不通过、插件更新失败,每一个环节都可能劝退。
这个版本8.13.1属于相对稳定的老版本,虽然厂商后来持续更新,但其核心功能——Web扫描、主机发现、配置审计、合规基线检查——它都具备,而且对系统资源要求不高,适合个人笔记本上的测试环境,也适合隔离网络环境里的离线部署。很多老设备至今仍用它扫漏洞,8.13.1的插件规范与旧版兼容性比太新的版本更稳,踩坑资料也多,出了问题能搜到前人的解法。
这篇文章适合两类人:一类是刚把Kali装好,想跑通第一个漏洞扫描器的学习者;另一类是在内网环境里做巡检,需要把扫描器部署到无外网机器上的执行者。保姆级的意思是,每一步都写清楚,该给命令的地方给命令,该解释原理的地方解释原理,不只告诉你“这么做”,还告诉你“为什么这么做”。
1.1 扫描器那么多,为什么选Nessus
很多人会问,Kali里已经有了OpenVAS,为什么还要费劲装Nessus?我的理解是这样的:OpenVAS的插件库虽然开源免费,但在扫描结果的准确性、报告的易读性、以及对最新漏洞的响应速度上,Nessus的官方插件体系更成熟。Nessus的插件由专业研究团队维护,扫描后的CVSS评分、漏洞描述、修复建议都是现成的,直接导出给客户或者存档都方便。
另一个原因是生态兼容性。Nessus的扫描结果可以和很多漏洞管理平台对接,比如导出为PDF、HTML、CSV,甚至直接存进数据库做二次分析。对于做等保、做渗透测试、做红队评估的人来说,报告格式是否规范往往比扫描速度更重要。Nessus在这些细节上做得比较到位,这也是我选择它的根本原因。
1.2 8.13.1版本适合哪些场景
Nessus 8.13.1不是最新版,但我个人认为它是最适合离线环境和个人测试的版本之一。它对硬件的要求比较低,分配2GB内存、双核CPU就能跑得动,不像新版动辄要求4GB以上。而且这个版本的Web界面交互逻辑很稳定,初始化流程也不复杂,适合第一次接触的人上手。
如果你是在隔离内网部署,8.13.1的优势更明显:它的离线注册流程成熟,插件包有明确的离线更新路径,整个部署过程不依赖外网持续在线。而新版虽然功能更多,但部分新特性需要联网激活,对无外网环境反而是一种负担。
2. 安装前的环境准备,少一个步骤后面全是泪
2.1 检查Kali版本和依赖库
开始安装前,先在终端里确认当前系统版本和架构,不要让安装包和系统不匹配。
cat /etc/os-release uname -m如果是常见的amd64架构,那么下载x86_64的安装包;如果是ARM架构,比如树莓派上装的Kali,就得下载对应的ARM版本。这一步容易被忽略,但一旦装错,启动服务时会直接报错,而且错误信息并不直观,排查起来很费时间。
还需要确认系统里的依赖库是否齐全。Nessus的deb包依赖libc和openssl等基础库,Kali默认装得比较全,但如果你之前做过系统精简,可能在安装时出现依赖缺失的提示。这时用apt补齐依赖即可:
sudo apt update sudo apt install -y libc6 libssl32.2 三个容易忽略的权衡点
第一,安装包尽量在能访问官方源的网络环境里下载,不要用第三方网盘。原因很简单:扫描器涉及系统底层,包被篡改的风险不能承受。用官方源下载慢一点没关系,可以挂代理或选择就近镜像。
第二,确认磁盘空间。Nessus装完后会持续下载插件库,插件库解压后可能要占用数GB空间。建议根目录或者/opt分区预留至少10GB,避免跑到一半磁盘写满,导致插件更新失败。
第三,不要在生产环境上直接实验。Nessus会监听8834端口,扫描时会发送大量探测流量,如果部署在正经业务机器上,很容易把自己搞到网络违规。建议先用虚拟机或者独立测试机跑通流程,再考虑正式部署。
3. 安装包安装与初始启动
3.1 安装deb包与依赖补齐
下载到的文件名通常是Nessus-8.13.1-debian6_amd64.deb,在终端里切换到下载目录,执行:
sudo dpkg -i Nessus-8.13.1-debian6_amd64.deb如果报依赖错误,再用apt修复:
sudo apt -f installdpkg安装顺利的话,会看到安装路径提示,默认为/opt/nessus。这一步完成之后,先别急着访问界面,先启动服务:
sudo systemctl start nessusd sudo systemctl enable nessusd这里解释一下为什么用systemctl而不是直接执行二进制文件。Nessus安装时会自动注册系统服务,用systemctl管理可以让它在开机时自动启动,也方便查看日志和重启。直接手动执行二进制的话,终端一关服务就没了,后面调试会很麻烦。
启动后检查服务状态:
sudo systemctl status nessusd如果显示active(running),说明服务正常。这时浏览器访问https://127.0.0.1:8834,注意是https,不是http。
3.2 初始化管理员账号与浏览器兼容性
首次访问会先建立管理员账号,这一步在Web界面完成,需要填写用户名和密码。密码复杂度要求比较严格,至少包含大小写字母和数字,建议直接生成一个强密码并保存到密码管理器,后面扫描配置里还会用到。
这里有个常见问题:有些浏览器访问时会提示证书不受信任,因为Nessus默认用的是自签名证书。这不是故障,直接跳过警告即可。如果浏览器版本太旧,可能导致Web界面无法正常加载,我建议用当前主流的Chromium或Firefox系浏览器访问。
初始化过程会初始化数据库和插件目录,耗时根据机器性能从几分钟到十几分钟不等。如果页面一直转圈,不要反复刷新,去看日志:
sudo tail -f /opt/nessus/var/nessus/logs/nessusd.messages日志里能看到当前进度,比如正在编译插件、正在初始化数据库等。
4. 保姆级离线注册流程
4.1 在线注册链路和离线注册的区别
注册的本质,是让扫描器获得合法的插件下载权限和功能授权。在线模式下,Nessus通过激活码直接从官方更新服务器获取插件,整个过程自动化,用户只需要在界面上输入激活码。
但在离线环境里,扫描器无法访问官方更新服务器,这时候就需要走离线注册通道。离线注册的核心思路是:让扫描器生成一个唯一的挑战码,把这个挑战码拿到有网的机器上提交给官方平台,换取一个许可文件,再把许可文件传回扫描器。整个过程不要求扫描器在线,只要提交挑战码的那台电脑能上网就行。
这里要强调一个很容易走偏的概念:离线注册不等于不注册,也不是绕过授权。你依然需要一份有效的激活码或许可文件,只是激活流程本身可以不在扫描器设备上联网完成。
4.2 获取挑战码和许可文件的具体操作
第一步,进入Web界面后,点击设置(Settings),找到软件(Software)选项卡,再点到注册(Registration)。
第二步,选择离线注册(Offline Registration)选项,界面会显示一段很长的挑战码(Challenge Code)。复制这段内容,保存好。
第三步,找一台能上网的电脑,打开官方注册平台,输入你手上的激活码和挑战码。提交后,平台会生成一个许可文件,文件名一般是nessus-fetch.rc或者license文件。
第四步,把这个许可文件拷贝到离线机器上,在Nessus的注册界面选择“上传许可文件”,选中刚才的文件并确认。上传后,界面会提示注册成功,同时开始加载插件库。
整个过程是比较顺畅的,但有几个细节需要注意。首先是挑战码的复制要完整,这东西很长,如果复制漏掉某一段,官方平台会提示无效。我习惯把它保存到纯文本文件里,而不是直接复制到浏览器输入框,避免格式被自动转换。
其次是许可文件上传后,如果长时间没有反应,不要马上点重复上传,先检查文件内容是否完整。许可文件其实是一个文本文件,可以打开看一眼,如果里面只有一行杂乱字符串,说明下载正常;如果内容是HTML错误页,说明提取环节出了问题。
4.3 注册校验与常见激活失败
注册成功后,第一时间去设置页面的“软件”选项卡里看状态。正常会显示插件数量、已授权时间等信息。如果显示未注册或者插件数为0,说明注册没有完全生效。
一个常见问题是许可文件上传成功,但插件数量仍然为0,这通常是因为插件库尚未完成初始化。可以等几分钟,或者在终端里手动触发更新:
sudo /opt/nessus/sbin/nessuscli update --plugins-only另一个常见问题是在官方平台提交挑战码时提示激活码无效。这个多半是激活码被用过太多次,或者复制时混入了空格。确认激活码的来源和状态,如果确实无效,只能联系售后处理。
还有一点值得说明:Nessus对激活码有设备绑定限制,同一激活码在不同机器上重复激活可能会被拒绝。如果你在虚拟机里调试成功后,想迁移到物理机,需要先把虚拟机里的注册信息清掉,否则新环境可能无法激活。
5. 插件更新的离线方案
5.1 在线更新与离线更新的差异
插件库是Nessus的核心价值所在。没有最新插件,扫描器就是一个空壳,既识别不了新漏洞,也更新不了扫描策略。在线更新很简单,界面上点击更新就行,但离线更新需要额外处理。
离线更新的原理是:插件更新本质上就是下载一个全量插件包,本地导入替代旧版本。Nessus官方提供了插件包下载入口,只要在有网的电脑上下载到all-2.0.tar.gz文件,再到离线机器上导入,就完成了更新。这个过程不要求离线机器本身能上网。
5.2 全量插件包下载与导入
在有网的机器上,登录官方插件下载页面,找到all-2.0.tar.gz这个文件下载。这个文件体积不小,通常有几个GB,下载时注意磁盘空间和网络稳定性。
拿到插件包后,通过U盘或者内网共享拷贝到离线机器的/opt/nessus目录下,然后执行:
sudo /opt/nessus/sbin/nessuscli update /path/to/all-2.0.tar.gz命令执行后,会先校验文件完整性,然后解压并编译插件。这个过程耗时较长,可能十几分钟到几十分钟,取决于机器性能。执行期间不要中断进程,不要重启服务,否则容易留下损坏的中间文件。
如果插件包比较大,你也可以先在内存充足的情况下执行,避免因内存不足被杀掉。执行完成后,重启Nessus服务:
sudo systemctl restart nessusd重启后再次进入Web界面,在设置里确认插件版本已经更新。正常情况下,插件数量会明显增加。
这里有一个我踩过的坑:直接用tar解压插件包到某个目录,然后手动修改配置指向该目录。这种做法会造成路径混乱,Nessus只认它内部管理的插件目录。正确做法是让nessuscli自行处理导入,而不是手动干预。
6. 扫描任务配置与性能取舍
6.1 新建扫描任务的参数选择
插件更新完,接下来就是实战环节。点击“New Scan”创建扫描任务,模板选择很重要。常见模板包括Basic Network Scan、Host Discovery、Web Application Tests等。初次使用建议从Basic Network Scan开始,它会覆盖端口扫描、服务识别、常见漏洞检测,通用性最好。
扫描目标配置时,可以直接填IP、IP段或者域名。需要特别注意授权的边界,扫描未授权的目标在绝大多数地方都是违规行为。建议建立起一个习惯:扫描前把授权范围记录下来,扫描配置里只填授权范围内的资产。
配置端口范围时,默认的常用端口扫描速度更快,全端口扫描会更慢但覆盖更全面。实战中,我一般先跑一次常用端口扫描,根据结果再针对特定端口做精细化扫描。这里没有必要一上来就跑全端口,浪费时间不说,大量探测流量还容易触发告警。
扫描策略里的强度设置也值得关注。设置过强可能导致大量误报,甚至影响业务系统稳定性;设置过弱又会漏掉一些漏洞。建议分阶段执行:先用宽松策略跑一遍摸清底数,再针对高价值资产做深度扫描。不要把强弱两种策略同时应用在一批资产上,不然结果报表会非常混乱,没法精准定位问题。
6.2 调度方式与报告留存
如果需要对一批资产定期巡检,可以配置扫描调度。在任务配置里选择“Schedule”,设定扫描频率和具体时间点。注意时间点尽量避开业务高峰期,毕竟扫描会产生一定负载和流量,很可能会影响系统运行。
报告留存也很重要。每次扫描结束后,导出PDF或HTML报告存档,并命名规则统一,比如包含日期和任务名称。报告里记载了漏洞详情、扫描时间、目标范围,这些信息在后续文档整理或者日常沟通里都是重要参考。我个人习惯是扫描完不急着下结论,先看报告里的漏洞分布,再决定哪些需要人工复核。
7. 常见问题与排查技巧速查表
7.1 离线激活与许可文件问题
很多人会卡在许可文件这一步。我现在遇到这类问题,第一反应是去查看详细日志,而不是反复点击界面按钮。
sudo /opt/nessus/sbin/nessuscli fetch --status这个命令会显示当前注册状态和插件授权信息。如果显示没有有效的许可,可以再尝试:
sudo /opt/nessus/sbin/nessuscli fetch --register-offline <license文件路径>如果命令提示连接失败,不用慌,离线注册本身就允许本地导入。这时要重点检查许可文件的内容是否完整。文件格式一般是加密字符串,如果文件里出现了/html标签或者乱码,那就是下载环节出了问题,需要重新获取。
7.2 插件更新失败的处理
插件更新是另一个高频出问题的环节。最常见的报错是签名验证失败。插件包在下载、拷贝过程中可能被截断或篡改,签名校验自然就过不了。解决方法是确认原本文件的大小是否一致,在拷贝前用校验工具比对摘要信息。
如果导入插件包时报内存不足,建议分两步处理:第一,关闭其他占用内存大的进程;第二,增加交换分区。Kali默认交换空间可能比较小,尤其物理机内存不大的情况下,很容易在编译插件时被系统杀死。可以用systemd或fstab的方式临时增加交换分区,保证更新过程顺利完成。
插件更新后服务无法启动,也是一个容易让人焦虑的问题。这多半是插件版本与主程序不匹配导致的。此时先停止服务,再检查日志:
sudo systemctl stop nessusd sudo tail -50 /opt/nessus/var/nessus/logs/nessusd.messages如果日志指向某个插件编译错误,可以尝试清理插件缓存,再重新导入一次。也可以把最新插件包与当前主程序版本对照一下,确认兼容性。
7.3 服务与界面异常排查
访问不了Web界面,是最容易判断的问题。先确认端口监听。执行:
sudo netstat -tlnp | grep 8834如果没有输出,说明服务没起来,回到服务启动那一步排查。如果端口有监听但浏览器访问被拒绝,要确认是否走的是https协议,以及防火墙是否放行。
界面能打开但登录失败,很可能是初始化管理员账号的环节出了问题。遇到这种情况,可以通过命令行重置密码:
sudo /opt/nessus/sbin/nessuscli reset admin <新密码>不过要注意,重置密码不会影响插件库和扫描历史,但会强制你重新登录一次。
还有一个容易被忽略的问题:系统时间不准。Nessus在插件更新和许可校验时会涉及时间戳验证,如果系统时间偏差过大,就可能出现各种奇怪的错误。建议安装NTP服务或者手动校准时间,毕竟扫描器的证书验证、插件签名、许可过期时间都和系统时间绑定。
8. 最后说说我自己的实战体会
装一遍Nessus看似简单,但真正在离线环境里走一遍,就会发现坑比想象中多。我最早是在一台配置很低的虚拟机上装的,内存只有1GB,结果初始化数据库时一直超时,后来回看日志才发现是内存不足。解决办法其实很简单,把记忆体加高一点,或者调整交换分区,问题立刻解决。
离线注册那块,我第一次因为嫌麻烦,用在线方式注册,结果在无外网机器上根本行不通,后来老老实实走离线流程才顺利。也是在那次之后,我养成了习惯:凡是涉及无外网环境部署,一律先准备好挑战码提取和许可文件导入的流程文档,不要临时抱佛脚。
插件更新上,我吃过一次“半途而废”的亏。当时导入all-2.0.tar.gz执行到一半,觉得太慢了,就手动Ctrl+C中断,结果插件目录损坏,重启服务后界面一直报错。后来的教训是,宁可让它慢慢跑,也千万别半路打断。
最后再分享一个小技巧:在Kali里如果同时跑着其他安全工具,注意8834端口是否被占用。Nessus默认占用8834,但某些版本的Kali可能会启动其他服务占用端口。可以用netstat提前检查,避免服务起来后端口冲突。
这套流程走通之后,后续再做漏洞扫描就顺了。你可以把离线安装包和插件包都存到一个固定的目录里,以后重装系统或者部署新机器,直接复制过去再用,省去到处找安装包的麻烦。希望这份保姆级教程能让你少走点弯路,一把装通。