1. 基于 filebeat 的 EFK 架构概述

1.1 FileBeat 概述

Filebeat 是本地文件的日志数据采集器,可监控日志目录戒特定日志文件(tail file),并将它们转发给 Elasticsearch 戒 Logstatsh 迚行索引、kafka 等。

ELK 和 EFK 区别:

  • ELK 是 elasticsearch、logstatsh、Kibana 三种软件集成的日志搜集展示的框架。

  • EFK 是 Elasticsearch 、FileBeat、Kibana 三种软件集成的日志搜集展示的框架。

logstatsh 和 FileBeat 区别:

相同点:logstatsh 和 FileBeat 都可以负责收集日志

Filebeat 相对于 Logstash 优点好处:

  1. 侵入低,无需修改程序目前任何代码和配置

  2. Filebeat 相对于 Logstash 来说性能高,Logstash 对于 IO 占用徆大

1.2 基于 filebeat 的 ELK 实验拓扑图

本章使用设备清单及配置

主机名

IP地址

备注

node1

ens33:192.168.120.191 ens33:0 :219.143.129.191 武汉公网 IP

elasticsearch kibana

node2

ens33:192.168.120.192 ens33:0 :219.143.129.192 武汉公网 IP

elasticsearch filebeast 收集日志 nginx

启动 node1,访问:http://192.168.120.191:9200/_cluster/health?pretty 发现是 green 状态。

然后再开始下面的实验。

总结: 要先把 elasticsearch 主启动成功后,再启动往下的结点。

2. 使用 filebeat 收集系统日志

在 node2 上安装 filebeat

filebeat 是 beats 体系中用于收集日志信息的工具

上传 filebeat 到 linux 系统上

[root@node2 ~]# rpm -ivh filebeat-7.8.1-x86_64.rpm

或在线下载安装:

[root@node2 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-x86_64.rpm
[root@node2 ~]# rpm -ivh filebeat-7.8.1-x86_64.rpm

安装完成之后编辑配置文件:

[root@node2 ~]# vim /etc/filebeat/filebeat.yml    # 增加戒者更改为以下内容
改:149 hosts: ["localhost:9200"]
为: hosts: ["192.168.120.191:9200"]    # 指定让日志输出给 es 服务器,这里写 ES 的 ip 地址

启动 filebeat:

[root@node2 ~]# systemctl start filebeat && systemctl enable filebeat && systemctl status filebeat
​
[root@node2 ~]# ps axu | grep filebeat
root      2059  5.6  1.0 570096 43048 ?        Ssl  10:15   0:00 /usr/share/filebeat/bin/filebeat -environment systemd -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat
root      2095  0.0  0.0 112824   976 pts/0    S+   10:15   0:00 grep --color=auto filebeat

到 es 服务器上查看索引: http://192.168.120.191:9200/_cat/indices?v

3. 实战-收集系统和 sshd 服务器日志并配置仪表盘展示数据

3.1 配置 filebeat 和 kibana 通信并将导入仪表盘数据导入 kibana

# 查看 Filebeat 收集服务日志的常用模块
[root@node2 ~]# filebeat modules list 


#配置 filebeat 和 kibana 通信
[root@node2 ~]# vim /etc/filebeat/filebeat.yml
改:
72 reload.enabled: false
为:
73 reload.enabled: true
​
#注:reload.enabled: 设置 true 为时,启用动态加载配置文件。即当日志的 path 定义的配置文件发生更改后,实时重新加载配置文件,不需要重启 filebeat 服务。
[root@node1 ~]# systemctl start kibana
#指定 Kibana 地址,用于安装 filebeat 仪表盘。在第 117 行下添加 kibana 地址即可。host:前面的空格丌能省略。
[root@node2 ~]# vim /etc/filebeat/filebeat.yml
116 setup.kibana:
117   host: "192.168.120.191:5601"

重启 filebeat

[root@node2 ~]# systemctl restart filebeat

导入仪表盘,导入需要等待片刻

导入仪表盘之前,打开 http://192.168.120.191:5601/,查看 Dashborad,是没有现成的仪表盘:

[root@ode2 ~]# filebeat -c /etc/filebeat/filebeat.yml setup

3.2 配置 filebeat 采集 system 日志

1、启动 system 日志收集模块

查看一下模块配置,文件,默认都.disabled 结尾,代表不采集

[root@node2 ~]# cd /etc/filebeat/modules.d/
[root@node2 /etc/filebeat/modules.d]# ls
activemq.yml.disabled       logstash.yml.disabled
apache.yml.disabled         misp.yml.disabled
auditd.yml.disabled         mongodb.yml.disabled
aws.yml.disabled            mssql.yml.disabled
​
[root@node2 ~]#  ls /etc/filebeat/modules.d/system*
/etc/filebeat/modules.d/system.yml.disabled   #结尾是.disabled,表示关闭
​
[root@node2 ~]# filebeat modules enable system   #启动 system 模块
Enabled system
​
[root@node2 ~]# ls /etc/filebeat/modules.d/system*
/etc/filebeat/modules.d/system.yml

2、指定 filebeat 的 system 模块采集系统和 sshd 服务的日志路径

[root@node2 ~]# vim /etc/filebeat/modules.d/system.yml
7 enabled: true
8 var.paths: ["/var/log/messages"]
注:添加 messages 日志路径
​
13 # Authorization logs
14 auth:
15 enabled: true
16 var.paths: ["/var/log/secure"]
注:添加 sshd 登录认证日志路径
​
[root@node2 ~]# systemctl restart filebeat

到 es 服务器上查看索引:

http://192.168.120.191:9200/_cat/indices?v

可以看到新增了一个以 filebeat-7.8.1 开头的索引,这就代表 filesbeat 和 es 能够正常通信了。

3.3 配置 kibana 索引

在浏览器里进行访问,如:http://192.168.120.191:5601/

3.4 安装 medusa 暴力破解 sshd 服务产生 secure 日志

1、配置一个北京的 IP 地址

我们需要给 node1 和 node2 配置一个北京的 IP 地址,这样后期在暴破时,可以展示出攻击者的地理位置。

[root@node1 ~]# ifconfig ens32:0 219.143.129.63
[root@node2 ~]# ifconfig ens32:0 219.143.129.64

2、手动编译和安装 medusa

#安装依赖包
[root@node1 ~]# yum -y install openssl-devel libssh2-devel autoconf automake libtool
[root@node1 ~]# tar zxf medusa-2.2.tar.gz
[root@node1 ~]# cd medusa-2.2/
[root@node1 medusa-2.2]# ./configure && make -j 4 && make install 

3、 Medusa 参数说明

-H [FILE] 包含目标主机名称戒者 IP 地址文件
-U [FILE] 包含测试的用户名文件
-P [FILE] 包含测试的密码文件
-O [FILE] 日志信息文件,保存暴力破解的结果
-M [TEXT] 模块执行名称
-t [NUM] 设定线程数量
-n [NUM] : Use for non-default TCP port number 指定非 22 端口号,默认 22

3、暴力破解 ssh 服务

例 1:通过文件来指定 host 和 user,host.txt 为目标主机名称戒者 IP 地址,user.txt 指定需要暴力破解的用户名, 使用 wordlist.txt 字典进行暴破。

上传 wordlist.txt 字典到 Linux 系统上

#取 20 个密码,放到 b.txt。如果直接使用这个字典,用时太长了
[root@node1 ~]# mv 400万条-弱口令字典-wordlist.txt wordlist.txt
[root@node1 ~]# head -n 20 wordlist.txt > b.txt 
​
#写入正确的密码
[root@node1 ~]# echo 1 >> b.txt 
​
#指定暴破的 IP,一行一个
[root@node1 ~]# echo 219.143.129.64 > /root/host.txt 
​
#插入以下多个用户
[root@node1 ~]# vim /root/users.txt 
admin
administrator
root
​
[root@node1 ~]# medusa -M ssh -H ./host.txt -U ./users.txt -t 8 -P b.txt -O hack.log

如图所示,破解成功后会显示 success 字样,并将暴解的结果放到 hack.log 中

4、使用密钥登录系统,生成一些成功登录的日志

[root@node1 ~]# ssh-keygen
[root@node1 ~]# ssh-copy-id 219.143.129.64
[root@node1 ~]# ssh 219.143.129.64 #来回多登录几次
[root@node1 ~]# exit

3.5 通过 kibana 仦表盘查分析 SSH 暴力破解日志

通过这里,可以看到暴破解 sshd 服务的 IP 地址的位置信息分布情况。我们 IP 是北京的。

4. 实战-收集 Nginx 日志并配置 Kibana 仪表盘展示数据

4.1 使用 filebeat 收集 nginx 日志

#安装 epel 源
[root@node2 ~]# yum install -y epel-release 
#安装 nginx
[root@node2 ~]# yum install -y nginx 
#启动 nginx
[root@node2 ~]# systemctl enable --now nginx

启动 filebeat 中的 nginx 模块

[root@node2 ~]# filebeat modules enable nginx
Enabled nginx

指定 filebeat 的 nginx 模块采集 nginx 服务的日志路径

[root@node2 ~]# vim /etc/filebeat/modules.d/nginx.yml
6 access:
7   enabled: true
8   var.paths: ["/var/log/nginx/access.log"]
​
#添加 access 日志路径。
14 error:
15   enabled: true
#添加 error 日志路径
16   var.paths: ["/var/log/nginx/error.log"]
​
#效果如下,注意 var.paths 要和 enabled 前面的空格对齐:

[root@node2 ~]# systemctl restart filebeat

互动: 修改完/etc/filebeat/modules.d/nginx.yml 后,需要重启 filebeat 服务吗?答: 不需要。因为前面开启了这个参数。如下:


4.2 产生一些 nginx 正常访问和错误日志

[root@node2 ~]# cp /etc/passwd /usr/share/nginx/html/index.html
cp:是否覆盖"/usr/share/nginx/html/index.html"? y

通过 ab 命令迚行快速产生一些日志:

[root@node2 ~]# yum install -y httpd-tools
​
#生成正常访问日志:
[root@node2 ~]# ab -n 10000 -c 100 http://219.143.129.64/index.html 
​
#访问一个不存在的页面,生成错误日志:
[root@node2 ~]# ab -n 10000 -c 100 http://219.143.129.64/aaa.html 
​
#访问一个图片页面,生成日志:
[root@node2 ~]# ab -n 10000 -c 100 http://219.143.129.64/nginx-logo.png

4.3 Kibana 通过仦表盘展示 nginx 日志

迚入仪表盘:http://192.168.120.191:5601/