介绍

我最近一直在研究自动化漏洞扫描,决定使用Tenable的Nessus扫描仪试一试。我使用这个产品的时间还不够长,不足以写一篇有意义的文章,但我认为关于如何在Docker容器中将其搭建的快速教程可能会帮助那些想要自己尝试的人。

Docker Hub上有很多现成的Nessus容器,但我试过的容器似乎要么包含旧版本的Nessus,要么很难设置。如果你使用Docker比我更好,你的里程可能会有所不同。

目标

在本文结束时,您应该能够

  1. 找到并下载Nessus Home
  2. 创建并应用正确的许可证密钥
  3. 创建一个Docker映像,该映像可用于运行Nessus Home的最新版本(撰写本文时为7.2.1)

前提准备

  1. Linux
  2. Docker 安装
  3. Docker的基本命令使用

安装docker

sudo curl -fsSL https://get.docker.com/ | sh

获取Nessus-Home许可证

获得Nessus-Home许可证,需要注册一个免费的Nessus帐户,点击 registration page 进行注册。

注册完成后,Tenable将向您发送激活码通过电子邮件。 请记住,家庭许可证仅授权(授权)您将运行扫描仪用于非商业目的。

如果不想一步一步学习制作Docker版Nessus可以直接使用已经制作好的镜像,在安装好Docker的基础上运行下方的命令:

1
docker pull fizzymatt/nessus-7-ubuntu

如果你想一步一步学习那就跟着下面的步骤来执行:

  1. 前往 Nessus downloads page下载
  2. 选择“Nessus-7.2.1-ubuntu1110_amd64.deb”包。你需要先阅读并接受许可协议。
  3. 我使用这个包是因为它兼容64位的ubuntu16.04图像,我们稍后会构建它。
  4. 继续操作之前,确保软件包已完全下载(应该是58mb ) (开始),否则你会得到“意想不到的(意外的)尝试安装Nessus时出现“文件或流结束”错误。

创建Docker镜像

只要您收到包含激活码的电子邮件,就可以开始编写Dockerfile文件。

创建以下目录结构,其中包含一个空的Dockerfile和前面下载的Nessus安装包。

1
2
3
- nessus
    -- Dockerfile
    -- Nessus-7.2.1-ubuntu1110_amd64.deb

复制粘贴下方代码到Dockerfile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
FROM ubuntu:16.04

ADD Nessus-7.2.1-ubuntu1110_amd64.deb /tmp/Nessus-7.2.1-ubuntu1110_amd64.deb

RUN apt-get update -y \
    && apt-get install -y apt-utils tzdata \
    && dpkg -i /tmp/Nessus-7.2.1-ubuntu1110_amd64.deb \
    && rm -r /tmp/Nessus-7.2.1-ubuntu1110_amd64.deb


EXPOSE 8834

CMD service nessusd start && tail -f /dev/null

那么Dockerfile中发生了什么?

第一行告诉Docker我们想使用Ubuntu作为基础映像。当我们稍后从image中创建一个容器时,你会看到Docker会自动将Ubuntu image 拉入。

1
FROM ubuntu:16.04

接下来,我们使用Docker的ADD命令将本地存储的Nessusa安装包放入Docker映像中。

1
ADD Nessus-7.2.1-ubuntu1110_amd64.deb /tmp/Nessus-7.2.1-ubuntu1110_amd64.deb

为了使Docker image 尽可能小,接下来的几行实际上连续运行几个不同的命令(连续) .

1
2
3
4
RUN apt-get update -y \
    && apt-get install -y apt-utils tzdata \
    && dpkg -i /tmp/Nessus-7.2.1-ubuntu1110_amd64.deb \
    && rm -r /tmp/Nessus-7.2.1-ubuntu1110_amd64.deb

这些符号是干什么用的?&&符号让一个命令一个接一个地运行,所以我们不需要使用RUN那么多次。 每次在文件中使用一条指令时,Docker都会在生成的image中添加一个额外的层,这将导致它的大小增加。出于这个原因,在添加指令时小心是个好主意尽量避免额外增加。

让我们将这些命令分解一下: 首先,我们更新了Ubuntu基础的软件包列表。

1
RUN apt-get update -y \

接下来我们安装“tzdata”,这是处理时区和夏令时数据所需的软件包。

1
&& apt-get install -y apt-utils tzdata \

然后我们使用Ubuntu的dpkg工具安装Nessus包。

1
&& dpkg -i /tmp/Nessus-7.2.1-ubuntu1110_amd64.deb \

然后,从我们本地的环境中删除Nessus包。Nessus已经安装,因此没有必要拥有冗余(多余的)安装包浪费空间。

1
&& rm -r /tmp/Nessus-7.2.1-ubuntu1110_amd64.deb

Nessus扫描程序在端口8834上监听请求,因此我们告诉Docker在我们的映像上公开它

1
EXPOSE 8834

最后,当运行基于我们Image的容器时,我们运行将启动Nessus进程的命令。

1
CMD service nessusd start && tail -f /dev/null

第一个命令启动nessusd服务

1
CMD service nessusd start ....

第二个命令实际上是一种变通方法,可以防止容器在nessusd过程开始后退出。

nessusd进程在后台运行,这使得Docker认为应用程序进程已经停止,因此我们需要创建前台进程来持久化(我们的容易。tail命令是一个在前台运行的过程的例子,在我们的Dockerfile中,我们告诉它写入/dev /null目录。

/dev /null默认情况下是Unix系统上的一个特殊目录,对它的写入没有任何影响(从/dev /null读取应该返回0字节)。没有日志被填满或类似的东西,所以我们可以使用它来保持我们的容器正常运行,而不会对主要的nessusd进程产生任何影响。

1
.... tail -f /dev/null

构建Docker镜像

构建Docker镜像是一件简单的事情,可以通过在终端上运行以下命令来完成

1
docker build -t fizzymatt/nessus-7-ubuntu .

“- t”参数允许我们提供一个标签,我们可以用它来引用镜像。最好阅读Docker文档,了解关于创建标签的建议,但是我将在本文中使用“fizzymatt / Nessus - 7 - Ubuntu”。

最后一个参数“.” 告诉Docker在运行命令的位置搜索Dockerfile,因此如果您在其他位置运行该命令,请务必提供路径。

您可能会注意到Docker build output中写着“debconf: delaying package configuration, since apt-utils is not installed”的警告。这是良性的出于我们的目的,可以忽略不计,但是如果你想知道更多,那么你可以阅读关于Github.的讨论。

构建完成后,可以通过运行以下命令检查Docker映像是否存在

1
docker images

您应该看到输出中列出的“fizzymatt / nessus-7-ubuntu”图像(或者您决定标记它)

请务必阅读有关映像管理(删除、标记等)的Docker文档,因为这超出了本文的范围。

运行Docker容器

现在是时候运行基于我们构建的映像的容器(映像的实例)了。

在终端上运行以下命令: 如果未在与映像相同的目录中运行该命令,请确保提供正确的路径。 另外,请务必阅读Docker文档中的“docker run”。

1
docker run -d --name nessus-7-ubuntu -p 8834:8834 fizzymatt/nessus-7-ubuntu
  1. “- d”参数告诉Docker,我们想在不连接Dcoker的情况下运行容器。
  2. “- name”只是引用容器的一种简便方法。
  3. “- p”参数允许我们向主机发布特定端口。在这里,我们发布了端口8834 (我们容器装载的端口Nessus实例监听)到主机(在我的情况下是我的笔记本电脑)上的端口8834。
  4. 最后一个论点( fizzymatt / Nessus - 7 - Ubuntu )是对我们用来创建容器的镜像的引用。

通过运行以下命令检查容器是否已经启动:

1
docker ps -a

这个命令告诉Docker列出所有容器,不管它们的状态如何。

  1. 如果一切正常,您应该在输出中看到容器的名称。在端口标题下,您将看到“0.0.0.0:8834->8834/tcp”,状态将为“Up”。
  2. 访问Nessus 现在容器正在运行。
  3. 您应该能够访问Nessus实例。 打开一个网页浏览器,指向: https://localhost:8834
  4. 根据浏览器的设置方式,如果浏览器提示,您可能需要添加额外异常。这是因为我们使用https连接连接到Nessus,但是本地主机不提供有效的SSL证书。
  5. 当我们只是在本地环境中评估Nessus时,没有必要担心这个问题,所以继续添加例外。
  6. 应提示您创建根帐户。输入用户名和密码,然后单击“继续”。
  7. 接下来,您需要输入激活(激活)如前所述,您应该通过电子邮件从Tenable收到的代码。请确保选择与您的许可证相对应的扫描仪类型,然后单击“继续”。
  8. 然后将进行大量的下载和安装,这需要花费几分钟来完成我的适度互联网连接。
  9. 完成所有这些后,Docker版的Nessus就部署成功了。
  10. 如果您单击“创建一个新扫描”,您应该能够看到所有已安装的模板。

在这个阶段,您应该有一个正在运行的Docker容器,您可以使用它来了解Nessus是如何工作的。你自己在这里,我没有时间给Nessus(正派的)测试运行,但希望这是足以让你能够学会如何使用部署。只记住,数据将被持久化容器内给我们当前的设置,如果你想让你的设置逗留在你停止或重建(重新组装)容器,那么你可能需要考虑使用volume。这超出了本文的范围。

翻译自:hackerbox.io