威胁狩猎:基于ELK的日志监控

0x、概述!

ELK Stack即以前的Elastic StackElk StackElastic公司专门为集中化日志管理设计的免费开源软件组合。它允许搜索、分析和可视化来自不同来源的日志。

狙剑软件使用实验(通过本实验的学习,你能够了解主机安全软件监控原理,学会如何利用主机安全软件狙剑监控可疑进程,学会如何利用狙剑软件对本机进行注册表和文件的管理。)

如在ubuntu上安装配置ELK Stack,需要如下先决条件:

  • Ubuntu 20.04

  • 最好使用Root 权限进行配置

0x1 内容目录
  • ELK Stack 组成部分

  • 安装 Java和所有依赖项

  • 安装和配置 Elasticsearch

  • 安装和配置 Logstash

  • 安装和配置 Kibana

  • 安装和配置 Nginx

  • 安装和配置 Filebeat

  • 配置 Linux日志到 Elasticsearch

  • Kibana中创建日志仪表板

  • 监控 SSH事件

0x2 ELK Stack 组成

1、ElasticsearchElasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,使用RESTful API,可以存储、检索数据。

2、LogstashLogstash是一个开源的数据收集引擎,可以采集不同数据源的数据发送给Elasticsearch

3、Kibana:用于分析和可视化日志的 Web可视化平台

4、Filebeat:轻量级的日志收集和转发器,可以把数据收集后转发到LogstashElasticsearch

0x3 安装 Java 和所有依赖项

ElasticsearchJava编写的程序,所以需要安装JDK,可以使用如下命令安装OpenJDK和其他一些所需的软件包。

sudo apt install -y openjdk-14-jdk wget apt-transport-https curl

然后导入Elasticsearch的公钥,添加apt软件源

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

添加软件源

0x4 安装和配置Elasticsearch

更新软件源

sudo apt update

然后安装(国内安装比较慢,请耐心等待)

sudo apt-get install elasticsearch

安装完后,开始配置Elasticsearch

Elasticsearh默认监听9200端口。为了安全,需要设置一下限制外网访问。使外部网络无法通过REST API访问数据和elastic集群。Elasticsearch的配置文件是elasticsearch.yml。修改它就行。

打开配置文件

sudo gedit  /etc/elasticsearch/elasticsearch.yml

找到监听接口和端口进行修改

删掉前面的注释符号#改成如下的样子:

保存,然后启动Elasticsearch服务

sudo systemctl start elasticsearch

查看服务状态和验证是否已经启动

sudo systemctl status elasticsearch
curl -X GET localhost:9200

看到这个,就说明Elasticsearch启动成功了。

你也可以在浏览器里面访问https://localhost:9200查看

0x5 安装和配置Logstash

首先确保系统里面有openssl,然后安装Logstash

openssl version -asudo apt install logstash -y

创建一个SSL证书用于保证RsyslogFilebeat传输数据给Logstash时的安全性。

Logstash的配置文件目录下创建一个ssl的目录,然后生成证书

sudo mkdir -p /etc/logstash/sslcd /etc/logstashsudo openssl req -subj '/CN=elkmaster/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt

为了方便后续配置,我们可以修改一下/etc/hosts文件。把主机的ip配置一个主机名

然后我们需要配置三个文件,分别是用于从filebeat接收数据的filebeat-input.conf,用于过滤系统日志的过滤器配置文件syslog-filter.conf,以及用于输出数据到elasticsearchoutput-elasticsearch.conf

logstash配置目录创建filebeat-input.conf文件

cd /etc/logstash/sudo gedit conf.d/filebeat-input.conf

添加如下内容:

input {  beats {    port => 5443    type => syslog    ssl => true    ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"    ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"  }}

然后创建过滤器配置文件syslog-filter.conf并采用grok过滤器,这个的作用就是让Logstash根据给出的规则提取数据。

sudo gedit conf.d/syslog-filter.conf

输入如下内容:

filter {  if [type] == "syslog" {    grok {      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }      add_field => [ "received_at", "%{@timestamp}" ]      add_field => [ "received_from", "%{host}" ]    }    date {      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]    }  }}

然后创建一个output-elasticsearch.conf配置文件用于将数据传输给elasticsearch

sudo gedit conf.d/output-elasticsearch.conf

内容如下:

output {  elasticsearch { hosts => ["localhost:9200"]    hosts => "localhost:9200"    manage_template => false    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"    document_type => "%{[@metadata][type]}"  }}

配置文件弄好之后,启动logstash服务看是否正常。

sudo systemctl start logstashsudo systemctl status logstash

没有报错,说明服务正常启动了。

0x6 安装和配置Kibana

安装Kibana也是通过apt即可完成

sudo apt install kibana

安装完成之后,我们设置一下kibana的配置文件

sudo gedit /etc/kibana/kibana.yml

主要是修改监听端口和地址,以及elasticsearch的地址

保存,然后启动kibana服务

然后你可以直接在浏览器中访问它

0x7 安装和配置Nginx

安装这个主要是给Kibana做反向代理的。

首先安装NginxApache2-utlis

sudo apt install nginx apache2-utils -y

安装完成之后,创建kibana虚拟主机配置文件

sudo gedit /etc/nginx/sites-available/kibana

内容如下:

server {    listen 80;    server_name localhost;    auth_basic "Restricted Access";    auth_basic_user_file /etc/nginx/.kibana-user;    location / {        proxy_pass https://localhost:5601;        proxy_http_version 1.1;        proxy_set_header Upgrade $http_upgrade;        proxy_set_header Connection 'upgrade';        proxy_set_header Host $host;        proxy_cache_bypass $http_upgrade;    }}

给配置文件创建一个连接

sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/

然后给访问Kibana Dashboard配置一个基础身份认证

sudo htpasswd -c /etc/nginx/.kibana-user elastic

然后测试Nginx配置文件并启动服务

sudo nginx -tsudo systemctl restart nginx
0x8 安装和配置Filebeat

下载filebeat然后安装

下载地址:https://www.elastic.co/cn/downloads/beats/filebeat

可以按照自己的需求进行下载

我们这里是安装在Ubuntu上,所以选择DEB版本下载。当然也可以直接用apt安装,前提是你在之前添加了Elastic的软件源。可以看官方指南进行添加软件源:https://www.elastic.co/guide/en/beats/filebeat/7.10/setup-repositories.html#_apt

sudo apt install filebeat -y

然后编辑filebeat的配置,配置文件的路径:

/etc/filebeat/filebeat.yml

首先把input部分改为true

然后修改Elasticsearch output部分

修改成如下配置:(根据你的实际情况进行设置)

修改Kibana配置部分:

修改完后保存。

然后初始化filebeat

sudo filebeat setup

复制之前生成的logstash-forwarder.crt证书到/etc/filebeat目录中

sudo cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/

然后启动filebeat服务

sudo systemctl start filebeat
0x9 配置 Linux 日志到 Elasticsearch

配置rsyslogLogstash,然后这些日志会自动传输到Elasticsearch

在配置日志到Logstash之前,我们首先需要配置LogstashElasticsearch之间的日志转发。

/etc/logstash/conf.d目录下创建一个配置文件来设置到Elasticsearch之间的日志转发。

cd /etc/logstash/conf.d/sudo gedit logstash.conf

配置文件的内容如下:

input {  udp {    host => "127.0.0.1"    port => 10514    codec => "json"    type => "rsyslog"  }}                                                                                          # The Filter pipeline stays empty here, no formatting is done.filter { }                       # Every single log will be forwarded to ElasticSearch. If you are using another port, you should specify it here.                              output {  if [type] == "rsyslog" {    elasticsearch {      hosts => [ "localhost:9200" ]    }  }  }

配置文件主要由三部分组成,input部分:定义日志从哪儿来,filter部分:日志过滤器,output部分:日志传输到什么地址。

然后我们重启一下logstash服务

sudo systemctl restart logstash

然后配置从rsyslogLogstash日志转发,rsyslog可以使用模板转换日志然后进行转发。

为了让 rsyslog转发日志,需要在/etc/rsylog.d目录中创建一个70-output.conf的配置文件。

cd /etc/rsyslog.d/sudo gedit 70-output.conf

添加如下内容:

*.*                         @127.0.0.1:10514;json-template

意思是所有日志发送到127.0.0.1:10514并使用json格式的模板进行转换

我们需要创建一个json格式的模板文件

sudo gedit 01-json-template.conf

内容如下:

template(name="json-template"  type="list") {    constant(value="{")      constant(value="\"@timestamp\":\"")     property(name="timereported" dateFormat="rfc3339")      constant(value="\",\"@version\":\"1")      constant(value="\",\"message\":\"")     property(name="msg" format="json")      constant(value="\",\"sysloghost\":\"")  property(name="hostname")      constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")      constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")      constant(value="\",\"programname\":\"") property(name="programname")      constant(value="\",\"procid\":\"")      property(name="procid")    constant(value="\"}\n")}

然后启动rsyslog服务

sudo systemctl start rsyslog

检查logstash监听端口是否正常:

ss -na | grep 10514

如果监听没成功,并且在日志中看到以下报错信息:

是因为配置文件里面存在语法错误,ELK软件对配置文件的语法要求比较严格,请仔细检查。

0x10 在Kibana中创建日志仪表板

在浏览器中打开Kibana界面

首先需要创建一个索引模式

然后找到Stack Management---Kibana中的Index Patterns

然后点击Create index pattern

输入logstash-*,然后点击Next step

然后时间过滤器我们选择@timestamp

然后点击Create index pattern

添加成功后是这样的:

点击回到KibanaDiscover中,在这里可以查询搜索你的数据

0x11 监控 SSH 事件

在过滤条件中,我们设置过滤条件为programename:sshd*

这样就可以看到sshd程序相关事件了。

0x12 更多参考资料

配置 SSL、TLS 以及 HTTPS 来确保 Elasticsearch、Kibana、Beats 和 Logstash 的安全 | Elastic Blog https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash

如何使用 Elastic Stack 监测 Nginx Web 服务器 | Elastic Blog https://www.elastic.co/cn/blog/how-to-monitor-nginx-web-servers-with-the-elastic-stack

(0)

相关推荐

  • CentOS 7安装部署ELK 6.2.4

    一.ELK介绍 ELK是三款开源软件的缩写,即:ElasticSearch + Logstash + Kibana.这三个工具组合形成了一套实用.易用的监控架构,可抓取系统日志.apache日志.ng ...

  • ELK学习001:Elastic Stack简介

    ELK简介: ELK Stack:ELK是Elasticsearch.Logstash.Kibana的缩写简称,这三者都是开源软件.ELK是5.0版本前的统称:这是一套统一的日志收集分析系统.它能够方 ...

  • ELK 处理 Spring Boot 日志,妙!

    来自:IBM 技术开发社区 链接:https://developer.ibm.com/zh/articles/build-elk-and-use-it-for-springboot-and-nginx ...

  • Windows应急响应和系统加固(10)——Nginx日志分析以及JBoss日志分析

    一.使用E.L.K安全分析Nginx日志 1.Nginx日志介绍: Nginx是高性能的.轻量级Web.反向代理和电子邮件代理服务器,由俄罗斯访问量第二的Rambler.ru站点开发: 简称" ...

  • 编程语言采集 Nginx 日志的几种方式,你知道几种?

    来源:cnblogs.com/xiejava/p/12452434.html 由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器.而nginx的访 ...

  • 微服务海量日志监控平台

    前面几章蜻蜓点水的介绍了elasticsearch.apm相关的内容.本片主要介绍怎么使用ELK Stack帮助我们打造一个支撑起日产TB级的日志监控系统 背景 在企业级的微服务环境中,跑着成百上千个 ...

  • 搭建 ELK 实时日志平台(详细本地搭建)

    搭建 ELK 实时日志平台(详细本地搭建)

  • 如何在12个小时,搞定日志监控?

    日志监控,是每个公司必须解决的一个问题.创业型公司,如何用半天的时间,搞定一个可扩展,通用的日志监控框架,是今天要聊的话题.   什么是日志监控? 关于日志,不同公司,情况不同: (1)A类公司:没有 ...

  • 基于矿山安全生产实时监控与调度指挥系统的设计

    "2016第三届轨道交通供电系统技术大会"演讲报告图文版已在"电气技术"微信(微信号:dianqijishu)上陆续发布,请感兴趣的读者扫描下方二维码,进行关注 ...

  • TriEye将全球首款基于CMOS的短波红外传感器引入驾驶员监控系统

    据麦姆斯咨询报道,近日,全球首个面向大众消费市场的短波红外(SWIR)传感器开发商TriEye宣布与大陆集团旗下的大陆工程服务(CES)公司展开合作,将短波红外(SWIR)成像应用于驾驶员监控系统(D ...

  • 基于browsermob-proxy的自动化性能监控

    在做自动化的时候,当遇到某些性能问题导致的超时情况就会出现对象访问超时的问题,遇到这种问题想回溯跟踪问题就比较困难了,如果能有个Fiddler这样的代理服务器来监控多好啊! browsermob-pr ...

  • Docker构建日志系统-ELK

    前言 日志在系统中扮演着监护人的身份,它是保障高可靠服务的基础,记录了系统的一举一动.运维层面.业务层面.安全层面都有日志的身影,系统监控.异常处理.安全.审计等都离不开日志的协助. 简而言之,日志是 ...

  • 基于.NetCore3.1系列 —— 日志记录之日志配置揭秘

    一.前言 在项目的开发维护阶段,有时候我们关注的问题不仅仅在于功能的实现,甚至需要关注系统发布上线后遇到的问题能否及时的查找并解决.所以我们需要有一个好的解决方案来及时的定位错误的根源并做出正确及时的 ...