案例描述
ELK是一个用于处理和分析日志数据的开源技术栈,由三个主要组件组成,E即Elasticsearch,L即Logstash,K即Kibana。
Elasticsearch:是个开源分布式搜索引擎,用于存储、搜索和分析大量数据,提供实时搜索功能。
Logstash:一个数据收集和处理管道,能够从各种来源获取日志数据,进行过滤、转换,并将数据传输到 Elasticsearch。
Kibana:一个数据可视化工具,提供图形化界面,Kibana可以为Logstash和ElasticSearch提供友好的日志分析Web界面,可以帮助汇总、分析和搜索重要数据日志。
案例一 入侵检测案例
案例准备
规划节点
表5-14-1 规划节点
IP地址 |
主机名 |
节点 |
192.168.16.200 |
chkrootkit |
部署节点 |
案例实施
1.chkrootkit工具部署
因为chkrootkit没有包含在官方的CentOS源中,因此要采取手动编译的方法来安装。首先安装编译环境,使用提供的makechk.tar.gz软件包上传至chkrootkit节点,解压并配置成本地Yum源,然后使用Yum命令安装gcc编译环境,命令如下:
[root@chrootkit ~]# yum install gcc gcc-c++ make glibc-static -y
... ...
忽略输出
... ...
Updated:
make.x86_64 1:3.82-24.el7
Dependency Updated:
glibc.x86_64 0:2.17-324.el7_9
glibc-common.x86_64 0:2.17-324.el7_9
libgcc.x86_64 0:4.8.5-44.el7
libgomp.x86_64 0:4.8.5-44.el7
libstdc++.x86_64 0:4.8.5-44.el7
Complete!
安装完编译环境后,使用提供的chkrootkit.tar.gz软件包上传至chkrootkit节点的/root目录下。进行解压,编译安装chkrootkit服务,命令如下:
[root@chrootkit ~]# tar -zxvf chkrootkit.tar.gz
[root@localhost ~]# cd chkrootkit-0.55/
[root@localhost chkrootkit-0.55]# make sense
cc -DHAVE_LASTLOG_H -o chklastlog chklastlog.c
cc -DHAVE_LASTLOG_H -o chkwtmp chkwtmp.c
cc -DHAVE_LASTLOG_H -D_FILE_OFFSET_BITS=64 -o ifpromisc ifpromisc.c
cc -o chkproc chkproc.c
cc -o chkdirs chkdirs.c
cc -o check_wtmpx check_wtmpx.c
cc -static -o strings-static strings.c
cc -o chkutmp chkutmp.c
没有报错的话即为安装成功。
2.chkrootkit使用
执行chkrootkit文件扫描系统,命令如下:
[root@localhost chkrootkit-0.55]# ./chkrootkit
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
... ...
忽略输出
... ...
Checking `slapper'... not infected
Checking `z2'... chklastlog: nothing deleted
Checking `chkutmp'... chkutmp: nothing deleted
Checking `OSX_RSPLUG'... not tested
chkrootkit默认检索整个系统,我们可以通过管道去搜索INFECTED(被感染)关键字,方便查看。可以将查询的内容重定向到log文件,然后再查看扫描结果是否有INFECTED(被感染)、Warning(告警)、Possible(可能被感染)关键字,命令如下:
[root@chkrootkit chkrootkit-0.55]# mkdir /var/log/chkrootkit
[root@chkrootkit chkrootkit-0.55]# ./chkrootkit >> /var/log/chkrootkit/chkrootkit.log 2>&1
[root@chkrootkit chkrootkit-0.55]# grep -e "INFECTED|Warning|Possible" /var/log/chkrootkit/chkrootkit.log
因为使用的虚拟机是一台刚安装完系统的主机,所以使用chkrootkit工具没有扫描到漏洞。针对被感染rootkit的系统,最安全而有效的方法就是备份数据重新安装系统。
案例二 日志分析案例
案例准备
规划节点
表5-14-1 规划节点
IP地址 |
主机名 |
节点 |
192.168.16.200 |
elk |
部署节点 |
案例实施
1.基础环境准备
(1)设置主机名
将该虚拟机的主机名设置为elk,命令如下:
[root@localhost ~]# hostnamectl set-hostname elk
(2)确认时区
确认虚拟机的时区为东八区时区,如果不是,使用如下命令修改:
[root@elk ~]# TZ='Asia/Shanghai'; export TZ
[root@elk ~]# date
2024年 10月 12日 星期六 15:49:24 CST
(3)关闭防火墙和SELinux
确认防火墙处于关闭状态,关闭防火墙,确认SELinux服务处于关闭状态,临时关闭SELinux命令命令如下:
[root@elk ~]# systemctl stop firewalld
[root@elk ~]# setenforce 0
2.安装Docker环境
(1)配置Yum源
使用提供的docker-repo.tar.gz上传至elk节点的/opt目录下,解压自行配置Yum源,配置完之后,检查Yum源是否可用,命令如下:
[root@elk ~]# yum repolist
Loaded plugins: fastestmirror
Determining fastest mirrors
docker | 3.0 kB 00:00:00
docker/primary_db | 161 kB 00:00:00
repo id repo name status
Docker Docker 168
centos centos 4070
repolist: 4238
(2)安装Docker服务
安装Docker-ce服务,命令如下:
[root@elk ~]# yum install docker-ce -y
(3)启动Docker服务
启动Docker服务,并设置开机自启,命令如下:
[root@elk ~]# systemctl start docker
[root@elk ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
3.启动ELK服务
(1)上传镜像
将提供的sepb_elk_latest.tar容器镜像上传至elk节点的/root目录下,然后load至本地,命令如下:
[root@elk ~]# docker load -i sepb_elk_latest.tar
... ...
忽略输出
... ...
Loaded image: sebp/elk:latest
[root@elk ~]# docker images #查看镜像是否被上传
REPOSITORY TAG IMAGE ID CREATED SIZE
sebp/elk latest d5e175b50ad8 2 months ago 2.6GB
(2)修改参数
修改sysctl.conf配置文件参数,修改如下:
[root@elk ~]# vi /etc/sysctl.conf
#在sysctl.conf配置文件中,添加一行代码如下所示
vm.max_map_count=262144
添加完之后保存退出文件,并生效配置,命令如下:
[root@elk ~]# sysctl -p
vm.max_map_count = 262144
若不修改此参数,在启动ELK镜像时,会报如下错误:
(3)启动ELK镜像
在配置完上述环境后,启动ELK镜像,命令如下:
[root@elk ~]# docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -itd --name elk sebp/elk
589ddc06d13590e95ce6248bde4c5545e07641ced1eb9779c1f76663c6963671
在等待一段时间后,在浏览器输入elk节点的IP:5601访问,如下图所示:
看到该页面,说明ELK镜像成功启动,接下来可以配置目标节点,也就是想审查日志的节点。
4.ELK系统使用
(1)添加数据
在ELK系统的首页,单击左下角的“Add data”选项,进入添加数据界面,如下图所示:
在该界面,找到“Elasticsearch logs”,单击,进入如下界面:
在该界面,选择“RPM”方式,如下图所示:
该界面是如何配置目标节点的步骤,包括安装filebeat软件、配置文件、启动服务等。在该实操案例中,提供了离线的安装包,不需要按照界面上的步骤操作,具体安装操作步骤,详见下面的内容。
(2)配置目标节点
①节点准备
使用OpenStack平台的Controller节点作为目标节点,也可以使用OpenStack的all-in-one节点,笔者此处为了方便演示,使用的是一台已经安装完OpenStack云平台的all-in-one节点.(IP
为192.168.16.100)
②上传filebeat软件
将提供的filebeat-7.13.2-x86_64.rpm软件包上传至目标节点,并安装,命令如下:
[root@controller ~]# rpm -ivh filebeat-7.13.2-x86_64.rpm
warning: filebeat-7.13.2-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:filebeat-7.13.2-1 ################################# [100%]
③修改配置文件
修改all-in-one节点上的filebeat.yml配置文件,修改内容如下:
[root@controller ~]# vi /etc/filebeat/filebeat.yml
# ================ Filebeat inputs =====================
... ...
# Change to true to enable this input configuration.
enabled: true #将false改为true
# Paths that should be crawled and fetched. Glob based paths.
paths: #修改path段落,添加要收集的日志路径
- /var/log/messages #指定系统日志的文件路径
- /var/log/mariadb/mariadb.log #这是数据库日志
- /var/log/keystone/keystone.log #这是数据库日志
#- c:\programdata\elasticsearch\logs\*
...忽略输出...
# ================= Kibana ========================
... ...
# IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
host: "192.168.16.200:5601" #去掉注释,填写kibana的监听端口及地址
...忽略输出...
# ------------- Elasticsearch Output -------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.16.200:9200"] #修改为Elasticsearc的监听地址及端口
... ...
④启用模块及初始化
在修改完filebeat配置文件后,需要启用elasticsearch模块,并初始化filebeat,命令如下:
[root@controller ~]# filebeat modules enable elasticsearch
Enabled elasticsearch
[root@openstack ~]# filebeat setup
...忽略输出...
Loaded machine learning job configurations
Loaded Ingest pipelines
出现上述信息,初始化成功。
⑤启动filebeat服务
在完成初始化操作后,启动filebeat服务,命令如下:
[root@openstack ~]# systemctl start filebeat
至此配置目标节点完成,接下来需要到ELK系统的界面进行操作。
(3)ELK系统使用
①完成节点添加
回到ELK系统界面,在页面的最下方,有一个“Discover”按钮,如下图所示:
单击“Discover”按钮,完成节点的添加,如下图所示:
如果看不见数据,由于时间不同步导致,可以查询日志时间改为15天内数据。
②数据展示
当前ELK系统监控的是all-in-one节点的messages系统日志、数据库日志、keystone的日志,读者可以自行添加想被监控的日志文件。
往keystone.log日志文件下写入一段文字,命令如下:
[root@openstack ~]# echo testelk >> /var/log/keystone/keystone.log
回到ELK系统界面,在输入框搜索testelk,并查看,如下图所示:
能够看到相应的日志信息,则说明ELK日志分析系统运行正常。关于更多的ELK系统的使用,读者可以自行学习。