威胁狩猎:基于ELK的日志监控
Posted 合天智汇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了威胁狩猎:基于ELK的日志监控相关的知识,希望对你有一定的参考价值。
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/08d3b35bf9eb4e649ebd88502bdf0da2.jpg)
实验推荐-本文涉及实操知识点练习
狙剑软件使用实验
https://www.hetianlab.com/expc.do?ec=5e8b5d22-88eb-4061-a07f-80bd791f0b8d&pk_campaign=weixin-wemedia
通过本实验的学习,你能够了解主机安全软件监控原理,学会如何利用主机安全软件狙剑监控可疑进程,学会如何利用狙剑软件对本机进行注册表和文件的管理。
0x0、概述!
ELK Stack
即以前的Elastic Stack
,Elk Stack
是Elastic
公司专门为集中化日志管理设计的免费开源软件组合。它允许搜索、分析和可视化来自不同来源的日志。
如在ubuntu
上安装配置ELK Stack
,需要如下先决条件:
-
Ubuntu 20.04 -
最好使用Root 权限进行配置
0x1 内容目录
-
ELK Stack 组成部分
-
安装
Java
和所有依赖项 -
安装和配置
Elasticsearch
-
安装和配置
Logstash
-
安装和配置
Kibana
-
安装和配置
nginx
-
安装和配置
Filebeat
-
配置
Linux
日志到Elasticsearch
-
在
Kibana中
创建日志仪表板 -
监控
SSH
事件
0x2 ELK Stack 组成
1、Elasticsearch
:Elasticsearch
是一个基于Apache Lucene(TM)
的开源搜索引擎,使用RESTful API
,可以存储、检索数据。
2、Logstash
:Logstash
是一个开源的数据收集引擎,可以采集不同数据源的数据发送给Elasticsearch
3、Kibana
:用于分析和可视化日志的 Web
可视化平台
4、Filebeat
:轻量级的日志收集和转发器,可以把数据收集后转发到Logstash
或Elasticsearch
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/a1b2e8e2d4ee4a6aaa28f9468d713514.jpg)
0x3 安装 Java 和所有依赖项
Elasticsearch
是Java
编写的程序,所以需要安装JDK
,可以使用如下命令安装OpenJDK
和其他一些所需的软件包。
sudo apt install -y openjdk-14-jdk wget apt-transport-https curl
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/8745aeedea34484a885146f25750ca98.jpg)
然后导入Elasticsearch
的公钥,添加apt
软件源
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/69b61c229fe846c3b9a97e432554db08.jpg)
添加软件源
0x4 安装和配置Elasticsearch
更新软件源
sudo apt update
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/579853f71fdd400bab664d4aef283f9b.jpg)
然后安装(国内安装比较慢,请耐心等待)
sudo apt-get install elasticsearch
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/dba504224ea740678fd5f6840b10180c.jpg)
安装完后,开始配置Elasticsearch
Elasticsearh
默认监听9200
端口。为了安全,需要设置一下限制外网访问。使外部网络无法通过REST API
访问数据和elastic
集群。Elasticsearch
的配置文件是elasticsearch.yml
。修改它就行。
打开配置文件
sudo gedit /etc/elasticsearch/elasticsearch.yml
找到监听接口和端口进行修改
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/fd078018bda1411d9ff8fd67e9238913.jpg)
删掉前面的注释符号#
改成如下的样子:
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/90e25408cfb24254a4000f46abea7f18.jpg)
保存,然后启动Elasticsearch
服务
sudo systemctl start elasticsearch
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/aa557de52f8d48e5baecc81c6e5af5c2.jpg)
查看服务状态和验证是否已经启动
sudo systemctl status elasticsearch
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/def89d469f234b32bf5c6137a72c00f6.jpg)
curl -X GET localhost:9200
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/9aecd47f9c5a413c93eeab9e6bf22b25.jpg)
看到这个,就说明Elasticsearch
启动成功了。
你也可以在浏览器里面访问https://localhost:9200
查看
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/698e67254d0349c68ef3a4ae59b9bc01.jpg)
0x5 安装和配置Logstash
首先确保系统里面有openssl
,然后安装Logstash
openssl version -a
sudo apt install logstash -y
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/8baa1a5623774d9988c001f96a6092bb.jpg)
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/6523040ca5a849ccbfefb7faba80dbc7.jpg)
创建一个SSL
证书用于保证Rsyslog
和Filebeat
传输数据给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的日志监控](https://image.cha138.com/20210502/f1c261c7f57f441f88b0c1b640a360b4.jpg)
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/b05e167b12314e9f8ff27df29ff45c15.jpg)
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/30f287ef869c4cf680808b9ea97408ca.jpg)
为了方便后续配置,我们可以修改一下/etc/hosts
文件。把主机的ip
配置一个主机名
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/f0c13dc1600e44c19e95549239410e12.jpg)
然后我们需要配置三个文件,分别是用于从filebeat
接收数据的filebeat-input.conf
,用于过滤系统日志的过滤器配置文件syslog-filter.conf
,以及用于输出数据到elasticsearch
的output-elasticsearch.conf
。
在logstash
配置目录创建filebeat-input.conf
文件
cd /etc/logstash/
sudo gedit conf.d/filebeat-input.conf
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/bac6ef3151104a4d895f37e6118343fa.jpg)
添加如下内容:
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的日志监控](https://image.cha138.com/20210502/9a7475b75b024bfdb41bed782a5e1a5d.jpg)
然后创建过滤器配置文件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的日志监控](https://image.cha138.com/20210502/82598ff32da0440e88821a1c2e7b67d6.jpg)
没有报错,说明服务正常启动了。
0x6 安装和配置Kibana
安装Kibana
也是通过apt
即可完成
sudo apt install kibana
安装完成之后,我们设置一下kibana
的配置文件
sudo gedit /etc/kibana/kibana.yml
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/716b3d2540bf48e89bbe62ea1d568148.jpg)
保存,然后启动kibana
服务
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/a1efd8ccf0c54529b6e5a978761e764f.jpg)
然后你可以直接在浏览器中访问它
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/16dc804fe6da4aa88d46f781f35848eb.jpg)
0x7 安装和配置Nginx
安装这个主要是给Kibana
做反向代理的。
首先安装Nginx
和Apache2-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的日志监控](https://image.cha138.com/20210502/873bb144a73a491e8074c387c5f8eae8.jpg)
然后测试Nginx
配置文件并启动服务
sudo nginx -t
sudo systemctl restart nginx
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/5b1edb973a8d4954b1c327e27ff2fc5d.jpg)
0x8 安装和配置Filebeat
下载filebeat
然后安装
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/651e010668bd437c9edf9774d845dc20.jpg)
可以按照自己的需求进行下载
我们这里是安装在Ubuntu
上,所以选择DEB
版本下载。当然也可以直接用apt
安装,前提是你在之前添加了Elastic
的软件源。可以看官方指南进行添加软件源:https://www.elastic.co/guide/en/beats/filebeat/7.10/setup-repositories.html#_apt
sudo apt install filebeat -y
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/5bef55c9dec34a5baeaf1670f06f8750.jpg)
然后编辑filebeat
的配置,配置文件的路径:
/etc/filebeat/filebeat.yml
首先把input
部分改为true
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/651e010668bd437c9edf9774d845dc20.jpg)
然后修改Elasticsearch output
部分
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/304234fc709343b08a70ceda0c42f30a.jpg)
修改成如下配置:(根据你的实际情况进行设置)
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/fe721a6dbd134d39a8a4a3ed6c2c80ce.jpg)
修改Kibana
配置部分:
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/9d79ab9064034ffc96189ab37695ff39.jpg)
修改完后保存。
然后初始化filebeat
sudo filebeat setup
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/931d1d6571ad44ddbbe2a746fa2e69b0.jpg)
复制之前生成的logstash-forwarder.crt
证书到/etc/filebeat
目录中
sudo cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/
然后启动filebeat
服务
sudo systemctl start filebeat
0x9 配置 Linux 日志到 Elasticsearch
配置rsyslog
到Logstash
,然后这些日志会自动传输到Elasticsearch
在配置日志到Logstash
之前,我们首先需要配置Logstash
到Elasticsearch
之间的日志转发。
在/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" ]
}
}
}
然后我们重启一下logstash
服务
sudo systemctl restart logstash
然后配置从rsyslog
到Logstash
日志转发,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的日志监控](https://image.cha138.com/20210502/ad3db311f9a3404db28ff075876bcd36.jpg)
如果监听没成功,并且在日志中看到以下报错信息:
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/32780e79e1114858853694f6158c7c9b.jpg)
是因为配置文件里面存在语法错误,ELK
软件对配置文件的语法要求比较严格,请仔细检查。
0x10 在Kibana中创建日志仪表板
在浏览器中打开Kibana
界面
首先需要创建一个索引模式
然后找到Stack Management
---Kibana
中的Index Patterns
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/faebef80324d494d9f21bb150fbd556c.jpg)
然后点击Create index pattern
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/29e02373789548ad9c900df9b2f9b5ac.jpg)
输入logstash-*
,然后点击Next step
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/1ce060f3e0e7492c8ae44812e2c2c679.jpg)
然后时间过滤器我们选择@timestamp
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/92ed5d52f00040a8ac9b32ed1bd41d3a.jpg)
然后点击Create index pattern
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/7b833752b9274680be904466d496bd0b.jpg)
添加成功后是这样的:
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/e30ebd8d4cc74e05b275b424644e4167.jpg)
点击回到Kibana
的Discover
中,在这里可以查询搜索你的数据
![威胁狩猎:基于ELK的日志监控](https://image.cha138.com/20210502/49179117147b496193a1839554efb917.jpg)
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
1/25
欢迎投稿至邮箱:EDU@antvsion.com
有才能的你快来投稿吧!
以上是关于威胁狩猎:基于ELK的日志监控的主要内容,如果未能解决你的问题,请参考以下文章
ELK 学习总结—— 从零搭建一个基于 ELK 的日志指标收集与监控系统
基于ELK 7.50搭建elastalert 监控报警和权限控制