Docker部署NessusV7详解
介绍
我最近一直在研究自动化漏洞扫描,决定使用Tenable的Nessus扫描仪试一试。我使用这个产品的时间还不够长,不足以写一篇有意义的文章,但我认为关于如何在Docker容器中将其搭建的快速教程可能会帮助那些想要自己尝试的人。
Docker Hub上有很多现成的Nessus容器,但我试过的容器似乎要么包含旧版本的Nessus,要么很难设置。如果你使用Docker比我更好,你的里程可能会有所不同。
目标
在本文结束时,您应该能够
- 找到并下载Nessus Home
- 创建并应用正确的许可证密钥
- 创建一个Docker映像,该映像可用于运行Nessus Home的最新版本(撰写本文时为7.2.1)
前提准备
- Linux
- Docker 安装
- Docker的基本命令使用
安装docker
sudo curl -fsSL https://get.docker.com/ | sh
获取Nessus-Home许可证
获得Nessus-Home许可证,需要注册一个免费的Nessus帐户,点击 registration page 进行注册。
注册完成后,Tenable将向您发送激活码通过电子邮件。 请记住,家庭许可证仅授权(授权)您将运行扫描仪用于非商业目的。
如果不想一步一步学习制作Docker版Nessus可以直接使用已经制作好的镜像,在安装好Docker的基础上运行下方的命令:
|
|
如果你想一步一步学习那就跟着下面的步骤来执行:
- 前往 Nessus downloads page下载
- 选择
“Nessus-7.2.1-ubuntu1110_amd64.deb”
包。你需要先阅读并接受许可协议。 - 我使用这个包是因为它兼容64位的ubuntu16.04图像,我们稍后会构建它。
- 继续操作之前,确保软件包已完全下载(应该是58mb ) (开始),否则你会得到“意想不到的(意外的)尝试安装Nessus时出现“文件或流结束”错误。
创建Docker镜像
只要您收到包含激活码的电子邮件,就可以开始编写Dockerfile文件。
创建以下目录结构,其中包含一个空的Dockerfile和前面下载的Nessus安装包。
|
|
复制粘贴下方代码到Dockerfile
|
|
那么Dockerfile中发生了什么?
第一行告诉Docker我们想使用Ubuntu作为基础映像。当我们稍后从image中创建一个容器时,你会看到Docker会自动将Ubuntu image 拉入。
|
|
接下来,我们使用Docker的ADD命令将本地存储的Nessusa安装包放入Docker映像中。
|
|
为了使Docker image 尽可能小,接下来的几行实际上连续运行几个不同的命令(连续) .
|
|
这些符号是干什么用的?&&符号让一个命令一个接一个地运行,所以我们不需要使用RUN那么多次。 每次在文件中使用一条指令时,Docker都会在生成的image中添加一个额外的层,这将导致它的大小增加。出于这个原因,在添加指令时小心是个好主意尽量避免额外增加。
让我们将这些命令分解一下: 首先,我们更新了Ubuntu基础的软件包列表。
|
|
接下来我们安装“tzdata”
,这是处理时区和夏令时数据所需的软件包。
|
|
然后我们使用Ubuntu的dpkg工具安装Nessus包。
|
|
然后,从我们本地的环境中删除Nessus包。Nessus已经安装,因此没有必要拥有冗余(多余的)安装包浪费空间。
|
|
Nessus扫描程序在端口8834上监听请求,因此我们告诉Docker在我们的映像上公开它
|
|
最后,当运行基于我们Image的容器时,我们运行将启动Nessus进程的命令。
|
|
第一个命令启动nessusd服务
|
|
第二个命令实际上是一种变通方法,可以防止容器在nessusd过程开始后退出。
nessusd进程在后台运行,这使得Docker认为应用程序进程已经停止,因此我们需要创建前台进程来持久化(我们的容易。tail命令是一个在前台运行的过程的例子,在我们的Dockerfile中,我们告诉它写入/dev /null
目录。
/dev /null
默认情况下是Unix系统上的一个特殊目录,对它的写入没有任何影响(从/dev /null
读取应该返回0字节)。没有日志被填满或类似的东西,所以我们可以使用它来保持我们的容器正常运行,而不会对主要的nessusd进程产生任何影响。
|
|
构建Docker镜像
构建Docker镜像是一件简单的事情,可以通过在终端上运行以下命令来完成
|
|
“- t”参数允许我们提供一个标签,我们可以用它来引用镜像。最好阅读Docker文档,了解关于创建标签的建议,但是我将在本文中使用“fizzymatt / Nessus - 7 - Ubuntu
”。
最后一个参数“.” 告诉Docker在运行命令的位置搜索Dockerfile,因此如果您在其他位置运行该命令,请务必提供路径。
您可能会注意到Docker build output中写着“debconf: delaying package configuration, since apt-utils is not installed”
的警告。这是良性的出于我们的目的,可以忽略不计,但是如果你想知道更多,那么你可以阅读关于Github.的讨论。
构建完成后,可以通过运行以下命令检查Docker映像是否存在
|
|
您应该看到输出中列出的“fizzymatt / nessus-7-ubuntu
”图像(或者您决定标记它)
请务必阅读有关映像管理(删除、标记等)的Docker文档,因为这超出了本文的范围。
运行Docker容器
现在是时候运行基于我们构建的映像的容器(映像的实例)了。
在终端上运行以下命令: 如果未在与映像相同的目录中运行该命令,请确保提供正确的路径。 另外,请务必阅读Docker文档中的“docker run”。
|
|
- “- d”参数告诉Docker,我们想在不连接Dcoker的情况下运行容器。
- “- name”只是引用容器的一种简便方法。
- “- p”参数允许我们向主机发布特定端口。在这里,我们发布了端口8834 (我们容器装载的端口Nessus实例监听)到主机(在我的情况下是我的笔记本电脑)上的端口8834。
- 最后一个论点(
fizzymatt / Nessus - 7 - Ubuntu
)是对我们用来创建容器的镜像的引用。
通过运行以下命令检查容器是否已经启动:
|
|
这个命令告诉Docker列出所有容器,不管它们的状态如何。
- 如果一切正常,您应该在输出中看到容器的名称。在端口标题下,您将看到“
0.0.0.0:8834->8834/tcp
”,状态将为“Up”。 - 访问Nessus 现在容器正在运行。
- 您应该能够访问Nessus实例。 打开一个网页浏览器,指向: https://localhost:8834
- 根据浏览器的设置方式,如果浏览器提示,您可能需要添加额外异常。这是因为我们使用https连接连接到Nessus,但是本地主机不提供有效的SSL证书。
- 当我们只是在本地环境中评估Nessus时,没有必要担心这个问题,所以继续添加例外。
- 应提示您创建根帐户。输入用户名和密码,然后单击“继续”。
- 接下来,您需要输入激活(激活)如前所述,您应该通过电子邮件从Tenable收到的代码。请确保选择与您的许可证相对应的扫描仪类型,然后单击“继续”。
- 然后将进行大量的下载和安装,这需要花费几分钟来完成我的适度互联网连接。
- 完成所有这些后,Docker版的Nessus就部署成功了。
- 如果您单击“创建一个新扫描”,您应该能够看到所有已安装的模板。
在这个阶段,您应该有一个正在运行的Docker容器,您可以使用它来了解Nessus是如何工作的。你自己在这里,我没有时间给Nessus(正派的)测试运行,但希望这是足以让你能够学会如何使用部署。只记住,数据将被持久化容器内给我们当前的设置,如果你想让你的设置逗留在你停止或重建(重新组装)容器,那么你可能需要考虑使用volume。这超出了本文的范围。
翻译自:hackerbox.io
- 原文作者:码中春秋
- 原文链接:https://blog.taielab.com/2018-10-18/nessus-deploy-in-docker-tutorial.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。