elk笔记一---suricata+elk搭建入侵检测系统

1 引言

最近有一个工作任务,需要利用Suricata作为IDS来检测出口流量,同时利用ELK进行数据的展示。看了很多suricata+elk进行流量监测的文章,但是都不太符合要求。

2 部署架构

整个架构如下表所示,有台机器装suricata用于分析流量,并装elk负责数据展示,后面数据量太大可能涉及elk集群,这里先不做考虑,仅仅自己实验。

机器部署内容IP
流量分析和数据展示机器,称之为ids主机ELK数据展示+suricata分析流量多个集群
流量收集集群抓取集群流量10.0.0.1

这个架构我们提供两种流量分析模式。

一种为在线模式:正常做法都是利用镜像流量,将所有集群抓取到的流量镜像到suricata机器,suricata实时在线处理这些流量,再elk展示出来。

二离线模式:但是因为机器是部署在阿里云上的,因此做镜像流量较困难,当然采用Amazon VPC功能可以实现镜像流量,如 VPC Traffic Mirroring 构建网络入侵检测系统文章,这里我们没有购买此产品,初步架构部署为离线模式。即流量收集集群将抓取的流量文件推送到suricata主机上,suricata -r分析流量文件包,产生log日志,然后elk将log数据展示出来。

1611038936479

3 环境部署

3.1 suricata部署

suricata的安装教程看前文,安装好suricata后,然后按照官网suricata+elk部署指南配置相关支持Elk属性即可。

3.1.1 确认suricata安装了libjansson

如下查看配置信息,确认 libjansson support:为yes即可

$ suricata --build-info
This is Suricata version 2.0 RELEASE
Features: NFQ PCAP_SET_BUFF LIBPCAP_VERSION_MAJOR=1 AF_PACKET HAVE_PACKET_FANOUT LIBCAP_NG LIBNET1.1 HAVE_HTP_URI_NORMALIZE_HOOK HAVE_NSS HAVE_LIBJANSSON 
...
  libnss support:                          yes
  libnspr support:                         yes
  libjansson support:                     --> yes <--
  Prelude support:                         no
  PCRE jit:                                no
  libluajit:                               no
  libgeoip:                                yes
  Non-bundled htp:                         yes
  Old barnyard2 support:                   no
  CUDA enabled:                            no
...

3.1.2 修改配置文件

修改配置文件suricata.yaml如下

  # "United" event log in JSON format
  - eve-log:
      enabled: yes
      type: file #file|syslog|unix_dgram|unix_stream
      filename: eve.json
      # the following are valid when type: syslog above
      #identity: "suricata" 
      #facility: local5
      #level: Info ## possible levels: Emergency, Alert, Critical,
                   ## Error, Warning, Notice, Info, Debug
      types:
        - alert
        - http:
            extended: yes     # enable this for extended logging information
        - dns
        - tls:
            extended: yes     # enable this for extended logging information
        - files:
            force-magic: yes   # force logging magic on all logged files
            force-md5: yes     # force logging of md5 checksums
        #- drop
        - ssh
        - smtp
        - flow

3.2 安装ES

3.2.1 需要java 1.8 环境

ES安装需要java1.8环境,因此需要先检查主机是否有java1.8环境。

http://www.justdojava.com/2019/08/11/elk-install/

1603867131448

(1)查看java版本:

which java
whereis java
java -version

1603862442212

(2)卸载旧版本(这里注意centos7自带的是1.8的jre,需要卸载掉/或者yum -y install java-1.8.0-openjdk安装的也仅仅是jre)

[root@ids0001 ~]# find / -name java
/etc/pki/ca-trust/extracted/java
/etc/pki/java
/etc/alternatives/java
/etc/java
/var/lib/alternatives/java
/usr/bin/java
/usr/lib/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/bin/java
/usr/share/elasticsearch/jdk/bin/java
/usr/share/java
sudo rm -rf /etc/pki/ca-trust/extracted/java
sudo rm -rf /etc/pki/java
sudo rm -rf /etc/alternatives/java
sudo rm -rf /etc/java
sudo rm -rf /var/lib/alternatives/java
sudo rm -rf /usr/bin/java
sudo rm -rf /usr/lib/java
sudo rm -rf /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/bin/java
sudo rm -rf /usr/share/elasticsearch/jdk/bin/java
sudo rm -rf /usr/share/java

(3)安装1.8版本java

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

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

1603870468396

(4)修改环境变量

vi /etc/profile#修改JAVA_HOME为jdk目录
echo $JAVA_HOME#查看环境变量
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64

1603868088313

让profile文件立即生效 ,1.8java安装成功

[root@ids0001 ~]#  source /etc/profile

1603867783946

3.2.2安装

官网下载

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

1603803405841

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

报错1:

1603866798862

解决办法:删除其他版本的java

find / -name java

1603866831066

版本太低 ,都删除,

sudo rm -rf /opt/jdk1.7.0_79/
sudo rm -rf /opt/jdk1.8.0_60/

3.2.3设置data的目录

创建/data/es-data目录,用于elasticsearch数据的存放

mkdir -p /data/es-data

修改该目录的拥有者为elasticsearch

chown -R elasticsearch:elasticsearch /data/es-data

3.2.4设置log的目录

创建/data/es-log目录,用于elasticsearch日志的存放

mkdir -p /log/es-log

修改该目录的拥有者为elasticsearch

chown -R elasticsearch:elasticsearch /log/es-log

3.2.5 修改配置文件elasticsearch.yml

vim /etc/elasticsearch/elasticsearch.yml
egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml#查看配置
#设置data存放的路径为/data/es-data
path.data: /data/es-data

#设置logs日志的路径为/log/es-log
path.logs: /log/es-log

#设置内存不使用交换分区
bootstrap.memory_lock: false
#配置了bootstrap.memory_lock为true时反而会引发9200不会被监听,原因不明

#设置允许所有ip可以连接该elasticsearch
network.host: 0.0.0.0

#开启监听的端口为9200
http.port: 9200

#节点名称
node.name: node-1

#增加新的参数,为了让elasticsearch-head插件可以访问es (5.x版本,如果没有可以自己手动加)
http.cors.enabled: true
http.cors.allow-origin: "*"

3.2.6启动elasticsearch

sudo systemctl start elasticsearch#启动   

出错1:

1603863067395

solution:配置文件加下面代码:

bootstrap.system_call_filter: false 
cluster.initial_master_nodes: ["node-1"] 

查看状态

systemctl status elasticsearch 

设置开机启动

systemctl enable elasticsearch 

启动成功之后,测试服务是否开启

curl -X GET http://localhost:9200 

1603805643890

3.2.7 卸载

yum remove elasticsearch
sudo rm -rf /var/lib/elasticsearch/
sudo rm -rf /etc/elasticsearch

3.3 logStash

3.3.1 下载安装

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

1603805962140

3.2.2设置data的目录

创建/data/ls-data目录,用于logstash数据的存放

mkdir -p /data/ls-data 

修改该目录的拥有者为logstash

chown -R logstash:logstash /data/ls-data 

3.3.3设置log的目录

创建/data/ls-log目录,用于logstash日志的存放

mkdir -p /log/ls-log 

修改该目录的拥有者为logstash

chown -R logstash:logstash /log/ls-log 

3.3.4设置conf.d的目录,创建配置文件

#进入logstash目录 
cd /etc/logstash 
#创建conf.d的目录 
mkdir conf.d 

创建配置文件,日志内容输出到elasticsearch中,如下所示

vim /etc/logstash/conf.d/logstash.conf
vi /etc/logstash/conf.d/logstash.conf
chown root /etc/logstash/conf.d/logstash.conf 

logstash.conf 文件内容如下:注意其中的path为suricata日志:/var/log/suricata/eve.json

input &#123;
  file &#123;
    path => ["/var/log/suricata/eve.json"]
    codec => json
  &#125;
&#125;

filter &#123;

&#125;

output &#123;
  elasticsearch &#123;
    hosts => "127.0.0.1:9200"
    index => "suricata-%&#123;+YYYY.MM.dd&#125;"
  &#125;
&#125;

3.3.5修改配置文件logstash.yml

vim /etc/logstash/logstash.yml

内容如下:

# 设置数据的存储路径为/data/ls-data 
path.data: /data/ls-data 
# 设置管道配置文件路径为/etc/logstash/conf.d 
path.config: /etc/logstash/conf.d 
# 设置日志文件的存储路径为/log/ls-log 
path.logs: /log/ls-log 

3.3.6启动logstash

启动logstash命令如下,注意该命令不会指定配置文件启动。

systemctl start logstash 

1603951213781

查看

systemctl status logstash 

设置开机启动

systemctl enable logstash 

3.3.7 测试logstash

–config.test_and_exit表示,检查测试创建的logstash.conf配置文件,是否有问题,如果没有问题,执行之后,显示Configuration OK 证明配置成功!

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

**如果报错:WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using –path.settings. **

解决办法:

cd /usr/share/logstash 
ln -s /etc/logstash ./config 

测试成功!

1603806572175

3.3.8 logstash指定配置进行运行

指定logstash.conf配置文件,以后台的方式运用,执行这段命令之后,需要回车一下

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

检查logstash是否启动

ps -ef|grep logstash 

显示如下信息,说明启动了

img

3.3.9 卸载

sudo rm -rf /etc/default/logstash \
/etc/logstash \
/var/lib/logstash \
/var/log/logstash \
/usr/share/logstash \
/usr/share/kibana/x-pack/plugins/logstash \
/usr/share/kibana/x-pack/plugins/monitoring/public/components/logstash \
/usr/share/kibana/x-pack/plugins/monitoring/public/components/metricbeat_migration/instruction_steps/logstash \
/usr/share/kibana/x-pack/plugins/monitoring/public/lib/logstash \
/usr/share/kibana/x-pack/plugins/monitoring/public/views/logstash \
/usr/share/kibana/x-pack/plugins/monitoring/server/lib/logstash \
/usr/share/kibana/x-pack/plugins/monitoring/server/lib/metrics/logstash \
/usr/share/kibana/x-pack/plugins/monitoring/server/routes/api/v1/logstash

3.3.10

找错,查看logstash运行日志

systemctl status logstash -l

3.4 kibana

3.4.1 安装

官网下载kibaba7.8版本

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

1603808067228

搜索rpm包

rpm -ql kibana

默认是装在/usr/share/kibana/下。

3.3.2修改kibana.yml

修改kibana的配置文件

vi /etc/kibana/kibana.yml 

内容如下:

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

3.4.3启动kibana

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

kibana启动成功的界面

1603808420430

3.4.4 卸载

yum remove kibana
find / -name kibana
sudo rm -rf /etc/kibana \
/var/lib/kibana \
/usr/share/elasticsearch/modules/kibana \
/usr/share/kibana \
/usr/share/logstash/modules/fb_apache/configuration/kibana \
/usr/share/logstash/modules/netflow/configuration/kibana \
/usr/share/logstash/x-pack/modules/arcsight/configuration/kibana \
/usr/share/logstash/x-pack/modules/azure/configuration/kibana

3.5 相关配置总结

##suricata
/var/log/suricata/ #日志目录

##elk日志目录log:
tail -n 20  /var/log/messages 

##ES:/usr/share/elasticsearch
/usr/share/elasticsearch/bin/elasticsearch#安装目录
egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml
vi /etc/elasticsearch/elasticsearch.yml
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

##logstash:
/usr/share/logstash/bin/logstash#安装目录
path.data: /var/lib/logstash
pipeline.ordered: auto
path.logs: /var/log/logstash
egrep -v "^#|^$" /etc/logstash/conf.d/logstash.conf
/etc/logstash/logstash.yml 

##kibana:
/usr/share/kibana/bin/kibana#安装目录
egrep -v "^#|^$" /etc/kibana/kibana.yml 

4 在线模式部署

在线模式部署:即suricata实时处理其他机器镜像过来的流量。然后elk进行数据化展示。

依次开启kibana elasticsearch logstash,这里需要注意的是logstash不能采用默认开启方式systemctl start logstash,因为默认配置不加载/etc/logstash/conf.d/logstash.conf文件,则加载不成功suricata日志。具体命令如下:

systemctl start kibana logstash elasticsearch
systemctl start logstash#错误开启,不会加载配置文件/etc/logstash/conf.d/logstash.conf
nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf & #指定配置文件开启logstash  正确操作
sudo nohup /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal &  #启动suricata

开启成功后,访问kibina,可以看到suricata日志数据。

1603951881328

5 离线模式部署

5.1 suricata分析流量包功能

分析单个包:suricata -r pcap文件名 -l 自定义输出位置

分析文件夹里所以的包:suricata -r pcap文件夹名 -l 自定义输出位置

sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -r /tmp/test.cap -l  /var/log/suricata/cap

5.2 离线模式工作原理

离线模式工作原理:离线一词即,流量收集集群将抓取的流量scp定时发送到ids主机,然后ids主机定时启动suricata -r分析cap流量文件,然后推送到elk进行展示。该过程涉及两个部分。其中定时采用linux的crontab。

(1)流量收集集群定时推送流量文件到ids主机

定时推送流量到ids主机脚本send.sh如下:

#!/bin/bash
scp -Rf /root/testdir/ wasadmin@10.127.40.25:/root/temp/#复制到ids文件夹/root/temp/
rm -rf /root/testdir/*#删除该主机文件夹下的所有文件

(2)ids主机定时分析

ids主机定时分析脚本如下suricara.sh:

suricata -c /etc/suricata/suricata.yaml -r /root/temp/
rm -rf /root/temp/*

定时执行suricara.sh,在终端输入以下命令:

crontab -e

在显示的文件末尾添加以下规则:#每5分钟运行一次time.sh脚本,并把错误和正确的日志都存到/tmp/load.log上。

*/5 * * * * /root/time.sh > /tmp/load.log 2>&1

编辑完成,保存完成以后,就会显示以下提示信息:

crontab: installing new crontab

这就说明正在安装新的定时任务,如果没有这条提示信息,请重新运行crontab -e命令。

1604578836302

错误解决

1603938736430

Solution

1 先执行命令 free -m查看内存是不是还有 最主要的是 看有没有交换空间 swap

2 创建swapfile:dd if=/dev/zero of=swapfile bs=1024 count=500000

3 将swapfile设置为swap空间 mkswap swapfile

4 启用交换空间 swapon swapfile ( 删除交换空间是swapoff swapfile )

free -m
dd if=/dev/zero of=swapfile bs=1024 count=500000
mkswap swapfile 
swapon swapfile 
free -m

参考

官网suricata+elk部署指南

elk官方下载连接

elk部署教程 简单清晰

suricata+elk其他部署方式

elk架构+filebeat解析

elk日志收集教程

借助 VPC Traffic Mirroring 构建网络入侵检测系统 实时分析流量

elk+suricata(docker部署)

文章目录
  1. 1 引言
  2. 2 部署架构
  3. 3 环境部署
    1. 3.1 suricata部署
      1. 3.1.1 确认suricata安装了libjansson
      2. 3.1.2 修改配置文件
    2. 3.2 安装ES
      1. 3.2.1 需要java 1.8 环境
      2. 3.2.2安装
      3. 3.2.3设置data的目录
      4. 3.2.4设置log的目录
      5. 3.2.5 修改配置文件elasticsearch.yml
      6. 3.2.6启动elasticsearch
      7. 3.2.7 卸载
    3. 3.3 logStash
      1. 3.3.1 下载安装
      2. 3.2.2设置data的目录
      3. 3.3.3设置log的目录
      4. 3.3.4设置conf.d的目录,创建配置文件
      5. 3.3.5修改配置文件logstash.yml
      6. 3.3.6启动logstash
      7. 3.3.7 测试logstash
      8. 3.3.8 logstash指定配置进行运行
      9. 3.3.9 卸载
      10. 3.3.10
    4. 3.4 kibana
      1. 3.4.1 安装
      2. 3.3.2修改kibana.yml
      3. 3.4.3启动kibana
      4. 3.4.4 卸载
    5. 3.5 相关配置总结
  4. 4 在线模式部署
  5. 5 离线模式部署
    1. 5.1 suricata分析流量包功能
    2. 5.2 离线模式工作原理
  6. 错误解决
  7. 参考