首页 > 其他分享 >威胁狩猎:基于ELK的日志监控

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

时间:2023-06-06 18:05:09浏览次数:43  
标签:ELK 配置文件 sudo etc conf 狩猎 日志 logstash


 

威胁狩猎:基于ELK的日志监控_大数据


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

0x0、概述!

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



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


 

0x3 安装 Java 和所有依赖项

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

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

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


 

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

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

威胁狩猎:基于ELK的日志监控_运维_04


 

添加软件源

威胁狩猎:基于ELK的日志监控_运维_05


 

0x4 安装和配置Elasticsearch

更新软件源

sudo apt update

威胁狩猎:基于ELK的日志监控_大数据_06


 

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

sudo apt-get install elasticsearch

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


 

安装完后,开始配置Elasticsearch

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

打开配置文件

sudo gedit  /etc/elasticsearch/elasticsearch.yml

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

威胁狩猎:基于ELK的日志监控_运维_08


 

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

威胁狩猎:基于ELK的日志监控_网络_09


 

保存,然后启动Elasticsearch服务

sudo systemctl start elasticsearch

威胁狩猎:基于ELK的日志监控_网络_10


 

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

sudo systemctl status elasticsearch

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


 

curl -X GET localhost:9200

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


 

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

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

威胁狩猎:基于ELK的日志监控_大数据_13


 

0x5 安装和配置Logstash

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

openssl version -a
sudo apt install logstash -y

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


 

威胁狩猎:基于ELK的日志监控_网络_15


 

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

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

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

威胁狩猎:基于ELK的日志监控_网络_16


 

威胁狩猎:基于ELK的日志监控_网络_17


 

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


 

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

威胁狩猎:基于ELK的日志监控_网络_19


 

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

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

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

威胁狩猎:基于ELK的日志监控_网络_20


 

添加如下内容:

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

威胁狩猎:基于ELK的日志监控_运维_21


 

然后创建过滤器配置文件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 logstash
sudo systemctl status logstash

威胁狩猎:基于ELK的日志监控_大数据_22


 

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

0x6 安装和配置Kibana

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

sudo apt install kibana

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

sudo gedit /etc/kibana/kibana.yml

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

威胁狩猎:基于ELK的日志监控_网络_23


 

保存,然后启动kibana服务

威胁狩猎:基于ELK的日志监控_大数据_24


 

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

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


 

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

威胁狩猎:基于ELK的日志监控_网络_26

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

sudo nginx -t
sudo systemctl restart nginx

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


 

0x8 安装和配置Filebeat

下载filebeat然后安装

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

威胁狩猎:基于ELK的日志监控_网络_28


 

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

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

sudo apt install filebeat -y

威胁狩猎:基于ELK的日志监控_大数据_29


 

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

/etc/filebeat/filebeat.yml

首先把input部分改为true

威胁狩猎:基于ELK的日志监控_网络_28


 

然后修改Elasticsearch output部分

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


 

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

威胁狩猎:基于ELK的日志监控_网络_32


 

修改Kibana配置部分:

威胁狩猎:基于ELK的日志监控_运维_33


 

修改完后保存。

然后初始化filebeat

sudo filebeat setup

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


 

复制之前生成的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的日志监控_linux_35


 

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

威胁狩猎:基于ELK的日志监控_网络_36


 

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

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

在浏览器中打开Kibana界面

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

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

威胁狩猎:基于ELK的日志监控_大数据_37


image.png

然后点击Create index pattern

威胁狩猎:基于ELK的日志监控_大数据_38


 

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

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


 

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

威胁狩猎:基于ELK的日志监控_网络_40


 

然后点击Create index pattern

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


 

添加成功后是这样的:

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


 

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

威胁狩猎:基于ELK的日志监控_大数据_43


   

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


 

0x11 监控 SSH 事件

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

威胁狩猎:基于ELK的日志监控_网络_45


 

这样就可以看到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-stac


标签:ELK,配置文件,sudo,etc,conf,狩猎,日志,logstash
From: https://blog.51cto.com/u_14601424/6426623

相关文章

  • (转)常见日志收集方案及相关组件
    原文:https://www.cnblogs.com/hujinzhong/p/15005523.html一、常见日志收集方案1.1、EFK​在Kubernetes集群上运行多个服务和应用程序时,日志收集系统可以帮助你快速分类和分析由Pod生成的大量日志数据。Kubernetes中比较流行的日志收集解决方案是Elasticsearch、Fluentd和Kiba......
  • 利用Spring AOP与JAVA注解为系统增加日志功能
    SpringAOP一直是Spring的一个比较有特色的功能,利用它可以在现有的代码的任何地方,嵌入我们所想的逻辑功能,并且不需要改变我们现有的代码结构。   鉴于此,现在的系统已经完成了所有的功能的开发,我们需要把系统的操作日志记录起来,以方便查看某人某时执行了哪一些操作。SpringAOP可......
  • ELK部署中_
    ELK_8.2.0安装及部署手册目录1安装环境31.1系统环境3安装环境系统环境操作系统:CentOS7软件环境基础软件ELK所需基础服务及版本信息,如下表所示:序号软件名称软件版本备注1jdkjdk-11.0.18 2elasticsearch8.2.0 3file......
  • 手把手教你AspNetCore WebApi:Serilog(日志)
    前言小明目前已经把“待办事项”功能实现了,API文档也搞定了,但是马老板说过,绝对不能让没有任何监控的项目上线的。Serilog是什么?在.NET使用日志框架第一时间会想到NLog或是Log4Net,Serilog是这几年快速崛起的Log框架之一,Serilog是以Structuredlogging为基础进行设计,透过loggingAP......
  • Spring Web 日志记录切面
    SpringWeb日志记录切面应用:在我们进行rest接口编写时需要对该接口的耗时、参数、请求路径、返回值进行对应的记录日志注解把日志封装成注解的形式可以更好的供使用者使用,同时也利于解耦合代码@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPo......
  • 异步日志登录
    异步日志登录项目亮点:放在公司的通用组件库中:日志记录组件库系统的用户操作日志记录【解耦合】自定义注解+AOP+异步多线程/MQ+数据模型设计+设计模式【单例模式+工厂模式】效果:开发者只需要在业务方法上,添加一个注解@Log就可以实现执行这个方......
  • asp.net core NLog将日志写到文件
    1、安装Nlog包Install-PackageNLog.Extensions.Logging-Pre2、在项目添加nlog.config文件 2.1、nlog.config <?xmlversion="1.0"encoding="utf-8"?><nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http:......
  • 使用定时任务+脚本方式对nginx进行日志切分
    使用定时任务+脚本方式对nginx进行日志切分nginx路径:/home/nf/nginxnginx日志路径:/home/nf/nginx/logs切分目标文件:access.logerror.log创建脚本: 1vim/home/nf/cut_nginx_log.sh 1#!/bin/bash2#nginxlogpath3LOGS_PATH=/home/nf/nginx/logs4YESTERDAY=$(d......
  • 一个基于C++11的异步安全日志库
    0源码获取gitee1概述这是一个基于c++11的异步日志库目前仅支持windows已通过VS2019+windows11测试。支持自动清理距今指定天数的日志支持设定日志文件输出路径2待实现支持linux3一个范例使用范例 std::unique_ptr<oct_tk::AsyncLogging>async_log=s......
  • 从日志记一次Spring事务完整流程
    spring事务一次完整流程,创建》确认获取连接》完成》提交》释放链接DataSourceTransactionManager//Step1.进入业务方法前,依据事物切面创建事务对象2019-07-0622:34:24,819[main]DEBUGo.s.j.d.DataSourceTransactionManager-Creatingnewtransactionwithname[com......