利用 ELK 深度定制实时入侵日志分析平台初步

华盟原创文章投稿奖励计划

0x01 首先,快速安装配置好jdk 1.8,因为ES基于java:

利用 ELK 深度定制实时入侵日志分析平台初步

0x02 再来熟悉一些必要的关于elasticsearch的基础概念:

索引 -> 文档 -> 分片和副本

0x03 下载配置 elasticsearch:

利用 ELK 深度定制实时入侵日志分析平台初步

0x04 关于 ES 目录下各配置文件作用简要说明:

# tree /usr/local/elasticsearch      

|– LICENSE.txt

|– NOTICE.txt

|– README.textile

|– bin elasticsearch 自身工具

|   |– elasticsearch

|   |– elasticsearch-service-mgr.exe

|   |– elasticsearch-service-x64.exe

|   |– elasticsearch-service-x86.exe

|   |– elasticsearch.bat

|   |– elasticsearch.in.bat

|   |– elasticsearch.in.sh

|   |– plugin

|   |– plugin.bat

|   `– service.bat

|– config

|   |– elasticsearch.yml 主配置文件

|   `– logging.yml 日志配置文件

`– lib

|– antlr-runtime-3.5.jar

|– asm-4.1.jar

|– asm-commons-4.1.jar

|– elasticsearch-1.4.4.jar

|– groovy-all-2.3.2.jar

|– jna-4.1.0.jar

|– jts-1.13.jar

|– log4j-1.2.17.jar

|– lucene-analyzers-common-4.10.3.jar

|– lucene-core-4.10.3.jar

|– lucene-expressions-4.10.3.jar

|– lucene-grouping-4.10.3.jar

|– lucene-highlighter-4.10.3.jar

|– lucene-join-4.10.3.jar

|– lucene-memory-4.10.3.jar

|– lucene-misc-4.10.3.jar

|– lucene-queries-4.10.3.jar

|– lucene-queryparser-4.10.3.jar

|– lucene-sandbox-4.10.3.jar

|– lucene-spatial-4.10.3.jar

|– lucene-suggest-4.10.3.jar

|– sigar

|   |– libsigar-amd64-freebsd-6.so

|   |– libsigar-amd64-linux.so

|   |– libsigar-amd64-solaris.so

|   |– libsigar-ia64-linux.so

|   |– libsigar-sparc-solaris.so

|   |– libsigar-sparc64-solaris.so

|   |– libsigar-universal-macosx.dylib

|   |– libsigar-universal64-macosx.dylib

|   |– libsigar-x86-freebsd-5.so

|   |– libsigar-x86-freebsd-6.so

|   |– libsigar-x86-linux.so

|   |– libsigar-x86-solaris.so

|   |– sigar-1.6.4.jar

|   |– sigar-amd64-winnt.dll

|   |– sigar-x86-winnt.dll

|   `– sigar-x86-winnt.lib

`– spatial4j-0.4.1.jar

0x05 编辑修改ES主配置文件

# cd /usr/local/elasticsearch/config/

# vi elasticsearch.yml

cluster.name: xlion         集群名称

node.name: “klionsec” 节点名称,如果是同一个集群中的节点只需要改此名称即可

node.master: true         将此节点作为 master,具备一些管理功能

node.data: true 是否存储数据,如果只是想做一些管理功能,可以不存储数据,即设为false

index.number_of_shards: 5 主分片

index.number_of_replicas: 1 副本分片

network.host: 192.168.3.139 监听ip,可直监听内网ip

…..

定义好一些ES要用到的临时文件路径

path.conf: /usr/local/elasticsearch/conf

path.data: /usr/local/elasticsearch/data

path.work: /usr/local/elasticsearch/work

path.logs: /usr/local/elasticsearch/logs

path.plugins: /usr/local/elasticsearch/plugins

bootstrap.mlockall: true 锁住内存

创建刚才定义的目录,并仔细检查配置

# mkdir -p /usr/local/elasticsearch/{conf,data,work,logs,plugins}

# egrep -v “#|^$” elasticsearch.yml

0x06 没什么问题之后,就可以启动ES了,它默认会监听9300和9200端口,9300是集群节点之间的通信端口,9200是提供给外部的api接口端口:

# /usr/local/elasticsearch/bin/elasticsearch 前台启动

# /usr/local/elasticsearch/bin/elasticsearch -d 后台启动

# curl http://192.168.3.139:9200

# jps | grep Elasticsearch

# kill -15 27257 注意如果要关闭elasticsearch,这里直接kill掉jvm进程即可

测试查询,看看ES是否真的已经可用

# curl -i -XGET ‘http://192.168.3.139:9200/_count?pretty’ -d ‘

{

   “query”:{

 “match_all”:{}

   }

}

0x06 安装一些常用的ES插件:

# /usr/local/elasticsearch/bin/plugin -i elasticsearch/marvel/latest 一个图形化的增删改查插件

浏览器访问

http://192.168.3.139:9200/_plugin/marvel/kibana/index.html#/dashboard/file/marvel.overview.json

# /usr/local/elasticsearch/bin/plugin -i mobz/elasticsearch-head 一个集群管理插件,节点,数据量较少时还是非常好用的

浏览器访问 http://192.168.3.139:9200/_plugin/head/

0x07 配置 Logstash,相当于数据源和ES之间的通道,Logstash把指定的数据源中的数据读过来,然后再通过Logstash把数据写到ES中,可以说是整个套件中最核心的地方:

# tar xf logstash-1.5.3.tar.gz

# mv logstash-1.5.3 /usr/local/

# ln -s /usr/local/logstash-1.5.3/ /usr/local/logstash

# mkdir /usr/local/logstash/etc/

# /usr/local/logstash/bin/logstash -e ‘input { stdin{} } output { stdout{codec => rubydebug} }’

# /usr/local/logstash/bin/logstash -e ‘input { stdin{} } output { elasticsearch { host => “192.168.3.139” protocol => “http”} }’

# vi /usr/local/logstash/etc/logstash.conf

# /usr/local/logstash/bin/logstash -f /usr/local/logstash/etc/logstash.conf 直接通过配置文件的方式启动

0x08 Logstash[基于jruby] 基本配置语法,还有非常多,更详细的内容请直接参考官方文档,篇幅原因这里不细说了,因为非常重要,所以大家可能要多花些时间来仔细学习:

input[数据源可以是文件,各类数据库…] -> filter -> output[ 一般都是es ]

# vi /usr/local/logstash/etc/logstash.conf

input {

file {

path => “/var/log/messages”

}

}

output {

file {

path => “/tmp/%{+YYYY-MM-dd}.messages.gz”

gzip => true

}

}

0x09 简单配置 Kibana[基于nodejs] 它主要用来搜索es中的数据,并将其可视化,默认监听5601端口:

# tar xf kibana-4.1.1-linux-x64.tar.gz

# mv kibana-4.1.1-linux-x64 /usr/local/

# ln -s /usr/local/kibana-4.1.1-linux-x64/ /usr/local/kibana

# cd /usr/local/kibana/config/

# vi kibana.yml

  elasticsearch_url: “http://192.168.3.139:9200”

# nohup /usr/local/kibana/bin/kibana

访问 http://192.168.3.139:5601/


0x10 平时经常要搜集的一些日志:

各类系统平台运行日志

各类服务访问,错误日志

各类程序自身的运行日志

基于web和内网的各种攻击特征日志

其它的各类业务日志等…

…..

一点小结:

这里仅仅也只是先把日志搜集平台大体框架搭起来,中间并未涉及任何具体应用

和运维不同的是,他们可能更偏向于去解决各类系统,服务故障,性能调优以及一些实际的业务规划,架构设计等等….

看日志的大多目的可能也都主要集中在这些点上,安全可能往往只是顺带考虑下而已,毕竟,不是专门做安全的

但作为一名防御者,我们关注更多的,可能还是存在日志中的各种各样的攻击特征

如果能实时捕捉到这些高危入侵特征,并实现可视化及高效报警,我想肯定会是一件非常有意思的事情

但同时也有个非常现实的问题,如果日志量特别大,想做到接近实时就非常困难了

这时,ELK也许会是个非常不错的选择…当然,已经有很多类似的商业产品,如,相对比较成熟的splunk

但splunk并非主要专注安全,不过好在splunk已经提供了非常强大的api

后续我们会再重点介绍它,也是一款非常不错的工具,但就是要收点儿钱

所以,在不想花钱的情况下,ELK绝对是个非常不错的选择

根据自己实际的渗透经验加上py,在此基础上定制一套极具针对性的”入侵日志监控系统”还是非常现实的…..

对了,像ES和logstash,每次这样手工启动,确实比较累,不过别人已经写好对应的系统启动脚本

这里毕竟不是运维,所以也就没仔细说,大家可自行去谷歌上找找,或者自己写写都行….

文章来源:klion’s blog

原文链接:https://klionsec.github.io/2017/08/01/ELK-LOG/

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容