虚拟化容器,大数据,DBA,中间件,监控。

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

08 04月
作者:admin|分类:应用管理

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数据展示出来。

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/

(1)查看java版本:

which java
whereis java
java -version

(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

(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

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

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

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

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

报错1:

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

find / -name java

版本太低 ,都删除,

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:

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

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

查看状态

systemctl status elasticsearch 

设置开机启动

systemctl enable elasticsearch 

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

curl -X GET http://localhost:9200 

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

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 

查看

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 

测试成功!

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

搜索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启动成功的界面

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日志数据。

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命令。

错误解决

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部署)

浏览525 评论0
返回
目录
返回
首页
elk笔记二--通过X-Pack权限控制设置elk登录 最佳网络安全和黑客软件