上篇文章讲到,使用suricata搭建入侵检测/入侵防御的流程,不仅如此,我们希望能够通过一个图形化的方式,来查看当前计算机的网络检测的相关信息。
这篇文章主要介绍使用ELK的方式来搭建日志分析环境,使用Logstash收集对suricata产生的警告消息并存储于Elasticsearch上,由Kibana读取Elasticsearch的数据并进行展示。
ELK下载使用两台机器进行部署,为Ubuntu OS18第一台IP地址: 192.168.1.2第二台IP地址: 192.168.1.3第一台计算机用于suricata搭建,并搭建Logstash对suricata日志进行收集第二台计算机搭建Elasticsearch以及Kibana,用于存储suricata日志信息以及图形化展示第一台通过Logstash将日志信息收集后发送到第二台机器中,由Elasticsearch存储起来
ELK由三个组件组成,为:
ElasticsearchLogstashKibana
这里主要介绍Ubuntu安装ELK的方式,版本主要为7.10.2(ELK版本要相互一致),并通过官网下载的压缩包解压运行。
官网地址:Elastic Stack
因为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.gzElasticsearch搭建
此处不介绍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 /Ad+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的变化
进入第二台计算机中,进入/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条)