查看原文
其他

Docker实战:用Elastic社区开源组件打造属于自己的网络探针

绿盟科技研究通讯 绿盟科技研究通讯 2021-03-12

网络探针,就是一个用于捕获、分析网络数据包的组件。目前有一些捕获、分析网络数据包的开源组件,比如Yaf、Bro、Packetbeat等,但是这些组件的核心在于流量的采集,而流量日志的存储、界面展示则没有。

所以我们会希望拥有自己的网络探针,捕获、分析数据包,并以界面的形式展示查询。一个完全使用全套Elastic社区开源组件的解决方案是,使用Packetbeat来监听网络流量(Packetbeat是Elastic社区Beats组件家族的一种,Beats组件家族还有其余的用于分析文件日志、审计日志等的组件,如Filebeat,Auditbeat),而将流量日志存储在Elasticsearch中,使用Kibana读取Elasticsearch中的日志并以日志检索、统计图表等形式提供界面查询。但是在每一个不同的环境上部署网络探针时,都需要重新把所有组件下载一遍配置一遍,实在是很繁琐。那么可不可以利用Docker容器技术,将配置好的环境生成镜像,以后在不同的环境,只需要导入这个镜像运行即可。如下图所示:

PacketBeat目前支持的协议类型如下:

  • ICMP (v4 and v6)

  • DNS

  • HTTP

  • AMQP 0.9.1

  • Cassandra

  • Mysql

  • PostgreSQL

  • Redis

  • Thrift-RPC

  • MongoDB

  • Memcache

  • TLS

下面咱们就来尝试一下吧!

一、安装Docker并运行CentOS容器

如果是CentOS 7系统,那么安装Docker非常简单,只需要一句简单的命令:yum install docker即可。安装完毕后,使用systemctl start docker命令,启动Docker daemon进程;并且使用systemctl enable docker命令设置Docker为开机启动。安装完毕后,就可以尝试运行一个CentOS容器。运行命令时,Docker首先会检查本地是否有CentOS镜像,如果没有的话,就会从官方的Docker Hub Registry下载镜像,然后再用该镜像运行一个新容器。

值得一提的是,访问国外的Docker镜像站点非常的慢,而且有时会拉取镜像不成功。所以一般推荐把镜像切换为国内镜像,命令为:

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["http://f2d6cb40.m.daocloud.io"]

}

EOF

systemctl restart docker

鉴于下载的Centos镜像为最小包镜像,所以需要手动安装一些必要的软件。如:

yum install wget

yum install net-tools

yum install libpcap

yum install libpcap-devel

yum install sudo


二、安装必要的软件


1下载组件

下载需要的安装包,包括JDK1.8,Elasticsearch,Packetbeat以及Kibana。将它们放在一个目录下,如下图所示:

2新建用户并赋权

由于Elasticsearch不可以用root用户运行。所以我们新建一个名为dell的用户,并赋予它免密码sudo权限。

useradd dell

passwd dell

visudo 

然后切换到dell用户(su - dell)。

3配置JDK

开始安装JDK,将JDK1.8解压到/home/dell目录下,并配置环境变量:

运行java -version命令有版本信息被打印出来,即安装成功。

4配置Elasticsearch

接着解压缩Elasticsearch到/home/dell目录下,并配置elasticsearch.yml文件,配置cluser.name为 my_network_probe,network.host为localhost,http.port为9200。

5配置Packetbeat

然后解压缩Packetbeat到/home/dell目录下,并配置packetbeat.yml文件里需要写入的Elasticsearch:

6配置Kibana

再解压缩Kibana到/home/dell目录下,配置/home/dell/kibana/config/kibana.yml文件:

并指定查询的Elasticsearch:

7编写启动脚本

最后再在/home/dell目录下新建start.sh文件,负责启动所有组件:

三、将运行的容器生成为镜像

如下图的命令,就是将正在运行的容器生成名为nsfocus/my_network_probe3的镜像:

四、将镜像打包

如下图的命令,就是将名为nsfocus/my_network_probe3的镜像,打为tar包:

五、导入镜像

将镜像导入到另外一台需要使用此镜像的机器上,如下图的命令,就是在另外一台机器导入刚才打包的镜像:

此时使用docker images查看,是可以看到导入的这个镜像的:

运行此镜像,指定--network=host参数,表示Docker容器共享宿主机网络。共享宿主机网络的好处就在于,可以使用Packetbeat来监听宿主机上指定网卡的流量。由于共享了网络,所以无需进行端口映射,在Docker容器里打开的端口即是在宿主机上打开端口,进入容器看到的主机名也是宿主机的主机名。

进入该容器,修改Kibana对应的配置文件里的IP(就配置为宿主机的IP),方便外部主机访问Web界面:

默认Packetbeat是配置的监听所有网卡的流量,如果期望只监听特定网卡的流量,则修改/home/dell/packetbeat/packetbeat.yml文件里的packetbeat.interface.device: 网卡名即可(以root权限修改)。举个例子,我们这台主机的p2p4网卡是作为镜像流量接入的网卡,所以我们将监听的网卡配置为p2p4:

运行start.sh脚本,启动所有组件:

Ctrl+P+Q退出容器并保持容器是运行状态。

此时可以看到宿主机上的5601端口已经处于监听状态:

 

此时访问5601端口,即可以看到对应的Kibana界面。在索引发现处填入packetbeat-*:

我们就可以看到写入的数据量:

 

然后还可以在Discover处查看到流量日志的相关信息:

可以看到Packetbeat采集的流量,类型包括Flow流之外,还有ICMP,DNS,TLS等,还是比较丰富的:

 

我们可以在Discover界面上添加过滤器,查询指定sip、dport的流量:

以后在这台主机上直接使用容器ID进行启动、停止、连接容器动作即可,非常方便。

六、 使用探针进行数据分析

我们可以生成访问最多的目的IP的柱状图,一般而言被访问最多的目的IP且目的端口为常用端口的话,该目的IP为服务器的可能性较大。

 

我们还可以生成特定IP在一段时间范围内上/下行流量的趋势图,一般而言工作时间段和非工作时间段的流量情况是有差别的。如果在非工作时间段出现很大的流量,就需要排查该主机是否有运行定时下载任务的软件,或者在被远程登录进行工作等。

我们还可以生成DNS请求域名的环形图。DNS请求的域名中如果出现了非常长且子域名像加密字符长串的情况,这要排查是否存在DNS隐蔽信道。像McAfee 等安全软件会使用DNS隐蔽信道来发送一些信息。


  内容编辑:绿盟科技 皮靖  责任编辑:肖晴


期回顾

本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。

关于我们


绿盟科技研究通讯由绿盟科技创新中心负责运营,绿盟科技创新中心是绿盟科技的前沿技术研究部门。包括云安全实验室、安全大数据分析实验室和物联网安全实验室。团队成员由来自清华、北大、哈工大、中科院、北邮等多所重点院校的博士和硕士组成。

绿盟科技创新中心作为“中关村科技园区海淀园博士后工作站分站”的重要培养单位之一,与清华大学进行博士后联合培养,科研成果已涵盖各类国家课题项目、国家专利、国家标准、高水平学术论文、出版专业书籍等。

我们持续探索信息安全领域的前沿学术方向,从实践出发,结合公司资源和先进技术,实现概念级的原型系统,进而交付产品线孵化产品并创造巨大的经济价值。

长按上方二维码,即可关注我们

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存