suricata + ELK保姆级搭建入侵检测/入侵防御02 --- ELK搭建
前言上篇文章讲到,使用suricata搭建入侵检测/入侵防御的流程,不仅如此,我们希望能够通过一个图形化的方式,来查看当前计算机的网络检测的相关信息。这篇文章主要介绍使用ELK的方式来搭建日志分析环境,使用Logstash收集对suricata产生的警告消息并存储于Elasticsearch上,由Kibana读取Elasticsearch的数据并进行展示。环境定义使用两台机器进行部署,为Ubunt
前言
上篇文章讲到,使用suricata搭建入侵检测/入侵防御的流程,不仅如此,我们希望能够通过一个图形化的方式,来查看当前计算机的网络检测的相关信息。
这篇文章主要介绍使用ELK的方式来搭建日志分析环境,使用Logstash收集对suricata产生的警告消息并存储于Elasticsearch上,由Kibana读取Elasticsearch的数据并进行展示。
环境定义
ELK下载
ELK由三个组件组成,为:
- Elasticsearch
- Logstash
- 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
其他也是类似
三个文件导入之后,即可在仪表盘中查看
此时即可查看到入侵检测的日志信息
更多推荐
所有评论(0)