4.1常见网络安全监控方式
在ALL IN ONE的架构中,主要有logstash、kibana、elasticseatch三者可以集中在某一台服务器中部署。logstash把采集获取数据经过插件加工过滤,把采集获取数据输出给elasticsearch存储,再由Kibana以图表的形式进行展示。因为此架构只有三个部件,所以场景简单,容易理解工作原理。ALL IN ONE的架构如图4-1所示。
图4-1 ALL IN ONE的架构
4.1.2 logstash分布式采集
logstash分布式采集框架是在ALL IN ONE的架构中进行扩展的。将原本是单一节点扩展成多节点部署在不同的服务器中,
可以把采集解析好的数据进传送给Elasticsearch进行存储,然后在Kibana可以进行查询、或者以图表形式展示,也可以生成日志报表展示,如图所示。因为有若干个Logstash部署在不同的服务器中,所以这种架构模式需要丰富的计算机资源,才可以抵消CPU和内部资源的消耗,不然就容易降低服务器的性能,严重的话可以导致服务器无法正常工作。Logstash分布式采集架构如图3-2所示。
图4-2 Logstash分布式采集架构
4.1.3 Beats分布式采集
Beats分布式采集框架是在Logstash分布式采集架构的基础上增加了 Beats进行日志信息的采集。Beats都是把收集得到的日志数据传送到Logstash中,由Logstash进行分析,结合指定条件进行过滤,然后再将结果传送至Elasticsearch,由Elasticsearch存储,最后通过Kibana展示给用户。与之相比,更重要的是Beats和Logstash二者在传输时就是使用了ssl/tls进行加密完成,实现client和server双向的认证,确保了网络安全通信。Beats分布式采集架构如图4-3所示。
图4-3 Beats分布式采集架构
4.1.4 Logstash分布式消息队列机制的架构
这种Logstash分布式架构具有消息队列机制,通过Logstash把收集到多方面的数据源数据,然后把收集到的数据通过过滤器进行分析后传送给elasticsearch进存储,最后由Kafaka以图表的形式展示给用户。Logstash分布式消息队列机制的架构如图4-4所示。
图4-4 Logstash分布式消息队列机制的架构
4.2 常见网络监控系统存在的不足
在常见的四种方案中,均存在一定的缺陷。由于以上方案不全面解决以下问题。主要体现在以下几点。
- 定位问题耗费大量时间
- 定位到问题日志后,难以过滤有效信息
- 日志量大,容易被删除.
- 网络中环境复杂,安全域较多,要从各个安全域中抓取日志
4.3 基于ELK的网络监控方案
Elasticsearch 对外使用 JSON 和客户端实现数据交换。这些优点促成了本文所实现的稳定性、高拓展、便于云端计算的日志搜索平台的搭建,从而发现潜在的漏洞与威胁。
选择的方案是基于如下方案完成了对日志分析系统的详细设计,它们提供了日志采集、分析、存储、可视化的能力,是一个比较完备的架构,是实现对海量日志数据进行分析和统计的基础。ELK网络安全监控架构图的架构图如图4-5所示。
图4-5 ELK网络安全监控架构图
功能性需求分析在本文可体现在本文构建的大数据日志分析平台是否能满足各个子模块的功能需求,在尽量满足性能需求的同时达到相应子模块的预期效果。通过前两章关于传统大数据搜索平台的经典案例介绍以及相应的国内外现状的分析。本文可将基于 ELK 的实时大数据日志搜索与分析平台分为如下 4 个子模块进行具体分析,系统的整体功能需求图如图 3.1 所示。并且重点关注以下问题:
- 日志采集需求
万事开头难,日志采集作为第一步,如何能够在尽量不消耗大量硬件资源的条件下采集到较为规范的日志,且在持续集成的系统中能保证日志按照一定的日志规范稳步增长,且保证日志数据的正确性。 (2)日志索引与存储需求
面对海量的日志信息,如何高效地利用大数据框架实现实时云计算并准确无误的存储到基于倒排索引的 Elasticsearch 中,并支持用户在离线后对各种类型的日志诸如 mysql 日志、Java 日志、Docker 日志等日志进行查阅与分析。
- 数据可视化需求
官方 kibana 网页界面给出了许多解决方案以便分析大数据日志,但因日志格式与应用场景的不同,如何通过自定义的数据可视化实现在不同日志信息的个性化可视化解决方案。以上即为当前大数据日志分析系统中亟待解决的问题,也是本文所提出的日志系统中重点关注的问题。由图 4-5 可知,本系统从功能性角度来分,可分为划分为四个小模块。对这四个小模块分别是进行日志的采集模块、信息的发布和订阅模块、日志信息的存储数据检索模块、日志的可视化分析模块。下面分别介绍上述 4 个模块的功能。
(1)日志采集模块
日志采集模块主要是利用部署在集群中各个服务器节点的轻量级采集工具,按照事先规定好的规范对服务器系统或者 Web 应用所产生的海量数据进行采集并进行汇总,包含简单的数据预处理功能,然后通过数据传输工具将其传输至消息队列进行限流。
(2)日志索引与存储模块
日志索引的功能类似于关系型数据库的存储与查询功能,只不过 Elasticserach 搜索引擎实现了以倒排索引为基础的数据存储方式与准实时索引的实现方法,给予使用者极好的查询体验,Elasticsearch 索引的关键特性在于,还能利用磁盘缓存实现准实时搜索的功能,具有良好的适应性。
(3)日志分析与可视化模块
日志分析与可视化模块主要有 KibanaWeb 网页客户端以及 python 第三方绘图工具得以实现,无论是对于海量日志的分析过程有多复杂,最终展示给用户的均以数据得以表现出来,通过例如直方图、条形图等多种可视化图形的搭配与结合,最终用户可以直观地看到日志流量的分布情况以及一定的预警信息。
本系统采集了多种类型的日志数据,主要来源于某真实金融机构交易日志所得。其中,从采集工具上可大体分为基于 Logstash 工具的日志采集以及基于 FileBeat 的日志采集。具体采集类型与设计如下所示。可以把 Logstash 看作是一个对日志信息进行处理的“黑箱”或管道。由于日志数据的来源是多种多样的,因此可以在 Logstash 中的 input 部分设置对不同来源的数据进行处理的方法。
(1)处理基于 file 方式输入的日志信息
这里的 file 方式输入即文件输入,本系统所用到的日志数据来源于某金融机构日常产生交易行为的行为日志构成,该机构将每天产生的交易汇总信息存储到systemlog 文件中,并按照当前日期进行编号,为了清理服务器平台的冗余空间,服务器默认只保留两周内的系统日志。综上所述,需要对指定的文件中读取数据并输入到 Logstash。一般来说,这些日志文件的格式均是一行进行组织的,因此可以通过 ELK进行监控,其关键的形式化 Logstash 配置文件参数说明如下:
Code:编码方式,默认为 plain,非必需项;
Discover_interval:非必需项,
4.4 ELK框架搭建及配置
在搭建配置前需要先下载开源项目,elasticsearch项目下载指令如下:
Wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.0.0-linux-x86_64.tar.gz wget https://artifacts.elastic.co/downloads/kibana/kibana-8.0.0-linux-x86_64.tar.gz |
下载完成后进行创建用户与文件夹,操作指令如下:
groupadd es
useradd es -g es
passwd es
> ...
mkdir /opt/data/{eslogs,esdata}
chown es:es -R /opt/data/eslogs
chown es:es -R /opt/data/esdata
cd config vim kibana.yml -------------- server.port: 18791 #默认5601 server.host: 0.0.0.0 |
创建完成后进行项目解压与授权,操作指令如下:
tar zxvf elasticsearch-8.0.0-linux-x86_64.tar.gz tar zxvf elasticsearch-8.0.0-linux-x86_64.tar.gz chown es:es -R elasticsearch-8.0.0 -R chmod 755 -R elasticsearch-8.0.0 |
解压完成后使用 elasticsearch搭建需要进行系统配置。Elasticsearch配置相关代码指令如下:
cluster.name: es-application
node.name: node-1
path.data: /opt/data/esdata
path.logs: /opt/data/eslogs
bootstrap.memory_lock: false
network.host: 192.168.1.22
http.port: 9200
transport.port: 9300
#transport.tcp.compress: true
http.cors.enabled: true
http.cors.allow-origin: "*"
http.host: [_local_, _site_]
# 将节点名称解开注释并重命名(单台部署可以使用默认名称,集群部署注意集群中的名称不能重复), 和network.host一致 discovery.seed_hosts: ["192.168.1.22"] #将集群主节点列表解开注释,使用当前节点为主节点, 和node.name一致 #cluster.initial_master_nodes: ["node-1"] |
配置完成后,elasticsearch即可启动,elasticsearch启动指令如下:
cd bin && su es chown es:es -R /opt/data/esdata ./elasticsearch --校验 (进程与端口有存在,则说明配置成功) ps -ef|grep elasticsearch netstat -an|grep 9200 |
elasticsearch控制台输出分析如下:
[2023-02-07T19:40:42,600][INFO ][o.e.h.AbstractHttpServerTransport] [node-1] publish_address {192.168.1.22:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}, {192.168.1.22:9200}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.
#默认登录用户与密码 bin/elasticsearch-reset-password -u elastic 可修改
ℹ️ Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`): 03RFsycEjMDQytoK7AlD
ℹ️ HTTP CA certificate SHA-256 fingerprint:
d0158c847ec807c16d7f20ce38a97a333588aa1d7e7972ecab982a62c3a30312
# Kibana 本置es的认证信息,通过bin/elasticsearch-create-enrollment-token -s kibana可修改
ℹ️ Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes): eyJ2ZXIiOiI4LjAuMCIsImFkciI6WyIxOTIuMTY4LjEuMjI6OTIwMCJdLCJmZ3IiOiJkMDE1OGM4NDdlYzgwN2MxNmQ3ZjIwY2UzOGE5N2EzMzM1ODhhYTFkN2U3OTcyZWNhYjk4MmE2MmMzYTMwMzEyIiwia2V5IjoiakF4UElYOEItclo3N1BpYU9qdEU6ZHNyOTlmNW5UczJuSC1zZnJaTGtkdyJ9
# 节点加入集群的配置token, 通过bin/elasticsearch-create-enrollment-token -s node
可获取
ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes): eyJ2ZXIiOiI4LjAuMCIsImFkciI6WyIxOTIuMTY4LjEuMjI6OTIwMCJdLCJmZ3IiOiJkMDE1OGM4NDdlYzgwN2MxNmQ3ZjIwY2UzOGE5N2EzMzM1ODhhYTFkN2U3OTcyZWNhYjk4MmE2MmMzYTMwMzEyIiwia2V5Ijoiamd4UElYOEItclo3N1BpYV9UdVU6b3BPV3BWZFlST1dUSWVVYzdyd3ZaUSJ9
If you're running in Docker, copy the enrollment token and run:
`docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.0.0`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4.4.2 kibana安装配置
Kibana启动指令如下:
cd bin && su es ./kibana --查看进程 netstat -ano|grep 5601 |
Kibana启动后通过浏览器访问并配置:步骤如下:
访问http://localhost:5601 查看es控制台 --- 提示输入token 1. 将刚刚控制台输出的“Configure Kibana to use this cluster”'s token复制到对话框中 2. 等待初始化 3. 提示用户与密码 输入启动es时提示的默认用户和密码 elastic/03RFsycEjMDQytoK7AlD |
部署后Kibana登录界面如图4-6所示。
图4-6 Kibana登录界面
4.4.3 filebeat安装配置
Filebeat的压缩包下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
安装文件路径如下:
Type | Description | Location |
home | Home of the Filebeat installation. | {extract.path} |
bin | The location for the binary files. | {extract.path} |
config | The location for configuration files. | {extract.path} |
data | The location for persistent data files. | {extract.path}/data |
logs | The location for the logs created by Filebeat. | {extract.path}/logs |
Filebeat命令行启
/usr/share/filebeat/bin/filebeat Commands SUBCOMMAND [FLAGS]
Commands | 描述 | |
导出配置到控制台,包括index template, ILM policy, dashboard | ||
显示帮助文档 | ||
管理配置Modules | ||
Runs Filebeat. This command is used by default if you start Filebeat without specifying a command. | ||
设置初始环境。包括index template, ILM policy, write alias, Kibana dashboards (when available), machine learning jobs (when available). | ||
测试配置文件 | ||
显示版本信息 | ||
Global Flags | 描述 | |
-E "SETTING_NAME=VALUE" | 覆盖配置文件中的配置项 | |
--M "VAR_NAME=VALUE" | 覆盖Module配置文件的中配置项 | |
-c FILE | 指定filebeat的配置文件路径。路径要相对于`path.config | |
-d SELECTORS | ||
-e | ||
--path.config | ||
--path.data | ||
--path.home | ||
--path.logs | ||
--strict.perms |
4.4.4auditbeat安装配置
Auditbeat 客户端部署规划
10.x.x.4 应用 Auditbeat \主应用服务器 \
10.x.x.5 应用 Auditbeat \主应用服务器
10.x.x.6 应用 Auditbeat \主应用服务器
10.x.x.10 应用 Auditbeat \
10.x.x.11 应用 Auditbeat \
10.x.x.12 应用 Auditbeat \
10.x.x.19 应用 Auditbeat \
10.x.x.20 应用 Auditbeat \
10.x.x.21 应用 Auditbeat \
10.x.x.26 应用 Auditbeat \mysql
10.x.x.27 应用 Auditbeat \mysql
官方链接下载:
https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-7.8.0-x86_64.rpm
安装: rpm -vi auditbeat-7.8.0-x86_64.rpm
完成上述的操作后完成了ELK框架的部署搭建和配置。