elk笔记三--利用elk+filebeat搭建SIEM系统

1 整体架构部署

SIEM全称为security information and event management,即安全信息和事件管理,通俗使用的说,安全信息指的是服务运行中产生的日志信息,事件管理即通过对安全信息进行各种分析方法的总称,如入侵检测等。目前我司一个项目中客户要求SIEM系统,最常见的采用elk+filebeat搭建SIEM系统,用来分析服务器产生的日志:其实初步只做到了安全信息管理,后面如果深入我会继续更新。下面先看下部署的整体架构:filebeat部署在哥哥需要收集日志的机器上,然后在云上部署elk系统,然后filebeat将日志传送到logstash中,然后logstash存到es中,进一步通过kibana进行数据化展示。

1614853265381

其中涉及的部署主机如下:

部署用途主机域名环境
日志产生集群:部署filebeat7.810.65.18.105等archery-sec0001.xxx.xxcentos7
SIEM系统:部署elk7.810.65.18.112archery-sec0002.xxx.xxcentos7,java8

2 elk安装

在10.65.18.112主机上部署elk。其中安装elk教程参考前面一篇文章即可写的较详细,这里直接列出关键命令。

2.1 elasticsearch9200

注意安装ES时候,需要java8的环境。

安装目录: 一般是装在/usr/share/elasticsearch/下

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

(0)安装1.8版本java

执行下面命令进行安装1.8jdk。这里有个地方要注意,要选择 要带有-devel的安装,因为这个安装的是jdk,而那个不带-devel的安装完了其实是jre。

yum install -y java-1.8.0-openjdk-devel.x86_64
java -version

(1)下载安装es

sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-x86_64.rpm
rpm -ivh elasticsearch-7.8.0-x86_64.rpm

(2) 配置文件

vim /etc/elasticsearch/elasticsearch.yml#修改默认配置
egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml
#设置内存不使用交换分区
bootstrap.memory_lock: false
#配置了bootstrap.memory_lock为true时反而会引发9200不会被监听,原因不明
#设置允许所有ip可以连接该elasticsearch
network.host: 0.0.0.0
#开启监听的端口为9200
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
##防止bootstrap报错
node.name: node-1
bootstrap.system_call_filter: false 
cluster.initial_master_nodes: ["node-1"] 

(3)启动es

sudo systemctl enable elasticsearch #设置开机启动
sudo systemctl start elasticsearch #启动
sudo systemctl status elasticsearch #启查看运行状态

(4)测试是否启动成功

curl -X GET http://localhost:9200 #测试服务是否开启 可以用IP或者域名
curl -X GET http://archery-sec0002.eniot.io:9200/
curl -X GET http://10.65.18.112:9200/

1613724861443

2.2 logstash安装5044

(1)下载安装

sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-7.8.0.rpm
rpm -ivh logstash-7.8.0.rpm

(2)配置文件
这里注意将output下的hosts改为刚才ES的IP地址即可。

cd /etc/logstash#进入logstash目录 
vi /etc/logstash/conf.d/logstash.conf#创建配置文件,日志内容输出到elasticsearch中
input {
    stdin {}
    beats {
        port => 5044
    }
}
output {
    elasticsearch {
        hosts => ["10.65.18.112:9200"]  #es主机
        index => "filebeats-%{+YYYY.MM.dd}"
    }
    stdout {
        codec => rubydebug
    }
}

(3)启动

nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf & #指定logstash.conf配置文件,以后台的方式运用
ps -ef|grep logstash #查看logstash服务
kill -9 pid

这里注意:如果直接运行systemctl start logstash命令启动logstash,不会加载logstash.conf配置文件。

2.3 kibana安装5601

(1)下载安装

sudo wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-x86_64.rpm
rpm -ivh kibana-7.8.0-x86_64.rpm

(2)配置文件
注意将配置文件中的kibana.yml设置在为ES地址。

vi /etc/kibana/kibana.yml 
egrep -v "^#|^$" /etc/kibana/kibana.yml

#kibana页面映射在5601端口 
server.port: 5601 
#允许所有ip访问5601端口 
server.host: "0.0.0.0" 
#elasticsearch所在的ip及监听的地址 
elasticsearch.hosts: ["http://10.65.18.112:9200"]

(3)启动

sudo systemctl enable kibana #设置开机启动
sudo systemctl start kibana #启动
sudo systemctl status kibana #启查看运行状态

(4)浏览器查看

浏览器输入IP:5601或者域名:5601即可查看kibana,例如http://archery-sec0002.eniot.io:5601/

3 部署filebeat

在10.65.18.105主机上部署filebeat,具体如下:

(1)下载安装

sudo wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.0-x86_64.rpm
rpm -ivh filebeat-7.8.0-x86_64.rpm

(2)配置filebeat,将日志输出到logstash

vi /etc/filebeat/filebeat.yml 
egrep -v "^#|^$" /etc/filebeat/filebeat.yml

#=========================== Filebeat prospectors =============================
filebeat.inputs:
- type: log
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/*.log#这里配置指定目录的日志
    #- c:\programdata\elasticsearch\logs\*
#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  #hosts: ["localhost:5044"]
  hosts: ["archery-sec0002.eniot.io:5044"]#这里配置logstash地址,如果是内网最好用域名访问

(3) 启动filebeat

运行如下命令启动filebeat

sudo systemctl enable filebeat#设置开机启动
sudo systemctl start filebeat#启动
sudo systemctl status filebeat#启查看运行状态

(4) 查看日志

如果filebeat可以用systemctl启动成功,则执行下面命令可以看到file beat运行日志,

systemctl status filebeat -l

如果启动不成功,有以下两种方法:

1、查看Linux的rsyslog日志,也就是/var/log/messages这个文件,这个文件日志量比较大,最好使用less命令查看此文件,然后按下大写字母G可翻阅到文件的最后的内容,最后查看是否有关于filebeat的报错语句。

2、直接使用filebeat的启动方法,而不使用systemctl start filebeat来启动。比如:

/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat

我这次就是直接使用这个命令,给我报错是127行有问题,然后

 cat -n  /etc/filebeat/filebeat.yml 

我就着重修改了一下,最后启动成功了。

4 启动

首先开启elk,然后在部署filebeat的主机上(10.65.18.105)输入如下命令:

echo "删除用户" >> /var/log/admin.log 

浏览器输入:ip/域名:5601,可以在Stack Management–>Index Management下看到该index,filebeat-20210304,即证明filebeat将日志传送到elk上成功了。

1614854689893

还可以去Dev Tools搜索相关数据

1614852084050

1614852141941

5 配置多目录收集

在实际的应用中,filebeat不只需要收集一个目录的日志,这个时候就需要用配置filebeat的多目录收集,本文参考使用Filebeat 6 收集多个目录的日志并发送到lostash 配置两个主要目录收集日志,一个是收集系统日志的/var/log/*.log,一个是收集应用产生的日志/root/FEP/,主要配置如下:并且用Tags进行标记区分。

vi /etc/filebeat/filebeat.yml
 filebeat.prospectors:
- type: log
  # Change to true to enable this prospector configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/*.log
  tags: ["systemlog"]
- type: log
  enabled: true
  paths:
    - /home/envuser/energy-os/*/logs/*.log
  tags: ["applicationlog"]

生产的日志可以用tags字段进行区分搜索(建立index-pattern->discover就可以看到),如下图所示:

1615880675461

5 ES设置登录

ES默认是没有加认证的,因此外界可以直接访问地址获取数据库信息,造成隐私泄露,这里我们采用X-pack为ES加上登录,具体操作可参考elk笔记二–通过X-Pack权限控制设置elk登录,这里给出logstash配置(/etc/logstash/conf.d/logstash.conf)参考如下:

input {
    stdin {}
    beats {
        port => 5044
    }
}
output {
    elasticsearch {
        hosts => ["10.65.18.112:9200"]
        index => "filebeats-%{+YYYY.MM.dd}"
        user => "elastic"#登录ES的账户
        password => "xxx"#登录ES的密码口令
    }
    stdout {
        codec => rubydebug 
    }
}

6 filebeat和logstash加密传输配置

6.1 生成证书

本文采用openssl生成证书,根证书目前使用的是自签证书(即内置的公钥可验证该证书本身),命名为ca.crt。本文配置的是双向证书,即filebeat和logstash交互共需要两套证书,这里我采用从同一CA签发(当然两套也可以采用不同的两个CA签发),分别为logstash.crt和filebeat.crt。(也可以使用 直接利用的Elasticsearch随安装包提供的数字证书工具elasticsearch-certutil来制作需要的证书,可以参考Filebeat与Logstash配置SSL加密通信

1615361929310

logstash端应该有的证书:ca.crt,logstash,crt.logstash.key

filebeat端应该有的证书:ca.crt,filebeat,crt.filebeat.key

利用openssl生成证书很方便,只需要主机上装openssl即可,运行openssl version查看版本,若没安装,运行以下命令安装:

yum install openssl
yum install openssl-devel

首先生成证书机器的选择可以随意,这里我选择在logstash主机上生成所有的证书,然后将filebeat的证书拷贝到其机器即可。

6.1.1 制作自签的CA证书

(1)创建certs证书目录

mkdir /etc/logstash/certs
cd /etc/logstash/certs#进入证书目录

(2)生成ca密钥

openssl genrsa 2048 > ca.key

1615362913575

(3)使用ca私钥建立ca证书

openssl req -new -x509 -nodes -days 3650 -key ca.key -out ca.crt

其中值得注意的是参数Common Name为域名,这里填为*.eniot.io,其他参数可以直接enter为空。

1615362976782

6.1.2 制作logstash使用的证书

继续在logstash主机的/etc/logstash/certs目录下生成。

(1)生成logstash服务器csr证书请求文件

openssl req -newkey rsa:2048 -days 3650 -nodes -keyout logstash.key -out logstash.csr

其中值得注意的参数为Common Name为logstash服务的域名:*.eniot.io,challenge password为为该证书请求文件设置密码,这里可以直接为空即可;其他参数直接enter为空即可。

1615363233359

(2)使用ca证书与ca私钥,请求文件logstash.csr签发服务器证书

openssl x509 -req -in logstash.csr -days 3650 -CA ca.crt -CAkey ca.key -set_serial 01 > logstash.crt

1615363431449

至此logstash需要的证书已经生成完成:ca.crt,logstash.crt,logstash.key

1615363508360

6.1.3 制作filebeat使用的证书

继续在logstash主机的/etc/logstash/certs目录下生成。

(1)生成filebeat服务器csr证书请求文件

openssl req -newkey rsa:2048 -days 3650 -nodes -keyout filebeat.key -out filebeat.csr

其中值得注意的参数为Common Name为filebeat服务的域名:*.eniot.io,challenge password为为该证书请求文件设置密码,这里可以直接为空即可;其他参数直接enter为空即可。

1615363607580

(2)使用ca证书与ca私钥,请求文件filebeat.csr签发服务器证书

openssl x509 -req -in filebeat.csr -days 3650 -CA ca.crt -CAkey ca.key -set_serial 01 > filebeat.crt

1615366665677

至此filebeat所需要的证书ca.crt,filebeat.crt,filebeat.key已经生成完毕。

1615363783351

6.1.4 检查生成的openssl证书

(1)查看KEY信息

openssl rsa -noout -text -in ca.key

(2)查看CSR信息

openssl req -noout -text -in logstash.csr

(3)查看证书信息

openssl x509 -noout -text -in ca.crt

(4)验证证书

会提示self signed

openssl verify logstash.crt

(5) 因为myserver.crt 是幅ca.crt发布的,所以会验证成功

openssl verify -CAfile ca.crt logstash.crt

去掉key的密码保护

有时候每次都要输入密码太繁琐了,可以把Key的保护密码去掉

openssl rsa -in logstash.key -out logstash.key.insecure

6.2 配置证书

6.2.1 logstash配置证书

(1)/etc/logstash/conf.d/logstash.conf上配置证书路径

主要需要修改是input节中设置ssl的参数,具体参数

vi /etc/logstash/conf.d/logstash.conf 
input {
    stdin {}
    beats {
        port => 5044
        ssl => true
        ssl_certificate_authorities => ["/etc/logstash/certs/ca.crt"]
        ssl_certificate => "/etc/logstash/certs/logstash.crt"
        ssl_key => "/etc/logstash/certs/logstash.key"
        ssl_verify_mode => "force_peer"
    }
}
output {
    elasticsearch {
        hosts => ["xxxx:9200"]
        index => "filebeats-%{+YYYY.MM.dd}"
        user => "elastic"
        password => "xxxx"
    }
    stdout {
        codec => rubydebug 
    }
}

(2)查看logstash进程,并kill掉

ps -ef |grep logstash#查看logstash进程
kill -9 pid

(3)重新启动logstash,这里不要以后台方式运行,直接运行下面命令,如果出错可以看到错误信息。没有出错信息就继续往下(不要用systemctl start logstash启动方式,因为该方式不会加载logstash.conf配置文件启动)

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf

(4)带证书访问logstash

在运行Filebeat之前 ,另外开个终端,带证书访问,可以使用curl来验证logstash证书是否成功(启动logstash后,再带证书访问时,可能会有延迟,多试几次)

#带证书访问:
curl -v --cacert /etc/logstash/certs/ca.crt https://域名:5044
curl -v --cacert /etc/logstash/certs/ca.crt https://ip:5044
curl -v --cacert /etc/filebeat/certs/ca.crt https://10.65.18.112:5044
curl -v --cacert /etc/filebeat/certs/ca.crt https://archery-sec0002.eniot.io:5044

返回如下信息则连接成功:

1615364370400

返回如下信息则连接失败:1615364645594

(5)后台方式运行logstash

证书访问成功后,即可以后台方式长时间运行logstash

nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf &

6.2.2 复制filebeat证书

因为之前的证书都是再logstash主机上生成的,因此我们需要吧filebeat相关证书(ca.crt,filebeat.crt,filebeat.key)从logstash主机复制filebeat主机。这里如果知道主机账户密码可以直接用scp命令,直接看6.2.3节。因为我使用的是堡垒机,不知道主机密码,因为我开始使用的是堡垒机文件夹的上传下载功能,突然发现堡垒机的这个功能有巨坑:上传下载有大小限制,所以这样传过去的证书是不完整的,用起来会一直报no pem file /etc/filebeat/certs/filebeat.crt; file is not a certificate adding/etc/filebeat/certs/ca.pem to the list of known CAs错误,这个真的坑死我了,弄了好久才发现。后面尝试用git来运输文件。

6.2.2.1 logstash主机上传文件到git

上传ca.crt filebeat.key filebeat.crt,3个文件到git:

(1)进入证书目录

cd /etc/logstash/certs

(2)下载git项目(随便建一个,或者用已经存在的),并ca.crt filebeat.key filebeat.crt将复制到项目文件夹gitalk

git clone https://github.com/m01ly/gitalk
cp filebeat.crt gitalk/
cp ca.crt gitalk/
cp filebeat.key gitalk/

1615365664125

(2)添加所有需要上传的文件和配置到git

git add FILE添加确定的文件FILE
git add .添加当前目录下所有文件

cd gitalk
[root@xxxx gitalk]# git add .

(3)提交文件

git commit -m 'filebeat log message'

上述命令必须添加‘-m’及‘log message’,其中log message可以自己随便填写,否则是提交不成功的,在后面的push操作中会提示错误:“error:src refspec master does not match any”

1615365765658

至此,我们就已经提交文件到本地仓库了!

现在我们需要将上述本地仓库里的文件添加到远程库

(4)在github里添加origin

git remote add origin https://github.com/m01ly/gitalk.git

如果之前配置过一次,再次配置则会提示以下错误:
ERROR:远程 origin 已经存在。
此时只需要将远程配置删除,重新添加即可;

git remote rm origin
git remote add origin https://github.com/m01ly/gitalk.git

再次提交文件即可正常使用

(5)上传文件

git push -u origin main

1615365843590

网页访问git,发现文件上传成功

1615365900784

6.2.2.2 filebeat主机从git下载文件

以下全程再filebeat主机上操作。

(1)进入证书目录,下载git项目

cd /etc/filebeat/
git clone https://github.com/m01ly/gitalk

(2)修改文件夹gitalk为certs,可以看到filebeat相关证书已经下载成功

mv gitalk certs

1615366185610

6.2.3 filebeat配置证书

(1)配置证书

配置/etc/filebeat/filebeat.yml 文件,在output.logstash节点加上3行ssl相关参数为证书路径如下:

cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat0.yml
vi /etc/filebeat/filebeat.yml 
output.logstash:
  # The Logstash hosts
  #hosts: ["localhost:5044"]
  hosts: ["archery-sec0002.eniot.io:5044"]#这里配置logstash地址,如果是内网最好用域名访问
  ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
  ssl.certificate: "/etc/filebeat/certs/filebeat.crt"
  ssl.key: "/etc/filebeat/certs/filebeat.key"

(2)重启filebeat

运行下面命令启动filebeat(用以下方式启动的原因是因为报错的时候,方便看日志,如果采用systemctl restart filebeat方式启动,如果启动失败,日志不好找,参考Filebeat插件启动失败,不能直接查找报错原因

/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -e -v

可以 看到日志中有Connection to backoff(async(tcp://xx.xx.io:5044)) established信息,则表示连接成功。

1615358106512

7 树莓派上装filebeat

在实际生产项目中,收集日志的可能都是简单的树莓派系统,因此我也尝试再树莓派上安装filebeat,按照网上的一篇教程在Raspberry PI 3上安装Filebeat,博主写的很详细,照着做就可以,这里面有个坑需要提一下,在make update是会报错如下图:一片红,根据描述信息可以看出是python版本不符合,谷歌了一波也没得到解决,然后忽略他,继续安装启动filebeat正常。这里的错误有人可以解决的话,可以写在评论区一起交流。

1615879776960

注意二:

用/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -e -v来启动filebeat,自己尝试/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat语句 会无回显,启动失败。

vi /lib/systemd/system/filebeat.service
[Unit]
Description=filebeat
Documentation=https://www.elastic.co/guide/en/beats/filebeat/current/index.html
Wants=userwork-online.target
After=network-online.target

[Service]
ExecStart=/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -e -v
Restart=always

[Install]
WantedBy=multi-user.target

8 Kibana查看上传的日志

(1)建立索引模式

登录kibana,然后点击链接“stack Management”→”index patterns”–>”Create index pattern”–>输入filebeats-*,然后一直next完成即创建索引模式成功。

1618382014523

(2)查看上传的日志内容

Home->”Discover”–选中所建立的index pattern,就可以看到上传的日志信息。

1618382093420

(3)筛选上传的日志信息

在下图1处 输入 筛选表达式对日志进行筛选,然后按enter或者右边的update按钮,即可看到过滤后的数据。

1618382258008

相关文章

  1. elk笔记一—suricata+elk搭建入侵检测系统

  2. elk笔记二–通过X-Pack权限控制设置elk登录

  3. centos7中安装suricata

参考:

  1. 使用SSL与Logstash进行安全通信官方配置 官方配置

  2. Filebeat插件启动失败,不能直接查找报错原因 很有用

  3. filebeat与logstash实现ssl加密传输 第1次参考方案

  4. Filebeat与Logstash配置SSL加密通信 第二次参考方案-目前 直接利用的Elasticsearch随安装包提供的数字证书工具elasticsearch-certutil来制作需要的证书

  5. filebeat.yml配置文件详细说明 当字典检索

  6. 使用Filebeat 6 收集多个目录的日志并发送到lostash

  7. git上传linux文件到GitHub上

  8. openssl 查看证书 制作过程中可以检验,我传输的证书有缺陷就是用这个检验出来的

  9. 证书具体参数说明

  10. Openssl生成自签名证书的多种方式 本文生成证书参考的

  11. 威胁狩猎:基于ELK的日志监控 值得看的结构 后面再看看

  12. 配置 SSL、TLS 以及 HTTPS 来确保 Elasticsearch、Kibana、Beats 和 Logstash 的安全 官网参考配置 后面再看看

  13. Raspberry PI 3上安装Filebeat]翻译自Install Filebeat on Raspberry PI 3 本文参考

文章目录
  1. 1 整体架构部署
  2. 2 elk安装
    1. 2.1 elasticsearch9200
    2. 2.2 logstash安装5044
    3. 2.3 kibana安装5601
  3. 3 部署filebeat
  4. 4 启动
  5. 5 配置多目录收集
  6. 5 ES设置登录
  7. 6 filebeat和logstash加密传输配置
    1. 6.1 生成证书
      1. 6.1.1 制作自签的CA证书
      2. 6.1.2 制作logstash使用的证书
      3. 6.1.3 制作filebeat使用的证书
      4. 6.1.4 检查生成的openssl证书
    2. 6.2 配置证书
      1. 6.2.1 logstash配置证书
      2. 6.2.2 复制filebeat证书
        1. 6.2.2.1 logstash主机上传文件到git
        2. 6.2.2.2 filebeat主机从git下载文件
      3. 6.2.3 filebeat配置证书
  8. 7 树莓派上装filebeat
  9. 8 Kibana查看上传的日志
  10. 相关文章
  11. 参考: