logo资料库

Ubuntu 18.04上使用snort3搭建NIDS(三)| ELK可视化篇.pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
Ubuntu 18.04上使用上使用snort3搭建搭建NIDS(三)(三)| ELK可视化篇 可视化篇 为最近项目上要用到snort3,但是找了很多博客都是snort2.9.x的安装与配置,所以只能靠着官网文档和自己的反复摸索来学习snort3相关的内容。后面将会把snort3相关的发一个系 列的博客,这是第三篇,实现了snort3与ELK数据展示分析组件联动进行告警可视化。后续内容敬请期待,等我理清了思路就来~ 往期回顾 往期回顾 Ubuntu 18.04上使用snort3搭建NIDS(一)| 安装篇 Ubuntu 18.04上使用snort3搭建NIDS(二)| 配置篇 在上一节中,经过配置,大概可以实现一个建议的网络入侵检测系统了,但是它对于检测到的潜在的攻击数据只是简单的进行记录、在输出的告警文件中提示。我们希望这个网络入 侵检测系统可以有更为高效、清晰的展示功能,而ELK作为一款强大的数据分析展示组件,非常合适。所以我们要通过在服务器上部署ELK,来实现snort3告警数据可视化 服务器端ELK部署部署 服务器端 前一阵阿里云搞活动,学生认证可以免费领半年的ECS,刚好现在用上。阿里云ECS提供了远程ssh登录的网页,但是感觉不是很舒服,所以我用的是XShell和Xftp,感觉用起来很方 便,对于家庭和学校使用是免费的,在这里挂个官网链接,直接去下载就可以~ 毕竟是免费的ECS,下载网速有限制,所以用ftp穿ELK组件就比较合适了。xftp和xshell使用是非常简单的,我就不过多展示了。ELK部署其实有很多大佬写的比较好的博客可以参 考,我这里就简单写一下过程,以及这之中遇到的一些坑 部署部署Elasticsearch 首先要安装一下jdk1.8,安装前先要更新一下包列表,不然找不到 sudo apt update sudo apt install openjdk-8-jre-headless 把Elasticsearch解压,然后进入config目录,修改配置文件 vim elasticsearch.yml 我下载的是7.6.2版本的,默认的配置文件其实已经写好了但是全部注释掉了,找到相应的行改一下就好 #------------- Node -------------- node.name = node-1 #------------ Network ------------ network.host: 0.0.0.0 http.port: 9200 http.cors.enabled: true http.cors.allow-origin: "*" #----------- Discovery ---------- cluster.initial_master_nodes: ["node-1"] 改好之后保存,ELK有一个很奇葩的设定不能以不能以root身份启动 身份启动,所以需要新建一个用户 groupadd groupname useradd username -g groupname -p password su root #切换到elasticsearch的父路径下 chown -R groupname:username elasticsearch-7.6.2 su username cd elasticsearch-7.6.2/bin ./elasticsearch 这时Elasticsearch应该就可以启动了,可以通过服务器公网IP:9200在浏览器中访问 第一个坑 第一个坑 本来觉得设置好了之后就万事大吉了,但是Chrome提示说服务器拒绝了我们的访问请求。原因在于:阿里云ECS默认只允许ssh、ftp和icmp流量,我们需要到控制台开放相应的端口 才可以。 我本着用哪个开哪个的原则只开放了9200(后面Kibana还要开放5601),如果嫌麻烦的话可以直接端口那里写**-1/-1开放全部端口**
至此ElasticSearch部署告一段落 部署部署Kibana 毕竟是同一个场出的东西,使用方法都差不多,解压后进入到config目录,然后修改kibana.yml文件 server.port : 5601 server.host : "0.0.0.0" elasticsearch.hosts : ["http://0.0.0.0:9200"] 其他的都不用管,直接启动就行 第二个坑 第二个坑 和之前一样,我切换到了新建的用户上去启动,但是提示说权限不足,简单的解决方案是用root或者普通用户加sudo执行./kibana --allow-root 在上述工作都做好之后,满心期待打开5601端口,只看到一行小字 Kibana server is not ready yet 第三个坑 第三个坑 回到Xshell,发现了满屏红色,虽然是warning,然而它运行不了啊,和error也没啥区别 再一看Elasticsearch那边,疯狂的提示 no known master mode, scheduling a retry 网上搜了一下,大概问题是没有设置主节点,所以返回到elasticsearch.yml里面,加上了一行 node.master : true 再重新运行,问题解决。成功后的kibana看起来是这样的 本地配置snort 本地配置
打开之前配置好的snort.lua 在最下面(约224行),会看到configure outputs,按照下面的改一下就可以了 -- 7 configure outputs alert_csv= { file = true, } alert_json = { file = true, limit = 5, fields = 'timestamp pkt_num pkt_gen pkt_len src_addr src_port dst_addr dst_port proto ttl tos service rule sid rev msg priority action', } 这里的fields是输出告警文件中的字段,顺序可以自己改;limit的意义是如果输出的告警内容已经大于5MB了 就开始在新的文件中写入告警文件,也就是说每个告警文件最大为5MB 设置好之后运行一下试试看 snort -c LOCATION/snort.lua -l LOCATION/log/ -i NIC -s 65535 -k none -m 0x1b 字段字段 意义意义 -c LOCATION/snort/lua 指定snort使用的配置文件,LOCATION是snort安装位置 -l LOCATION/log/ -i NIC -s 65535 指定告警文件输出位置 指定要监听的网卡,NIC是网卡名 设置最大报文长度为65535 以免截断某些长报文 忽略校验和错误(若不设置,会自动drop校验和错误的数据包) 将输出文件的umask设为033 -k none -m 0x1b 默认情况下snort的输出文件umask值为077,这样除了文件所有者之外其他用户无法读取,自然在后面用elk处理的时候会出现问题 所以改成033(000 011 011 也就是0x1b) 如果lua文件中没有写错的话,snort应该可以正常运行(如果提示有错的话,检查一下是不是json那里的字段名写错了)然后随便访问点什么东西(之前在第二篇中我们已经设立了一 个对任意TCP流量都发出告警的规则) 按Ctrl+C退出,这个时候log文件夹中就可以看到alert_csv.txt和alert_json.txt文件 将数据发送到ELK服务器服务器 将数据发送到 配置配置Filebeat 之前写了很多,然后粘贴代码的时候卡住了,结果啥都没了又得重新写这段,心情就不是很美妙,可能会写的简略些 首先进入到filebeat的目录下,修改filebeat.yml文件,在input模块添加两个log类型,并将logstash output解除注释 (因为我们要用logstash对数据进行一些预处理再发上去,所以不用直接发到elasticsearch,上面elasticsearch outputs模块保持注释状态即可) #============= Filebeat Inputs ============== - type: log paths: - /usr/local/etc/snort/log/alert_json.* fields: file_format: json source: snort3 enabled: true - type: log paths: - /usr/local/etc/snort/log/alert_csv.* fields: file_format: csv source: snort3 enabled: true #============= Logstah Outputs ============== output.logstash: hosts: ["http://`publc_ip_addr`:5044"] 其他内容保持默认不用管就可以了,然后运行一下filebeat ./bin/filebeat -c filebeat.yml -e 如果没什么问题 应该会看到这样的界面 然后满屏的提示 配置配置Logstash 本来我想的是不用Logstash,直接用Filebeat将文件传到服务器上,但是
这谁顶得住啊,还是用logstash处理一下再发吧 与其他几个组件不同的是,logstash的配置工作大多在.conf文件中完成,在config文件夹中给出了一个conf的示例文件,复制一下再做些改动就成 cp logstash-sample.conf snort_alert.conf vim snort_alert.conf input { beats { port => 5044 } } filter { if[fields][file_format] == "json" { json { source => "message" } } if[fields][file_format] == "csv" { csv { separator => ", " columns => ["time", "number", "proto", "pkt_gen", "pkt_len", "direction", "src_ap", "dst_ap", "rule", "action"] } } } output { if[fields][file_format] == "json" { elasticsearch { hosts => ["http://localhost:9200"] #再次提示我的logstash是放在接收端的 index => "snort3_json" } } if[fields][file_format] == "csv" { elasticsearch { hosts => ["http://localhost:9200"] #如果放在发送端需要把localhost改为服务器ip index => "snort3_csv" } } stdout{} #正常状态下logstash运行成功后不会出现新的提示, #不方便判断是否成功,加一个stdout会把他收到的东西显示在终端上 #方便确定当前是否运行成功 } 保存好之后通过下面的命令来运行 ./bin/logstash -f config/snort_alert.conf 启动成功后,在snort告警文件有变动之前,应该会一直显示为下图这样 发送测试数据 发送测试数据 打开snort,继续用上文中的方式来产生一个告警文件,由于之前logstash上我们设置了回显,所以现在判断是否成功最简单的办法就是看logstash这边有没有出现大段大段的信息, 像这样:
如果有,就差不多了,我们再来到ELK服务器这边,可以看到已经出现了相应的索引 作者:CollinXia
分享到:
收藏