前言

上篇文章讲到,使用suricata搭建入侵检测/入侵防御的流程,不仅如此,我们希望能够通过一个图形化的方式,来查看当前计算机的网络检测的相关信息。
这篇文章主要介绍使用ELK的方式来搭建日志分析环境,使用Logstash收集对suricata产生的警告消息并存储于Elasticsearch上,由Kibana读取Elasticsearch的数据并进行展示。

环境定义

  1. 使用两台机器进行部署,为Ubuntu OS18
  2. 第一台IP地址: 192.168.1.2
  3. 第二台IP地址: 192.168.1.3
  4. 第一台计算机用于suricata搭建,并搭建Logstash对suricata日志进行收集
  5. 第二台计算机搭建Elasticsearch以及Kibana,用于存储suricata日志信息以及图形化展示
  6. 第一台通过Logstash将日志信息收集后发送到第二台机器中,由Elasticsearch存储起来

ELK下载

ELK由三个组件组成,为:

  1. Elasticsearch
  2. Logstash
  3. Kibana

这里主要介绍Ubuntu安装ELK的方式,版本主要为7.10.2(ELK版本要相互一致),并通过官网下载的压缩包解压运行。
官网地址:Elastic Stack

java安装(第一台第二台都要安装)

因为ELK是基于java语言的,所以还需要上传java压缩包,并解压和声明环境变量(相信大家~~ java安装略)

下载并解压
本人习惯将第三方软件放在/usr/local/opt

第一台计算机安装Logstash,Suricata

sudo mkdir -p /usr/local/opt && cd /usr/local/opt
sudo wget 
https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-linux-x86_64.tar.gz
sudo wget https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-linux-x86_64.tar.gz

第二台计算机安装ES,Kibana

sudo mkdir -p /usr/local/opt && cd /usr/local/opt
# 下载ES
sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz

Elasticsearch搭建

此处不介绍ES集群,如果需要进行集群可以搜索相关集群的文章自行搭建。
进入/usr/local/elasticsearch/config目录,配置elasticsearch.yml配置文件,配置以下配置信息

进入第二台计算机中

创建数据目录,日志目录如果不存在则创建下

sudo mkdir -p /usr/local/elasticsearch/data
sudo mkdir -p /usr/local/elasticsearch/logs
cluster.name: suricata-application
node.name: node-1
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/logs
# 修改network.host为0.0.0.0,使其能够外网访问es
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
# 设置集群master选举,如果不设置使用head插件将会寻找不到ES
cluster.initial_master_nodes: ["node-1"]

# 设置跨域请求
http.cors.enabled: true
http.cors.allow-origin: "*"

启动ES
ES运行时需要用占用1.2G左右的空间,检查内存空间是否足够

free -h

如果使用root用户启动ES,将会运行不成功,因为ES不允许使用root直接运行,所以需要创建一个用户

sudo useradd es

将elsaticsearch目录的所有者设置为es

cd /usr/local
# 递归将es目录下的所有文件目录所有者都设置为es
sudo chown -R es:es elasticsearch

进入/usr/local/elasticsearch/bin目录中
启动es,发现报错信息中max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
表示限制一个进程可以拥有的VMA(虚拟内存区域)的数量
解决办法: 编辑/etc/sysctl.conf,添加一条

vm.max_map_count=262144

并使用命令将其设为永久修改

sudo sysctl -p

重新启动es,即可成功,可以通过-d将ES设置为后台启动

cd /usr/local/elasticsearch
./elasticsearch -d

可视化查看Elasticsearch
可以通过head插件来实现查看elasticsearch,head可以从github上下载,搜索elasticsearch-head 跳转链接
由于head插件是运行于nodejs,所以需要在本地计算机中安装nodejs,具体安装可以查看nodejs相关资料
查看nodejs

node -v

通过git将head克隆到本地

git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
# 运行elasticsearch-head
npm run start

打开浏览器,访问127.0.0.1:9100,设置es地址后即可查看es相关信息

Logstash搭建

logstash简单来说就是采集指定的日志文件,将日志文件中的数据逐条取出并通过配置文件中的过滤条件,把日志中的数据按照某种规则解析为Key:value方式的数据,并将其输出到elasticsearch中.
切换到另一台服务器(第一台,与suricata同台的计算机)
进入logstash的配置文件目录,并新建一个文件

cd /usr/local/logstash/config
sudo touch logstash-suricata.conf
# 编辑文件
sudo vim logstash-suricata.conf

编辑内容如下:

input {
file {
    path => ["/var/log/suricata/eve.json"]
    codec =>  "json"
    type => "SuricataIDPS"
}

}

filter {
if [type] == "SuricataIDPS" {
    date {
    match => [ "timestamp", "ISO8601" ]
    }
    ruby {
    code => "
        if event.get('[event_type]') == 'fileinfo'
        event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0])
        end
    "
    }

    ruby{
    code => "
        if event.get('[event_type]') == 'alert'
        sp = event.get('[alert][signature]').to_s.split(' group ')
        if (sp.length == 2) and /\A\d+\z/.match(sp[1])
            event.set('[alert][signature]', sp[0])
        end
        end
        "
    }
}

if [src_ip]  {
    geoip {
    source => "src_ip"
    target => "geoip"
    #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
    add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
    add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
    }
    mutate {
    convert => [ "[geoip][coordinates]", "float" ]
    }
    if ![geoip.ip] {
    if [dest_ip]  {
        geoip {
        source => "dest_ip"
        target => "geoip"
        #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
        add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
        add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
        }
        mutate {
        convert => [ "[geoip][coordinates]", "float" ]
        }
    }
    }
}
}

output {
elasticsearch {
    hosts => ["es所在的服务器的ip地址"]
}
}

以免万一,logstash读取的Suricata的eve.json文件可能会没有权限,修改其权限

sudo chmod 744 /var/log/suricata/eve.json

启动logstash

cd /usr/local/logstash/bin
nohup ./logstash -f ../config/logstash-suricata.conf &

成功运行后Logstash将会定时采集eve.json的最新数据并上报到ES服务器上,观察ES的变化
在这里插入图片描述

Kibana搭建

进入第二台计算机中,进入/usr/local/kibana目录

cd /usr/local/kibana/config
# 编辑kibana.yml
sudo vim kibana.yml

修改配置

# kibana端口号
server.port: 5601
# 设置外网访问kibana
server.host: "0.0.0.0"
# 设置读取的Elasticsearch的url地址,可多填
elasticsearch.hosts: ["http://127.0.0.1:9200"]

保存退出,由于kibana也是不能够以root角色方式启动的,将kibana所有者设置为es

cd /usr/local
sudo chown -R es:es elasticsearch 

后台启动kibana

cd /usr/local/kibana/bin
nohup ./kibana &

打开浏览器,访问http://kibana服务器的ip:5601/
创建索引规则
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
通过logstash-*匹配所有符合这个格式的索引库
在这里插入图片描述
选择以时间戳变化
在这里插入图片描述
选择saved objects,将三个json文件导入到里面中,分别为:
Sample_Suricata_Alert_Kibana_Dashboard.json
Sample_Suricata_Alert_Visualizations.json
Sample_Suricata_Alert_Saved_Search.json
在这里插入图片描述
点击import
在这里插入图片描述
在这里插入图片描述
其他也是类似

三个文件导入之后,即可在仪表盘中查看
在这里插入图片描述
此时即可查看到入侵检测的日志信息
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐